Program Listing for File ListMap.hpp
↰ Return to documentation for file (include/lvr2/attrmaps/ListMap.hpp)
/*
* ListMap.hpp
*
* @date 27.07.2017
*/
#ifndef LVR2_ATTRMAPS_LISTMAP_H_
#define LVR2_ATTRMAPS_LISTMAP_H_
#include <utility>
#include <vector>
#include "lvr2/attrmaps/AttributeMap.hpp"
using std::vector;
using std::pair;
namespace lvr2
{
template<typename HandleT, typename ValueT>
class ListMap : public AttributeMap<HandleT, ValueT>
{
public:
ListMap() {}
ListMap(const ValueT& defaultValue);
ListMap(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:
vector<pair<HandleT, ValueT>> m_list;
boost::optional<ValueT> m_default;
// Internal helper method
typename std::vector<pair<HandleT, ValueT>>::const_iterator keyIterator(HandleT key) const;
typename std::vector<pair<HandleT, ValueT>>::iterator keyIterator(HandleT key);
template<typename, typename> friend class ListMap;
};
template<typename HandleT, typename ValueT>
class ListMapIterator : public AttributeMapHandleIterator<HandleT>
{
public:
ListMapIterator(typename vector<pair<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 vector<pair<HandleT, ValueT>>::const_iterator m_iter;
};
} // namespace lvr2
#include "lvr2/attrmaps/ListMap.tcc"
#endif /* LVR2_ATTRMAPS_LISTMAP_H_ */