15 #ifndef BORNAGAIN_CORE_EXPORT_ORDEREDMAP_H
16 #define BORNAGAIN_CORE_EXPORT_ORDEREDMAP_H
22 #include <unordered_map>
31 typedef std::pair<Key, Object> entry_t;
32 typedef std::list<entry_t> list_t;
33 typedef typename list_t::iterator iterator;
34 typedef typename list_t::const_iterator const_iterator;
35 typedef std::unordered_map<Key, iterator> map_t;
46 const_iterator begin()
const {
return m_list.begin(); }
47 const_iterator end()
const {
return m_list.end(); }
48 iterator begin() {
return m_list.begin(); }
49 iterator end() {
return m_list.end(); }
53 ASSERT(m_list.size() == m_map.size());
56 bool empty()
const {
return size() == 0; }
59 void insert(
const Key& key,
const Object&
object)
62 iterator it = m_list.insert(m_list.end(), std::make_pair(key,
object));
66 iterator find(
const Key& key)
68 iterator result = m_list.end();
69 if (m_map.find(key) != m_map.end()) {
75 const_iterator find(
const Key& key)
const
77 const_iterator result = m_list.end();
78 if (m_map.find(key) != m_map.end()) {
84 size_t erase(
const Key& key)
87 if (m_map.find(key) == m_map.end())
89 iterator it = m_map[key];
95 const Object& value(
const Key& key)
const
97 typename map_t::const_iterator mit = m_map.find(key);
98 if (mit == m_map.end()) {
99 throw std::runtime_error(
"OrderedMap::value() -> No such key");
101 const_iterator it = mit->second;
105 const Object& operator[](
const Key& key) {
return value(key); }
Defines the macro ASSERT.
Ordered map which saves the order of insertion.