From c93cdaf332f82a41272627e90361f40835d9b80a Mon Sep 17 00:00:00 2001 From: hop311 Date: Mon, 15 Apr 2024 00:27:41 +0100 Subject: Add std::optional assign pointer callback with overwrite control --- src/openvic-simulation/dataloader/NodeTools.hpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/openvic-simulation/dataloader') diff --git a/src/openvic-simulation/dataloader/NodeTools.hpp b/src/openvic-simulation/dataloader/NodeTools.hpp index c41c09e..b99fc48 100644 --- a/src/openvic-simulation/dataloader/NodeTools.hpp +++ b/src/openvic-simulation/dataloader/NodeTools.hpp @@ -443,9 +443,17 @@ namespace OpenVic { }; } + /* 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 - Callback auto assign_variable_callback_pointer(std::optional& var) { - return [&var](T const& val) -> bool { + Callback auto assign_variable_callback_pointer_opt( + std::optional& var, bool allow_overwrite = false + ) { + return [&var, allow_overwrite](T const& val) -> bool { + if (!allow_overwrite && var.has_value()) { + Logger::error("Canoot assign pointer value to already-initialised optional!"); + return false; + } var = &val; return true; }; -- cgit v1.2.3-56-ga3b1