A simple implementation of AttributeMap for a small number of values. More...
#include <ListMap.hpp>
Public Member Functions | |
AttributeMapHandleIteratorPtr< HandleT > | begin () const final |
Returns an iterator over all keys of this map. The order of iteration is unspecified. More... | |
void | clear () final |
Removes all values from the map. More... | |
bool | containsKey (HandleT key) const final |
Returns true iff the map contains a value associated with the given key. More... | |
AttributeMapHandleIteratorPtr< HandleT > | end () const final |
Returns an iterator to the end of all keys. More... | |
boost::optional< ValueT > | erase (HandleT key) final |
Removes the value associated with the given key. More... | |
boost::optional< ValueT & > | get (HandleT key) final |
Returns the value associated with the given key or None if there is no associated value. More... | |
boost::optional< const ValueT & > | get (HandleT key) const final |
Returns the value associated with the given key or None if there is no associated value. More... | |
boost::optional< ValueT > | insert (HandleT key, const ValueT &value) final |
Inserts the given value at the given key position. More... | |
ListMap () | |
Creates an empty map without default element set. More... | |
ListMap (const ValueT &defaultValue) | |
Creates a map with a given default value. More... | |
ListMap (size_t countElements, const ValueT &defaultValue) | |
Creates a map with a given default value and calls reserve. More... | |
size_t | numValues () const final |
Returns the number of values in this map. More... | |
void | reserve (size_t newCap) |
Allocates space for at least newCap more elements. More... | |
Public Member Functions inherited from lvr2::AttributeMap< HandleT, ValueT > | |
ValueT & | operator[] (HandleT key) |
Returns the value associated with the given key or panics if there is no associated value. More... | |
const ValueT & | operator[] (HandleT key) const |
Returns the value associated with the given key or panics if there is no associated value. More... | |
Private Member Functions | |
vector< pair< HandleT, ValueT > >::const_iterator | keyIterator (HandleT key) const |
vector< pair< HandleT, ValueT > >::iterator | keyIterator (HandleT key) |
Private Attributes | |
boost::optional< ValueT > | m_default |
vector< pair< HandleT, ValueT > > | m_list |
Friends | |
template<typename , typename > | |
class | ListMap |
Additional Inherited Members | |
Public Types inherited from lvr2::AttributeMap< HandleT, ValueT > | |
typedef HandleT | HandleType |
The type of the handle used as key in this map. More... | |
typedef ValueT | ValueType |
The type of the value stored in this map. More... | |
A simple implementation of AttributeMap for a small number of values.
This implementation uses a simple, unordered list of key-value pairs to represent the map. This means that nearly all operations have a complexity of O(number_of_values), which is rather suboptimal. Thus this implementation only makes sense when the number of values is expected to be very small. A modern computer can easily search linearly through, like, 16 things. When we're dealing with a small number of things, often linear search will be faster than something fancy (like hashing or binary search).
However, this implementation doesn't use its whole potential right now. The biggest speed gain is possible by using small buffer optimization (SBO). This still needs to be implemented, but should be fairly straight forward.
Definition at line 65 of file ListMap.hpp.
|
inline |
Creates an empty map without default element set.
Definition at line 71 of file ListMap.hpp.
lvr2::ListMap< HandleT, ValueT >::ListMap | ( | const ValueT & | defaultValue | ) |
Creates a map with a given default value.
Whenever you request a value for a key and there isn't a value associated with that key, the default value is returned. Note that if you set a default value (which you do by calling this constructor), you can't remove it. Neither erase()
nor clear()
will do it. Calls to get()
will always return a non-none value and operator[]
won't ever panic.
One additional important detail: if you call get()
to obtain a mutable reference, the default value is inserted into the map. This is the only sane way to return a mutably reference.
lvr2::ListMap< HandleT, ValueT >::ListMap | ( | size_t | countElements, |
const ValueT & | defaultValue | ||
) |
Creates a map with a given default value and calls reserve.
This works exactly as the ListMap(const Value&)
constructor, but also calls reserve(countElements)
immediately afterwards.
|
finalvirtual |
Returns an iterator over all keys of this map. The order of iteration is unspecified.
You can simply iterate over all keys of this map with a range-based for-loop:
Implements lvr2::AttributeMap< HandleT, ValueT >.
|
finalvirtual |
Removes all values from the map.
Implements lvr2::AttributeMap< HandleT, ValueT >.
|
finalvirtual |
Returns true iff the map contains a value associated with the given key.
Implements lvr2::AttributeMap< HandleT, ValueT >.
|
finalvirtual |
Returns an iterator to the end of all keys.
Implements lvr2::AttributeMap< HandleT, ValueT >.
|
finalvirtual |
Removes the value associated with the given key.
Implements lvr2::AttributeMap< HandleT, ValueT >.
|
finalvirtual |
Returns the value associated with the given key or None if there is no associated value.
Note: this method can not be used to insert a new value. It only allows reading and modifying an already inserted value.
Implements lvr2::AttributeMap< HandleT, ValueT >.
|
finalvirtual |
Returns the value associated with the given key or None if there is no associated value.
Note: this method can not be used to insert a new value. It only allows reading an already inserted value.
Implements lvr2::AttributeMap< HandleT, ValueT >.
|
finalvirtual |
Inserts the given value at the given key position.
Implements lvr2::AttributeMap< HandleT, ValueT >.
|
private |
|
private |
|
finalvirtual |
Returns the number of values in this map.
Implements lvr2::AttributeMap< HandleT, ValueT >.
void lvr2::ListMap< HandleT, ValueT >::reserve | ( | size_t | newCap | ) |
Allocates space for at least newCap
more elements.
|
friend |
Definition at line 124 of file ListMap.hpp.
|
private |
Definition at line 118 of file ListMap.hpp.
|
private |
Definition at line 117 of file ListMap.hpp.