diff options
author | hop311 <hop3114@gmail.com> | 2023-12-31 01:47:31 +0100 |
---|---|---|
committer | hop311 <hop3114@gmail.com> | 2024-01-02 14:41:28 +0100 |
commit | 5f64f983d0cead266a28791be42162c443fd2a75 (patch) | |
tree | da5fbb48d6c01d6faedd16b46ff846c65fdb4c33 /src/openvic-simulation/history/CountryHistory.cpp | |
parent | 9988b21278dc1c8df044631bd2935a7e450a7bff (diff) |
Added framework for loading all Conditions and Effects
Diffstat (limited to 'src/openvic-simulation/history/CountryHistory.cpp')
-rw-r--r-- | src/openvic-simulation/history/CountryHistory.cpp | 44 |
1 files changed, 32 insertions, 12 deletions
diff --git a/src/openvic-simulation/history/CountryHistory.cpp b/src/openvic-simulation/history/CountryHistory.cpp index 48b30e6..681b2b9 100644 --- a/src/openvic-simulation/history/CountryHistory.cpp +++ b/src/openvic-simulation/history/CountryHistory.cpp @@ -52,20 +52,40 @@ bool CountryHistoryMap::_load_history_entry( })(value); } - Technology const* technology = technology_manager.get_technology_by_identifier(key); - if (technology != nullptr) { - bool flag; - if (expect_int_bool(assign_variable_callback(flag))(value)) { - return entry.technologies.emplace(technology, flag).second; - } else return false; + { + Technology const* technology = technology_manager.get_technology_by_identifier(key); + if (technology != nullptr) { + return expect_int_bool( + [&entry, technology](bool flag) -> bool { + if (!entry.technologies.emplace(technology, flag).second) { + Logger::error( + "Duplicate entry for technology ", technology->get_identifier(), " in history of ", + entry.get_country().get_identifier(), " at date ", entry.get_date() + ); + return false; + } + return true; + } + )(value); + } } - Invention const* invention = invention_manager.get_invention_by_identifier(key); - if (invention != nullptr) { - bool flag; - if (expect_bool(assign_variable_callback(flag))(value)) { - return entry.inventions.emplace(invention, flag).second; - } else return false; + { + Invention const* invention = invention_manager.get_invention_by_identifier(key); + if (invention != nullptr) { + return expect_bool( + [&entry, invention](bool flag) -> bool { + if (!entry.inventions.emplace(invention, flag).second) { + Logger::error( + "Duplicate entry for invention ", invention->get_identifier(), " in history of ", + entry.get_country().get_identifier(), " at date ", entry.get_date() + ); + return false; + } + return true; + } + )(value); + } } return _load_history_sub_entry_callback( |