diff options
author | Hop311 <Hop3114@gmail.com> | 2023-10-17 00:37:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-17 00:37:21 +0200 |
commit | e65646f260360f634cc7d4ff28e7676c766ebcd8 (patch) | |
tree | be293fe4b4597b74c9d35143a551a8fb33f80290 /src/openvic-simulation/politics/NationalValue.cpp | |
parent | fe319098e49c9841219a9e118a30ebef05eb2c51 (diff) | |
parent | f4f41b6c51ce7a1d719759128b2af92604df5182 (diff) |
Merge pull request #54 from OpenVicProject/national-values-loading
Implement National Values Loading
Diffstat (limited to 'src/openvic-simulation/politics/NationalValue.cpp')
-rw-r--r-- | src/openvic-simulation/politics/NationalValue.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/openvic-simulation/politics/NationalValue.cpp b/src/openvic-simulation/politics/NationalValue.cpp new file mode 100644 index 0000000..f1d8a3b --- /dev/null +++ b/src/openvic-simulation/politics/NationalValue.cpp @@ -0,0 +1,38 @@ +#include "NationalValue.hpp" + +using namespace OpenVic; +using namespace OpenVic::NodeTools; + +NationalValue::NationalValue(std::string_view new_identifier, ModifierValue&& new_modifiers) + : HasIdentifier { new_identifier }, modifiers { std::move(new_modifiers) } {} + +ModifierValue const& NationalValue::get_modifiers() const { + return modifiers; +} + +NationalValueManager::NationalValueManager() : national_values { "national values" } {} + +bool NationalValueManager::add_national_value(std::string_view identifier, ModifierValue&& modifiers) { + if (identifier.empty()) { + Logger::error("Invalid national value identifier - empty!"); + return false; + } + + return national_values.add_item({ identifier, std::move(modifiers) }); +} + +bool NationalValueManager::load_national_values_file(ModifierManager const& modifier_manager, ast::NodeCPtr root) { + bool ret = expect_dictionary( + [this, &modifier_manager](std::string_view national_value_identifier, ast::NodeCPtr value) -> bool { + ModifierValue modifiers; + + bool ret = modifier_manager.expect_modifier_value(move_variable_callback(modifiers))(value); + + ret &= add_national_value(national_value_identifier, std::move(modifiers)); + return ret; + } + )(root); + lock_national_values(); + + return ret; +} |