2 #ifndef GAUDIKERNEL_VECTORMAP_H 3 #define GAUDIKERNEL_VECTORMAP_H 1 11 #include <initializer_list> 100 template <
class KEY,
class VALUE,
class KEYCOMPARE = std::less<const KEY>,
101 class ALLOCATOR = std::allocator<std::pair<KEY, VALUE>>>
166 bool operator()(
const key_type& k1,
const key_type& k2 )
const {
170 bool operator()(
const value_type& v1,
const value_type& v2 )
const {
return operator()( v1.first, v2.first ); }
217 size_type
erase(
const key_type& key ) {
218 iterator pos =
find( key );
219 if (
end() == pos ) {
return 0; }
229 size_type
erase( iterator first, iterator last ) {
254 template <
class TYPE>
255 size_type
erase( TYPE first, TYPE last ) {
257 for ( ; first != last; ++first ) { res +=
erase( *first ); }
344 result_type
insert(
const value_type& value ) {
347 if (
end() == result ||
compare( value.first, result->first ) ) {
362 result_type
insert( iterator pos,
const value_type& value ) {
363 if ( pos !=
end() &&
compare( *pos, value ) &&
364 ( pos ==
end() - 1 || ( !
compare( value, *( pos + 1 ) ) &&
compare( *( pos + 1 ), value ) ) ) ) {
379 result_type
insert( iterator pos,
const key_type& key,
const mapped_type& mapped ) {
388 template <
class PAIRS>
390 for ( ; first != last; ++first ) {
insert( *first ); }
400 template <
class KEYS,
class VALUES>
401 void insert( KEYS kf, KEYS kl, VALUES vf ) {
402 for ( ; kf != kl; ++kf, ++vf ) {
insert( *kf, *vf ); }
430 iterator
find(
const key_type& key )
const {
432 if (
end() != res &&
compare( key, res->first ) ) { res =
end(); }
451 size_type
count(
const key_type& key )
const {
return end() ==
find( key ) ? 0 : 1; }
516 bool update(
const key_type& key,
const mapped_type& mapped ) {
518 if (
end() == result ||
compare( key, result->first ) ) {
522 result->second = mapped;
556 bool update(
const value_type& val ) {
return update( val.first, val.second ); }
590 static const mapped_type s_default =
mapped_type();
591 iterator res =
find( key );
592 if (
end() == res ) {
return s_default; }
626 const mapped_type&
operator[](
const key_type& key )
const {
return ( *
this )( key ); }
645 const mapped_type&
at(
const key_type& key )
const {
646 iterator res =
find( key );
667 template <
class INPUT>
678 :
m_vct( first, alloc ) {
700 for (
const auto& i : right ) {
update( i.first, i.second ); }
704 template <
class K1,
class K2,
class K3,
class K4>
706 for (
const auto& i : right ) {
update( i.first, i.second ); }
717 const key_type&
key_at(
const size_t index )
const {
719 auto it = this->
begin();
728 const mapped_type&
value_at(
const size_t index )
const {
730 auto it = this->
begin();
744 template <
class TYPE1,
class TYPE2>
745 bool compare(
const TYPE1& obj1,
const TYPE2& obj2 )
const {
746 return compare()( obj1, obj2 );
763 auto result =
begin();
783 template <
class KEY,
class VALUE,
class KEYCOMPARE,
class ALLOCATOR>
826 #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 ...
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
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
StatusCode parse(DataObjID &dest, const std::string &src)
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
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
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: