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>>();
46 BlamMap(std::map<KeyType, ValueType> std_map)
48 typename std::map<KeyType, ValueType>::iterator it;
50 for (it = std_map.begin(); it != std_map.end(); it++)
52 Add(it->first, it->second);
63 return internal_map.size();
76 ValueType
At(KeyType key)
86 throw std::exception(
"Map did not contain any item with matching key. Use Contains() before calling to ensure safety.");
103 return &internal_map.at(index);
106 throw std::exception(
"Attempted to fetch a pair with an index that was out of range. Check index against Size() first.");
114 void Add(std::pair<KeyType, ValueType> pair)
116 Add(pair.first, pair.second);
128 void Add(KeyType key, ValueType value)
133 new_pair.
value = value;
136 for (
int i = 0; i < internal_map.size(); i++)
143 internal_map[i] = pair;
148 internal_map.push_back(new_pair);
178 std::vector<KeyType> key_list = std::vector<KeyType>();
182 key_list.push_back(pair.key);
195 std::vector<ValueType> value_list = std::vector<ValueType>();
199 value_list.push_back(pair.value);
212 std::map<KeyType, ValueType> std_map = std::map<KeyType, ValueType>();
216 std_map.insert(std::pair<KeyType, ValueType>(pair.key, pair.value));
244 if (pair.value == value)
263 for (
int i = 0; i < internal_map.size(); i++)
265 if (internal_map.at(i).key == key)
267 internal_map.erase(internal_map.begin() + i);
284 if (index >= 0 && index < internal_map.size())
286 internal_map.erase(internal_map.begin() + index);
304 for (
int i = internal_map.size() - 1; i >= 0; i--)
306 if (internal_map.at(i).value == value)
308 internal_map.erase(internal_map.begin() + i);
321 internal_map.clear();