1 #ifndef DataFormats_Common_RangeMap_h
2 #define DataFormats_Common_RangeMap_h
26 #include <ext/functional>
49 typedef std::pair<unsigned int, unsigned int>
pairType;
53 typedef std::pair<const_iterator, const_iterator>
range;
57 template<
typename CMP>
61 return cmp(
id, p.first);
64 return cmp(p.first,
id);
81 template<
typename CMP>
83 using namespace __gnu_cxx;
84 std::pair<
typename mapType::const_iterator,
85 typename mapType::const_iterator>
r =
86 std::equal_range(
map_.begin(),
map_.end(), id, comp<CMP>(comparator));
88 if ((
r.first) ==
map_.end()){
94 if ((
r.second) ==
map_.end()){
102 template<
typename CMP>
104 return get(
p.first,
p.second);
109 typename mapType::const_iterator
i =
map_.find(
id);
110 if (i !=
map_.end()) {
116 return std::make_pair(begin, end);
119 template<
typename CI>
121 typename mapType::const_iterator
i =
map_.find(
id);
122 if(i !=
map_.end()) {
125 assert(i ==
map_.end());
128 for(CI i = begin; i !=
end; ++
i)
163 for (
typename mapType::iterator it =
map_.begin(), itEnd =
map_.end(); it != itEnd; it ++) {
164 range r =
get((*it).first);
166 unsigned int begIt =
static_cast<unsigned int>(tmp.size());
169 unsigned int endIt =
static_cast<unsigned int>(tmp.size());
170 it->second =
pairType(begIt, endIt);
177 id_iterator
id_end()
const {
return id_iterator(
map_.end()); }
181 std::vector<ID>
ids()
const {
209 collection_.swap(other.collection_);
210 map_.swap(other.map_);
213 template <
typename ID,
typename C,
typename P>
223 template <
typename ID,
typename C,
typename P>
C collection_
stored collection
void post_insert()
perfor post insert action
std::pair< const_iterator, const_iterator > range
iterator range
id_iterator & operator++()
id_iterator id_begin() const
first identifier iterator
mapType map_
identifier map
void swap(RangeMap< ID, C, P > &other)
swap member function
size_t size() const
return number of contained object
C::const_iterator begin() const
first collection iterator
bool operator==(const id_iterator &ci) const
reference operator[](size_type i)
direct access to an object in the collection
id_iterator id_end() const
last identifier iterator
#define CMS_CLASS_VERSION(_version_)
mapType::const_iterator::iterator_category iterator_category
id_iterator & operator--()
const ID operator*() const
U second(std::pair< T, U > const &p)
C::const_iterator const_iterator
constant access iterator type
std::pair< unsigned int, unsigned int > pairType
index range
id_iterator operator++(int)
bool operator()(ID id, const typename mapType::value_type &p)
id_iterator & operator=(const id_iterator &it)
Container::value_type value_type
void put(ID id, CI begin, CI end)
insert an object range with specified identifier
ptrdiff_t difference_type
C::reference reference
reference type
std::map< ID, pairType > mapType
map of identifier to index range
id_iterator(const_iterator o)
mapType::const_iterator const_iterator
size_t id_size() const
number of contained identifiers
std::vector< std::vector< double > > tmp
bool operator!=(const id_iterator &ci) const
RangeMap()
default constructor
C::value_type value_type
contained object type
std::vector< ID > ids() const
indentifier vector
bool operator()(const typename mapType::value_type &p, ID id)
RangeMap & operator=(RangeMap const &rhs)
copy assignment
C::const_iterator end() const
last collection iterator
C::pointer pointer
pointer type
id_iterator operator--(int)
C::size_type size_type
collection size type