From 5f64f983d0cead266a28791be42162c443fd2a75 Mon Sep 17 00:00:00 2001 From: hop311 Date: Sun, 31 Dec 2023 00:47:31 +0000 Subject: Added framework for loading all Conditions and Effects --- src/openvic-simulation/history/CountryHistory.cpp | 44 ++++++++++++++++------- 1 file changed, 32 insertions(+), 12 deletions(-) (limited to 'src/openvic-simulation/history/CountryHistory.cpp') 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( -- cgit v1.2.3-56-ga3b1