1- // Copyright 2017-2023 the openage authors. See copying.md for legal info.
1+ // Copyright 2017-2024 the openage authors. See copying.md for legal info.
22
33#pragma once
44
88#include < utility>
99
1010#include " curve/map_filter_iterator.h"
11+ #include " curve/element_wrapper.h"
1112#include " time/time.h"
1213#include " util/fixed_point.h"
1314
@@ -20,26 +21,15 @@ namespace openage::curve {
2021 */
2122template <typename key_t , typename val_t >
2223class UnorderedMap {
23- /* * Internal container to access all data and metadata */
24- struct map_element {
25- map_element (const val_t &v, const time::time_t &a, const time::time_t &d) :
26- value (v),
27- alive (a),
28- dead (d) {}
29-
30- val_t value;
31- time::time_t alive;
32- time::time_t dead;
33- };
3424
3525 /* *
3626 * Data holder. Maps keys to map elements.
3727 * Map elements themselves store when they are valid.
3828 */
39- std::unordered_map<key_t , map_element > container;
29+ std::unordered_map<key_t , element_wrapper< val_t > > container;
4030
4131public:
42- using const_iterator = typename std::unordered_map<key_t , map_element >::const_iterator;
32+ using const_iterator = typename std::unordered_map<key_t , element_wrapper< val_t > >::const_iterator;
4333
4434 std::optional<MapFilterIterator<key_t , val_t , UnorderedMap>>
4535 operator ()(const time::time_t &, const key_t &) const ;
@@ -95,7 +85,7 @@ std::optional<MapFilterIterator<key_t, val_t, UnorderedMap<key_t, val_t>>>
9585UnorderedMap<key_t , val_t >::at(const time::time_t &time,
9686 const key_t &key) const {
9787 auto e = this ->container .find (key);
98- if (e != this ->container .end () and e->second .alive <= time and e->second .dead > time) {
88+ if (e != this ->container .end () and e->second .alive () <= time and e->second .dead () > time) {
9989 return MapFilterIterator<key_t , val_t , UnorderedMap<key_t , val_t >>(
10090 e,
10191 this ,
@@ -160,7 +150,7 @@ UnorderedMap<key_t, val_t>::insert(const time::time_t &alive,
160150 const time::time_t &dead,
161151 const key_t &key,
162152 const val_t &value) {
163- map_element e (value, alive, dead) ;
153+ element_wrapper< val_t > e{ alive, dead, value} ;
164154 auto it = this ->container .insert (std::make_pair (key, e));
165155 return MapFilterIterator<key_t , val_t , UnorderedMap<key_t , val_t >>(
166156 it.first ,
0 commit comments