This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
portland-os/src/user/include/cxx/structs/map.h

34 lines
No EOL
821 B
C++

#ifndef STRUCTS_MAP_H
#define STRUCTS_MAP_H
#include <structs/alist.h>
template<class key, class value, bool (*equals)(key, key) = &key::operator==>
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