blob: f9c477fa311e84dc255a03a14bf9a834ab652fbc (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#ifndef STRUCTS_MAP_H
#define STRUCTS_MAP_H
#include <structs/alist.h>
template<class type>
bool default_equals(type a, type b) {
return a == b;
}
template<class key, class value, bool (*equals)(key, key) = &default_equals<key>>
class map {
public:
alist<key> keys;
alist<value> values;
map(uint32_t default_size=10, uint32_t expand_by=10)
: keys(default_size, expand_by), values(default_size, expand_by) {}
void add_pair(key k, value v) {
for (key *i = keys.buf; i < keys.buf + keys.n_entries; ++i)
if (equals(k, *i)) {
values.buf[i - keys.buf] = v;
return;
}
keys.add_back(k);
values.add_back(v);
}
__attribute__ ((pure))
value transform(key k, value fallback=value()) {
for (key *i = keys.buf; i < keys.buf + keys.n_entries; ++i)
if (equals(k, *i))
return values.buf[i - keys.buf];
return fallback;
}
};
#endif
|