Program Listing for File HashMap.hpp
↰ Return to documentation for file (include/lvr2/attrmaps/HashMap.hpp)
/*
* HashMap.hpp
*
* @date 27.07.2017
*/
#ifndef LVR2_ATTRMAPS_HASHMAP_H_
#define LVR2_ATTRMAPS_HASHMAP_H_
#include <unordered_map>
#include "lvr2/attrmaps/AttributeMap.hpp"
using std::unordered_map;
namespace lvr2
{
template<typename HandleT, typename ValueT>
class HashMap : public AttributeMap<HandleT, ValueT>
{
public:
HashMap() {}
HashMap(const ValueT& defaultValue);
HashMap(size_t countElements, const ValueT& defaultValue);
// =======================================================================
// Implemented methods from the interface (check interface for docs)
// =======================================================================
bool containsKey(HandleT key) const final;
boost::optional<ValueT> insert(HandleT key, const ValueT& value) final;
boost::optional<ValueT> erase(HandleT key) final;
void clear() final;
boost::optional<ValueT&> get(HandleT key) final;
boost::optional<const ValueT&> get(HandleT key) const final;
size_t numValues() const final;
AttributeMapHandleIteratorPtr<HandleT> begin() const final;
AttributeMapHandleIteratorPtr<HandleT> end() const final;
void reserve(size_t newCap);
private:
unordered_map<HandleT, ValueT> m_map;
boost::optional<ValueT> m_default;
};
template<typename HandleT, typename ValueT>
class HashMapIterator : public AttributeMapHandleIterator<HandleT>
{
public:
HashMapIterator(typename unordered_map<HandleT, ValueT>::const_iterator iter);
AttributeMapHandleIterator<HandleT>& operator++() final;
bool operator==(const AttributeMapHandleIterator<HandleT>& other) const final;
bool operator!=(const AttributeMapHandleIterator<HandleT>& other) const final;
HandleT operator*() const final;
std::unique_ptr<AttributeMapHandleIterator<HandleT>> clone() const final;
private:
typename unordered_map<HandleT, ValueT>::const_iterator m_iter;
};
} // namespace lvr2
#include "lvr2/attrmaps/HashMap.tcc"
#endif /* LVR2_ATTRMAPS_HASHMAP_H_ */