7 #define STRINGS_API __declspec(dllexport)
9 #define STRINGS_API __declspec(dllimport)
17 template<
typename KeyType,
typename ValueType>
struct BlamMapPair
30 template<
typename KeyType,
typename ValueType>
class BlamMap
33 std::vector<BlamMapPair<KeyType, ValueType>> internal_map = std::vector<BlamMapPair<KeyType, ValueType>>();
49 BlamMap(std::map<KeyType, ValueType> std_map)
51 typename std::map<KeyType, ValueType>::iterator it;
53 for (it = std_map.begin(); it != std_map.end(); it++)
55 Add(it->first, it->second);
66 return internal_map.size();
79 ValueType
At(KeyType key)
89 throw std::exception(
"Map did not contain any item with matching key. Use Contains() before calling to ensure safety.");
106 return &internal_map.at(index);
109 throw std::exception(
"Attempted to fetch a pair with an index that was out of range. Check index against Size() first.");
117 void Add(std::pair<KeyType, ValueType> pair)
119 Add(pair.first, pair.second);
131 void Add(KeyType key, ValueType value)
136 new_pair.
value = value;
139 for (
int i = 0; i < internal_map.size(); i++)
146 internal_map[i] = pair;
151 internal_map.push_back(new_pair);
181 std::vector<KeyType> key_list = std::vector<KeyType>();
185 key_list.push_back(pair.key);
198 std::vector<ValueType> value_list = std::vector<ValueType>();
202 value_list.push_back(pair.value);
215 std::map<KeyType, ValueType> std_map = std::map<KeyType, ValueType>();
219 std_map.insert(std::pair<KeyType, ValueType>(pair.key, pair.value));
247 if (pair.value == value)
266 for (
int i = 0; i < internal_map.size(); i++)
268 if (internal_map.at(i).key == key)
270 internal_map.erase(internal_map.begin() + i);
287 if (index >= 0 && index < internal_map.size())
289 internal_map.erase(internal_map.begin() + index);
307 for (
int i = internal_map.size() - 1; i >= 0; i--)
309 if (internal_map.at(i).value == value)
311 internal_map.erase(internal_map.begin() + i);
324 internal_map.clear();