5#ifndef TRTCONDITIONSDATA_ARRAYSTORE_H
6#define TRTCONDITIONSDATA_ARRAYSTORE_H
31template <
typename IdType =
int,
typename StorageType = std::vector<
float> >
35 typedef std::less<IdType>
lessp;
37 typedef typename BufferMap::const_iterator
map_citr;
38 typedef typename BufferMap::iterator
map_itr;
47 const std::string&
tag()
const;
51 const StorageType&
operator[](
const IdType& ident)
const;
65 void share(
const IdType& ident,
const IdType& referenceIdent);
67 void push_back(
const IdType& ident,
const StorageType& value);
87template <
typename IdType,
typename StorageType>
90template <
typename IdType,
typename StorageType>
93template <
typename IdType,
typename StorageType>
96template <
typename IdType,
typename StorageType>
99template <
typename IdType,
typename StorageType>
101 m_buf.push_back(value);
105template <
typename IdType,
typename StorageType>
108template <
typename IdType,
typename StorageType>
111template <
typename IdType,
typename StorageType>
114template <
typename IdType,
typename StorageType>
117template <
typename IdType,
typename StorageType>
120template <
typename IdType,
typename StorageType>
123template <
typename IdType,
typename StorageType>
126template <
typename IdType,
typename StorageType>
134template <
typename IdType,
typename StorageType>
137template <
typename IdType,
typename StorageType>
140template <
typename IdType,
typename StorageType>
143template <
typename IdType,
typename StorageType>
146template <
typename IdType,
typename StorageType>
149#ifndef TRTCONDITIONSDATA_ARRAYSTORE_ICC
150#define TRTCONDITIONSDATA_ARRAYSTORE_ICC
152template <
typename IdType,
typename StorageType>
154 std::multimap<int,IdType> indexmap;
158 indexmap.insert(std::pair<int,IdType>(std::abs(itr->second),itr->first));
159 std::vector<StorageType> tmp(
m_buf);
163 for (;i<(int)tmp.size();i++){
166 typename std::multimap<int,IdType>::iterator pos;
167 for ( pos=indexmap.lower_bound(i); pos!=indexmap.upper_bound(i); ++pos){
170 shared_id=pos->second;
171 this->
push_back(shared_id,tmp[std::abs(i)]);
173 this->
share(pos->second,shared_id);
void cleanUp()
remove data with no index pointing to it
const std::string & tag() const
BufferMap m_bufmap
The std::map.
void dbg() const
print method
map_citr cbegin() const
begin/end const iterators
const StorageType & operator[](const IdType &ident) const
Overload [] const access.
bool sharedID(const IdType &ident)
returns flag for index sharing data
std::less< IdType > lessp
void push_back(const IdType &ident, const StorageType &value)
makes new index
std::string m_tag
The tag std::string.
void clear()
remove all indices
std::map< IdType, int, lessp > BufferMap
void share(const IdType &ident, const IdType &referenceIdent)
makes index ident share data with referenceIdent
std::vector< StorageType > m_buf
The object stored in each second element.
void removeID(const IdType &ident)
remove index
ArrayStore()
constructors, optionally with a tag
virtual ~ArrayStore()
destructor
bool existID(const IdType &ident)
returns flag for index existing in the std::map
BufferMap::iterator map_itr
BufferMap::const_iterator map_citr
int numberOfIDs()
Size accessor.
map_itr begin()
begin/end iterators