5 #ifndef GAUDIKERNEL_VECTORMAP_H
6 #define GAUDIKERNEL_VECTORMAP_H 1
107 class KEYCOMPARE=std::less<const KEY> ,
108 class ALLOCATOR=std::allocator<std::pair<KEY,VALUE> >
139 typedef std::vector<value_type,allocator_type>
_vector ;
149 typedef typename _vector::const_iterator
iterator ;
177 {
return this->key_compare::operator() ( k1 , k2 ) ; }
232 if (
end() == pos ) {
return 0 ; }
246 return last - first ;
269 template <
class TYPE>
273 for ( ; first != last ; ++first ) { res +=
erase ( *first ) ; }
368 if (
end() == result ||
compare( value.first , result -> first ) )
369 { result =
m_vct.insert ( result , value ) ; found = false ; }
385 if ( pos !=
end() &&
compare ( *pos , value ) &&
386 ( pos ==
end() - 1 ||
387 ( !
compare ( value , *( pos + 1 ) )
388 &&
compare ( *( pos + 1 ) , value ) ) ) )
413 template <
class PAIRS>
417 {
for ( ; first != last ; ++first ) {
insert ( *first ) ; } }
426 template <
class KEYS,
class VALUES>
void insert
430 {
for ( ; kf != kl ; ++kf, ++vf ) {
insert ( *kf , *vf ) ; } }
460 if (
end() != res &&
compare ( key , res->first ) )
481 {
return end() ==
find ( key ) ? 0 : 1 ; }
522 {
return right < left ; }
525 {
return !( left == right ) ; }
528 {
return !( left < right ) ; }
531 {
return !( right < left ) ; }
567 if (
end() == result ||
compare ( key , result -> first ) )
572 else { result->second = mapped ; }
606 {
return update ( val.first , val.second ) ; }
643 if (
end() == res ) {
return s_default ; }
678 {
return (*
this)( key ) ; }
729 template <
class INPUT>
733 :
m_vct ( first , last , alloc )
745 if ( &right ==
this ) {
return *this ; }
763 friend std::ostream&
operator<<
764 ( std::ostream& str ,
const VectorMap& ) {
return str ; }
772 {
update ( it->first , it->second ) ; }
777 template <
class K1,
class K2,
class K3,
class K4>
781 right.
begin() ; right.
end() != it ; ++it )
782 {
update ( it->first , it->second ) ; }
796 if ( index >=
size() )
799 std::advance ( it , index ) ;
809 if ( index >=
size() )
812 std::advance ( it , index ) ;
813 return it -> second ;
825 template <
class TYPE1,
class TYPE2>
827 const TYPE2& obj2 )
const
829 return compare() ( obj1 , obj2 ) ;
835 return std::lower_bound
843 std::advance ( result , std::distance (
begin() , p ) ) ;
851 std::advance ( result , std::distance (
m_vct.begin() , p ) ) ;
879 { left.
swap( right ) ; }
901 const std::string& input ) ;
915 const std::string& input ) ;
925 #endif // GAUDIKERNEL_MAPS_H
const mapped_type & operator[](const key_type &key) const
access to element by key (const version) there is no container increment for missing keys ...
A bit modified version of 'Loki::AssocVector' associative vector from Loki library by Andrei Alexandr...
friend bool operator!=(const VectorMap &left, const VectorMap &right)
bool operator==(const VectorMap &other) const
comparison criteria for containers
const mapped_type & at(const key_type &key) const
checked access to elements by key throw std::out_of_range exception for non-existing keys ...
const mapped_type & operator()(const key_type &key) const
access to element by key (const version) there is no container increment for missing keys ...
~VectorMap()
destructor (non-virtual!)
iterator iter(_iterator p)
the conversion from 'non-const' to 'const' iterator
void reserve(size_type num)
reserve the space in the container for at least 'num' elements
bool compare(const TYPE1 &obj1, const TYPE2 &obj2) const
compare the objects using the comaprison criteria
_vector::iterator _iterator
the regular iterator (no export)
const key_type & key_at(const size_t index) const
useful method for python decoration:
_vector::const_iterator iterator
visible const_iterator (exported)
StatusCode parse(GaudiUtils::HashMap< K, V > &result, const std::string &input)
Basic parser for the types of HashMap used in DODBasicMapper.
size_type erase(TYPE first, TYPE last)
erase the sequence of elements using the sequence of keys
bool operator()(const key_type &k1, const key_type &k2) const
compare keys: use key_compare
result_type insert(const key_type &key, const mapped_type &mapped)
insert the (key,value) pair into the container
VectorMap & merge(const VectorMap< K1, K2, K3, K4 > &right)
merge two maps
VectorMap(const VectorMap &right)
copy constructor
size_type erase(const key_type &key)
erase the element using the key
size_type max_size() const
maximal allowed size
iterator find(const key_type &key) const
find the element by key
const key_compare & compare_key() const
get the comparison criteria for keys
reverse_iterator rbegin() const
"rbegin" iterator for sequential access (const-only version!)
std::pair< iterator, iterator > iterators
visible iterator pait
iterator lower_bound(const key_type &key) const
iterator end() const
"end" iterator for sequential access (const-only version!)
ALLOCATOR::const_reference reference
the types to conform STL
size_type erase(iterator first, iterator last)
erase the sequence of elements using the iterators
_vector m_vct
the underlying sorted vector of (key,mapped) pairs
std::reverse_iterator< const_iterator > const_reverse_iterator
visible reverse const_iterator (exported)
This class is used for returning status codes from appropriate routines.
iterator begin() const
"begin" iterator for sequential access (const-only version!)
_compare_type()
default constructor
friend bool operator>=(const VectorMap &left, const VectorMap &right)
std::reverse_iterator< iterator > reverse_iterator
visible reverse const_iterator (exported)
friend bool operator>(const VectorMap &left, const VectorMap &right)
std::pair< iterator, bool > result_type
visible iterator pait
ALLOCATOR::const_reference const_reference
the types to conform STL
_compare_type(const key_compare &cmp)
constructor from the key-comparison criteria
bool update(const value_type &val)
forced insertion of the key/mapped pair The method acts like "insert" but it DOES overwrite the mappe...
friend bool operator<=(const VectorMap &left, const VectorMap &right)
VectorMap(INPUT first, INPUT last, const allocator_type &alloc=allocator_type())
templated constructor from "convertible" sequence
IInterface compliant class extending IInterface with the name() method.
reverse_iterator rend() const
"rend" iterator for sequential access (const-only version!)
VALUE mapped_type
the actual type of value
_compare_type compare_type
the actual comparison criteria for valye_type objects
_vector::const_iterator const_iterator
visible const_iterator (exported)
iterator upper_bound(const key_type &key) const
bool operator<(const VectorMap &other) const
comparison criteria for containers
VectorMap & operator=(const VectorMap &right)
size_type count(const key_type &key) const
count number of elements with the certain key
const compare_type & compare() const
get the comparison criteria itself
ALLOCATOR allocator_type
allocator (could be useful for optimizations)
std
AIDA -> ROTO converter.
_iterator iter(iterator p)
the conversion from 'const' to 'non-const' iterator
bool update(const key_type &key, const mapped_type &mapped)
forced insertion of the key/mapped pair The method acts like "insert" but it DOES overwrite the exist...
KEYCOMPARE key_compare
comparison of keys
void clear()
clear the container
KEY key_type
the actual type of key
void throw_out_of_range_exception() const
throw std::out_of_range exception
void swap(VectorMap &other)
swap function, which 'swaps' the content of two containers
The actual structure used to compare the elements Only "key" is important for comparison.
ALLOCATOR::difference_type difference_type
the types to conform STL
bool empty() const
empty container ?
iterators equal_range(const key_type &key) const
std::pair< key_type, mapped_type > value_type
the actual storage item
VectorMap & merge(const VectorMap &right)
merge two maps
This is a number of static methods for bootstrapping the Gaudi framework.
Helper base-class to allow the generic Python-decoration for all "map-like" classes in Gaudi...
ALLOCATOR::size_type size_type
the types to conform STL
void erase(iterator pos)
erase the element using the iterator
VectorMap(const allocator_type &alloc=allocator_type())
default constructor from the the allocator
_iterator lower_bound(const key_type &key)
'lower-bound' - non-const version
size_type size() const
number of elements
std::vector< value_type, allocator_type > _vector
the actual storage container (no export)
const mapped_type & value_at(const size_t index) const
useful method for python decoration: