1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
// structure composée de la donnée et son identifiant
template<class T>
struct SData
{
SData(int iId, T* pData) : m_iId(iId), m_pData(pData) {}
SData() {}
int m_iId;
T* m_pData;
};
// set de données
template<class T>
class CDataSet
{
private:
struct SOrderedAsInserted{};
struct SOrderedAsIds{};
struct SOrderedAsData{};
typedef boost::multi_index::multi_index_container<SData<T>,
boost::multi_index::indexed_by< // référencé par
boost::multi_index::sequenced<boost::multi_index::tag<SOrderedAsInserted>>, // insertion
boost::multi_index::ordered_unique< // Ids
boost::multi_index::tag<SOrderedAsIds>,
boost::multi_index::member<SData<T>,int,&SData<T>::m_iId>>,
boost::multi_index::ordered_unique< // Data
boost::multi_index::tag<SOrderedAsData>,
boost::multi_index::member<SData<T>,T*,&SData<T>::m_pData>>
>
> TMySet; /*!< Type de stockage du mapping. */
TMySet m_set;
typedef TMySet::index<SOrderedAsInserted>::type TByInsertion;
typedef TMySet::index<SOrderedAsIds>::type TByIds;
typedef TMySet::index<SOrderedAsData>::type TByData;
public:
void Add(int iId, T* data)
{
m_set.insert(m_set.end(), SData<T>(iId, pData));
}
} |
Partager