diff options
author | Hop311 <Hop3114@gmail.com> | 2024-07-17 14:01:19 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-17 14:01:19 +0200 |
commit | 2d111ea003e975ea1adbcd7e4d903f760f1daa07 (patch) | |
tree | fae6a1086f3ae698c4fb3f18340c5ed5f580c889 /src/openvic-simulation/dataloader | |
parent | e8a3b33f13ebdf3a388b4996308b4db9763dc375 (diff) | |
parent | f83e869def6608f64606aead24ad1cfbb6f5c72a (diff) |
Merge pull request #174 from OpenVicProject/indexed-map
Add IndexedMap and use in low key count, high value density cases
Diffstat (limited to 'src/openvic-simulation/dataloader')
-rw-r--r-- | src/openvic-simulation/dataloader/Dataloader.cpp | 5 | ||||
-rw-r--r-- | src/openvic-simulation/dataloader/NodeTools.hpp | 21 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/openvic-simulation/dataloader/Dataloader.cpp b/src/openvic-simulation/dataloader/Dataloader.cpp index f42a518..4fbd86b 100644 --- a/src/openvic-simulation/dataloader/Dataloader.cpp +++ b/src/openvic-simulation/dataloader/Dataloader.cpp @@ -538,7 +538,10 @@ bool Dataloader::_load_history(DefinitionManager& definition_manager, bool unuse } return country_history_manager.load_country_history_file( - definition_manager, *this, *country, parse_defines(file).get_file_node() + definition_manager, *this, *country, + definition_manager.get_politics_manager().get_ideology_manager().get_ideologies(), + definition_manager.get_politics_manager().get_government_type_manager().get_government_types(), + parse_defines(file).get_file_node() ); } ); diff --git a/src/openvic-simulation/dataloader/NodeTools.hpp b/src/openvic-simulation/dataloader/NodeTools.hpp index b0bb723..e53e896 100644 --- a/src/openvic-simulation/dataloader/NodeTools.hpp +++ b/src/openvic-simulation/dataloader/NodeTools.hpp @@ -12,6 +12,7 @@ #include "openvic-simulation/types/Colour.hpp" #include "openvic-simulation/types/Date.hpp" #include "openvic-simulation/types/HasIdentifier.hpp" +#include "openvic-simulation/types/IndexedMap.hpp" #include "openvic-simulation/types/OrderedContainers.hpp" #include "openvic-simulation/types/Vector.hpp" #include "openvic-simulation/utility/Getters.hpp" @@ -537,6 +538,26 @@ namespace OpenVic { }; } + template<typename Key, typename Value> + Callback<Value> auto map_callback( + IndexedMap<Key, Value>& map, Key const* key, bool warn = false + ) { + return [&map, key, warn](Value value) -> bool { + if (key == nullptr) { + Logger::error("Null key in map_callback"); + return false; + } + Value& map_value = map[*key]; + bool ret = true; + if (map_value != Value {}) { + Logger::warn_or_error(warn, "Duplicate map entry with key: \"", key, "\""); + ret = warn; + } + map_value = std::move(value); + return ret; + }; + } + /* Often used for rotations which must be negated due to OpenVic's coordinate system being orientated * oppositely to Vic2's. */ template<typename T = fixed_point_t> |