2 #ifndef GAUDIKERNEL_VECTORMAP_H     3 #define GAUDIKERNEL_VECTORMAP_H 1    11 #include <initializer_list>   101   template <
class KEY, 
class VALUE, 
class KEYCOMPARE = std::less<const KEY>,
   102             class ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
   168       bool operator()( 
const key_type& k1, 
const key_type& k2 )
 const   173       bool operator()( 
const value_type& v1, 
const value_type& v2 )
 const { 
return operator()( v1.first, v2.first ); }
   220     size_type 
erase( 
const key_type& key )
   222       iterator pos = 
find( key );
   223       if ( 
end() == pos ) {
   235     size_type 
erase( iterator first, iterator last )
   261     template <
class TYPE>
   262     size_type 
erase( TYPE first, TYPE last )
   265       for ( ; first != last; ++first ) {
   266         res += 
erase( *first );
   354     result_type 
insert( 
const value_type& value )
   358       if ( 
end() == result || 
compare( value.first, result->first ) ) {
   373     result_type 
insert( iterator pos, 
const value_type& value )
   375       if ( pos != 
end() && 
compare( *pos, value ) &&
   376            ( pos == 
end() - 1 || ( !
compare( value, *( pos + 1 ) ) && 
compare( *( pos + 1 ), value ) ) ) ) {
   391     result_type 
insert( iterator pos, 
const key_type& key, 
const mapped_type& mapped )
   401     template <
class PAIRS>
   404       for ( ; first != last; ++first ) {
   416     template <
class KEYS, 
class VALUES>
   417     void insert( KEYS kf, KEYS kl, VALUES vf )
   419       for ( ; kf != kl; ++kf, ++vf ) {
   449     iterator 
find( 
const key_type& key )
 const   452       if ( 
end() != res && 
compare( key, res->first ) ) {
   473     size_type 
count( 
const key_type& key )
 const { 
return end() == 
find( key ) ? 0 : 1; }
   538     bool update( 
const key_type& key, 
const mapped_type& mapped )
   541       if ( 
end() == result || 
compare( key, result->first ) ) {
   545         result->second = mapped;
   579     bool update( 
const value_type& val ) { 
return update( val.first, val.second ); }
   614       static const mapped_type s_default = 
mapped_type();
   615       iterator res                       = 
find( key );
   616       if ( 
end() == res ) {
   652     const mapped_type& 
operator[]( 
const key_type& key )
 const { 
return ( *
this )( key ); }
   671     const mapped_type& 
at( 
const key_type& key )
 const   673       iterator res = 
find( key );
   674       if ( 
end() == res ) {
   701     template <
class INPUT>
   713         : 
m_vct( first, alloc )
   727       if ( &right == 
this ) {
   754       for ( 
const auto& i : right ) {
   755         update( i.first, i.second );
   760     template <
class K1, 
class K2, 
class K3, 
class K4>
   763       for ( 
const auto& i : right ) {
   764         update( i.first, i.second );
   776     const key_type& 
key_at( 
const size_t index )
 const   778       if ( index >= 
size() ) {
   781       auto it = this->
begin();
   790     const mapped_type& 
value_at( 
const size_t index )
 const   792       if ( index >= 
size() ) {
   795       auto it = this->
begin();
   809     template <
class TYPE1, 
class TYPE2>
   810     bool compare( 
const TYPE1& obj1, 
const TYPE2& obj2 )
 const   812       return compare()( obj1, obj2 );
   832       auto result = 
begin();
   853   template <
class KEY, 
class VALUE, 
class KEYCOMPARE, 
class ALLOCATOR>
   899 #endif // GAUDIKERNEL_MAPS_H std::pair< iterator, bool > result_type
visible iterator pait 
const mapped_type & operator[](const key_type &key) const 
access to element by key (const version) there is no container increment for missing keys ...
bool operator()(const value_type &v1, const value_type &v2) const 
compare pairs (key,mapped): use compare by keys 
A bit modified version of 'Loki::AssocVector' associative vector from Loki library by Andrei Alexandr...
bool operator()(const value_type &v, const key_type &k) const 
compare pair (key,mapped) and the key: use compare by keys 
friend bool operator!=(const VectorMap &left, const VectorMap &right)
bool operator==(const VectorMap &other) const 
comparison criteria for containers 
std::vector< value_type, allocator_type > _vector
the actual storage container (no export) 
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) 
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 
friend std::ostream & operator<<(std::ostream &str, const VectorMap &)
printout to ostream - not implemented 
VectorMap & merge(const VectorMap< K1, K2, K3, K4 > &right)
merge two maps 
std::pair< key_type, mapped_type > value_type
the actual storage item 
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!) 
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!) 
void insert(PAIRS first, PAIRS last)
insert the sequence of elements into the container 
_compare_type()
default constructor 
void insert(KEYS kf, KEYS kl, VALUES vf)
insert into the container the elements from 2 "parallel" sequences 
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)
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...
result_type insert(iterator pos, const key_type &key, const mapped_type &mapped)
insert the (key,value) pair into the container With the right guess the method could be more efficien...
VectorMap(std::initializer_list< value_type > first, const allocator_type &alloc=allocator_type())
tconstructor from initializer list 
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 
reverse_iterator rend() const 
"rend" iterator for sequential access (const-only version!) 
std::pair< iterator, iterator > iterators
visible iterator pait 
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) 
virtual Out operator()(const vector_of_const_< In > &inputs) const  =0
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) 
Forward declarations for the functions in SerializeSTL.h. 
_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. 
result_type insert(iterator pos, const value_type &value)
insert the element with some guess about its new position With the right guess the method could be mo...
ALLOCATOR::difference_type difference_type
the types to conform STL 
bool empty() const 
empty container ? 
iterators equal_range(const key_type &key) const 
result_type insert(const value_type &value)
insert the (key,value) pair into the container 
VectorMap & merge(const VectorMap &right)
merge two maps 
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 
Helper functions to set/get the application return code. 
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 
GAUDI_API StatusCode parse(GaudiUtils::VectorMap< Gaudi::StringKey, double > &result, const std::string &input)
parse the vector of keys from the string 
size_type size() const 
number of elements 
bool operator()(const key_type &k, const value_type &v) const 
compare key and pair (key,mapped): use compare by keys 
const mapped_type & value_at(const size_t index) const 
useful method for python decoration: