comparison foosdk/sdk/pfc/fixed_map.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
comparison
equal deleted inserted replaced
0:e9bb126753e7 1:20d02a178406
1 #pragma once
2
3 #include <map>
4 #include <algorithm>
5 #include <vector>
6
7 template<typename key_t, typename value_t> class fixed_map {
8 public:
9 typedef std::map<key_t, value_t> source_t;
10
11 void initialize(source_t&& src) {
12 const size_t size = src.size();
13 m_keys.resize(size); m_values.resize(size);
14 size_t walk = 0;
15 for (auto iter = src.begin(); iter != src.end(); ++iter) {
16 m_keys[walk] = iter->first;
17 m_values[walk] = std::move(iter->second);
18 ++walk;
19 }
20 src.clear();
21 }
22
23 value_t query(key_t key) const {
24 auto iter = std::lower_bound(m_keys.begin(), m_keys.end(), key);
25 if (iter == m_keys.end() || *iter != key) return 0;
26 return m_values[iter - m_keys.begin()];
27 }
28
29 const value_t* query_ptr(key_t key) const {
30 auto iter = std::lower_bound(m_keys.begin(), m_keys.end(), key);
31 if (iter == m_keys.end() || *iter != key) return nullptr;
32 return &m_values[iter - m_keys.begin()];
33 }
34 private:
35 std::vector<key_t> m_keys;
36 std::vector<value_t> m_values;
37 };