From cc86b2374324d19dc5ee936c630fe7bda236fe1a Mon Sep 17 00:00:00 2001 From: kn Date: Thu, 5 Feb 2026 10:57:55 +0100 Subject: [PATCH] Fix the parameter override feature to accept non-string values also Previously this would fail: ./amc_server --set main.system.myparam=1 The initalization would exit with: Fatal initialization error: Error: INVALIDVARIABLETYPE: variable main.system.myparam is not a string variable (312) --- Implementation/LibMC/libmc_mccontext.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Implementation/LibMC/libmc_mccontext.cpp b/Implementation/LibMC/libmc_mccontext.cpp index ba324c62..4c25c96d 100644 --- a/Implementation/LibMC/libmc_mccontext.cpp +++ b/Implementation/LibMC/libmc_mccontext.cpp @@ -310,8 +310,27 @@ void CMCContext::SetParameterOverride(const std::string& sParameterPath, const s pStateMachineData->extractParameterDetailsFromDotString(sParameterPath, sParameterInstance, sParameterGroup, sParameterName, false, false); auto pParameterInstanceHandler = pStateMachineData->getParameterHandler(sParameterInstance); - auto pParamaterGroup = pParameterInstanceHandler->findGroup(sParameterGroup, true); - pParamaterGroup->setParameterValueByName(sParameterName, sParameterValue); + auto pParameterGroup = pParameterInstanceHandler->findGroup(sParameterGroup, true); + + auto eDataType = pParameterGroup->getParameterDataTypeByName(sParameterName); + + switch (eDataType) { + case AMC::eParameterDataType::String: + case AMC::eParameterDataType::UUID: + pParameterGroup->setParameterValueByName(sParameterName, sParameterValue); + break; + case AMC::eParameterDataType::Integer: + pParameterGroup->setIntParameterValueByName(sParameterName, AMCCommon::CUtils::stringToInteger(sParameterValue)); + break; + case AMC::eParameterDataType::Double: + pParameterGroup->setDoubleParameterValueByName(sParameterName, AMCCommon::CUtils::stringToDouble(sParameterValue)); + break; + case AMC::eParameterDataType::Bool: + pParameterGroup->setBoolParameterValueByName(sParameterName, AMCCommon::CUtils::stringToBool(sParameterValue)); + break; + default: + throw ELibMCCustomException(LIBMC_ERROR_INVALIDVARIABLETYPE, sParameterPath); + } }