diff options
author | Nemrav <> | 2024-09-17 18:44:23 +0200 |
---|---|---|
committer | Nemrav <> | 2024-09-17 18:44:23 +0200 |
commit | c232250cc9819ae8bf165a5707a926db928dcb2b (patch) | |
tree | 1067808ef3d362ddae62b8d5994138434c5b7178 /src/openvic-simulation/dataloader/NodeTools.hpp | |
parent | f090f8f33a41d8707795c8963fa67073ba90f554 (diff) | |
parent | d8c04cbe53188d4717f8c49f918e01657dbf3440 (diff) |
Merge branch 'master' into gfxobject
Diffstat (limited to 'src/openvic-simulation/dataloader/NodeTools.hpp')
-rw-r--r-- | src/openvic-simulation/dataloader/NodeTools.hpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/openvic-simulation/dataloader/NodeTools.hpp b/src/openvic-simulation/dataloader/NodeTools.hpp index 8265c94..dd0d022 100644 --- a/src/openvic-simulation/dataloader/NodeTools.hpp +++ b/src/openvic-simulation/dataloader/NodeTools.hpp @@ -448,6 +448,22 @@ namespace OpenVic { return assign_variable_callback_cast<T, T>(var); } + /* By default this will only allow an optional to be set once. Set allow_overwrite + * to true to allow multiple assignments, with the last taking precedence. */ + template<typename T> + Callback<T> auto assign_variable_callback_opt( + std::optional<T>& var, bool allow_overwrite = false + ) { + return [&var, allow_overwrite](T const& val) -> bool { + if (!allow_overwrite && var.has_value()) { + Logger::error("Cannot assign value to already-initialised optional!"); + return false; + } + var = val; + return true; + }; + } + callback_t<std::string_view> assign_variable_callback_string(std::string& var); template<typename T> @@ -492,7 +508,7 @@ namespace OpenVic { ) { return [&var, allow_overwrite](T const& val) -> bool { if (!allow_overwrite && var.has_value()) { - Logger::error("Canoot assign pointer value to already-initialised optional!"); + Logger::error("Cannot assign pointer value to already-initialised optional!"); return false; } var = &val; |