diff options
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; +} |