From 0a411759e70d04a26b87b5b337d3290ed7f929eb Mon Sep 17 00:00:00 2001 From: cochicde Date: Mon, 2 Dec 2024 18:10:51 +0100 Subject: [PATCH] remove all delete[] from interface setup (#285) * remove all delete[] from interface setup * remove event types spec from gen_e_mux --- src/core/cominfra/basecommfb.cpp | 4 -- src/core/cominfra/commfb.cpp | 58 +++++++++---------- src/core/cominfra/commfb.h | 12 +++- .../Arithmetic/GEN_FORTE_F_MOVE_fbt.cpp | 15 ++--- .../Arithmetic/GEN_FORTE_F_MOVE_fbt.h | 7 ++- .../BitwiseOperators/genbitbase_fbt.cpp | 15 ++--- .../BitwiseOperators/genbitbase_fbt.h | 8 ++- src/modules/convert/GEN_STRUCT_DEMUX_fbt.cpp | 24 ++++---- src/modules/convert/GEN_STRUCT_DEMUX_fbt.h | 10 +++- src/modules/convert/GEN_STRUCT_MUX_fbt.cpp | 24 +++----- src/modules/convert/GEN_STRUCT_MUX_fbt.h | 10 +++- src/modules/utils/GEN_ARRAY2ARRAY_fbt.cpp | 13 +---- src/modules/utils/GEN_ARRAY2ARRAY_fbt.h | 12 ++-- src/modules/utils/GEN_ARRAY2VALUES_fbt.cpp | 19 ++---- src/modules/utils/GEN_ARRAY2VALUES_fbt.h | 15 +++-- src/modules/utils/GEN_CSV_WRITER_fbt.cpp | 12 ++-- src/modules/utils/GEN_CSV_WRITER_fbt.h | 6 +- src/modules/utils/GEN_F_MUX_fbt.cpp | 41 ++++--------- src/modules/utils/GEN_F_MUX_fbt.h | 22 +++---- src/modules/utils/GEN_VALUES2ARRAY_fbt.cpp | 19 ++---- src/modules/utils/GEN_VALUES2ARRAY_fbt.h | 11 ++-- src/stdfblib/events/GEN_E_DEMUX_fbt.cpp | 17 ++---- src/stdfblib/events/GEN_E_DEMUX_fbt.h | 7 ++- src/stdfblib/events/GEN_E_MUX_fbt.cpp | 19 ++---- src/stdfblib/events/GEN_E_MUX_fbt.h | 8 ++- 25 files changed, 182 insertions(+), 226 deletions(-) diff --git a/src/core/cominfra/basecommfb.cpp b/src/core/cominfra/basecommfb.cpp index ad9d18f22..f19134765 100644 --- a/src/core/cominfra/basecommfb.cpp +++ b/src/core/cominfra/basecommfb.cpp @@ -40,10 +40,6 @@ CBaseCommFB::CBaseCommFB(const CStringDictionary::TStringId paInstanceNameId, fo CBaseCommFB::~CBaseCommFB() { closeConnection(); - delete[](getFBInterfaceSpec().mDINames); - delete[](getFBInterfaceSpec().mDIDataTypeNames); - delete[](getFBInterfaceSpec().mDONames); - delete[](getFBInterfaceSpec().mDODataTypeNames); } EMGMResponse CBaseCommFB::changeExecutionState(EMGMCommandType paCommand) { diff --git a/src/core/cominfra/commfb.cpp b/src/core/cominfra/commfb.cpp index d92459687..23f405cb4 100644 --- a/src/core/cominfra/commfb.cpp +++ b/src/core/cominfra/commfb.cpp @@ -212,69 +212,63 @@ bool CCommFB::createInterfaceSpec(const char* paConfigString, SFBInterfaceSpec& return true; } -void CCommFB::configureDIs(const char* paDIConfigString, SFBInterfaceSpec& paInterfaceSpec) const { - CStringDictionary::TStringId* diDataTypeNames; - CStringDictionary::TStringId* diNames; - +void CCommFB::configureDIs(const char* paDIConfigString, SFBInterfaceSpec& paInterfaceSpec) { paInterfaceSpec.mNumDIs = 2; if (forte::com_infra::e_DataInputs == (forte::com_infra::e_DataInputs & mCommServiceType)) { //TODO: Check range of sParamA paInterfaceSpec.mNumDIs = paInterfaceSpec.mNumDIs + static_cast(forte::core::util::strtol(paDIConfigString, nullptr, 10)); - diDataTypeNames = new CStringDictionary::TStringId[paInterfaceSpec.mNumDIs]; - diNames = new CStringDictionary::TStringId[paInterfaceSpec.mNumDIs]; + mDiDataTypeNames = std::make_unique(paInterfaceSpec.mNumDIs); + mDiNames = std::make_unique(paInterfaceSpec.mNumDIs); - generateGenericDataPointArrays("SD_", &(diDataTypeNames[2]), &(diNames[2]), paInterfaceSpec.mNumDIs - 2); + generateGenericDataPointArrays("SD_", &(mDiDataTypeNames[2]), &(mDiNames[2]), paInterfaceSpec.mNumDIs - 2); } else { - diDataTypeNames = new CStringDictionary::TStringId[paInterfaceSpec.mNumDIs]; - diNames = new CStringDictionary::TStringId[paInterfaceSpec.mNumDIs]; + mDiDataTypeNames = std::make_unique(paInterfaceSpec.mNumDIs); + mDiNames = std::make_unique(paInterfaceSpec.mNumDIs); } - paInterfaceSpec.mDIDataTypeNames = diDataTypeNames; - paInterfaceSpec.mDINames = diNames; + paInterfaceSpec.mDIDataTypeNames = mDiDataTypeNames.get(); + paInterfaceSpec.mDINames = mDiNames.get(); - diDataTypeNames[0] = g_nStringIdBOOL; - diNames[0] = g_nStringIdQI; + mDiDataTypeNames[0] = g_nStringIdBOOL; + mDiNames[0] = g_nStringIdQI; #ifdef FORTE_USE_WSTRING_DATATYPE - diDataTypeNames[1] = g_nStringIdWSTRING; + mDiDataTypeNames[1] = g_nStringIdWSTRING; #else //FORTE_USE_WSTRING_DATATYPE - diDataTypeNames[1] = g_nStringIdSTRING; + mDiDataTypeNames[1] = g_nStringIdSTRING; #endif //FORTE_USE_WSTRING_DATATYPE - diNames[1] = g_nStringIdID; + mDiNames[1] = g_nStringIdID; } -void CCommFB::configureDOs(const char* paDOConfigString, SFBInterfaceSpec& paInterfaceSpec) const { - CStringDictionary::TStringId* doDataTypeNames; - CStringDictionary::TStringId* doNames; - +void CCommFB::configureDOs(const char* paDOConfigString, SFBInterfaceSpec& paInterfaceSpec) { paInterfaceSpec.mNumDOs = 2; if(forte::com_infra::e_DataOutputs == (forte::com_infra::e_DataOutputs & mCommServiceType)){ //TODO: Check range of sParamA paInterfaceSpec.mNumDOs = paInterfaceSpec.mNumDOs + static_cast(forte::core::util::strtol(paDOConfigString, nullptr, 10)); - doDataTypeNames = new CStringDictionary::TStringId[paInterfaceSpec.mNumDOs]; - doNames = new CStringDictionary::TStringId[paInterfaceSpec.mNumDOs]; + mDoDataTypeNames = std::make_unique(paInterfaceSpec.mNumDOs); + mDoNames = std::make_unique(paInterfaceSpec.mNumDOs); - generateGenericDataPointArrays("RD_", &(doDataTypeNames[2]), &(doNames[2]), paInterfaceSpec.mNumDOs - 2); + generateGenericDataPointArrays("RD_", &(mDoDataTypeNames[2]), &(mDoNames[2]), paInterfaceSpec.mNumDOs - 2); } else{ - doDataTypeNames = new CStringDictionary::TStringId[paInterfaceSpec.mNumDOs]; - doNames = new CStringDictionary::TStringId[paInterfaceSpec.mNumDOs]; + mDoDataTypeNames = std::make_unique(paInterfaceSpec.mNumDOs); + mDoNames = std::make_unique(paInterfaceSpec.mNumDOs); } - paInterfaceSpec.mDONames = doNames; - paInterfaceSpec.mDODataTypeNames = doDataTypeNames; + paInterfaceSpec.mDONames = mDoNames.get(); + paInterfaceSpec.mDODataTypeNames = mDoDataTypeNames.get(); - doDataTypeNames[0] = g_nStringIdBOOL; - doNames[0] = g_nStringIdQO; + mDoDataTypeNames[0] = g_nStringIdBOOL; + mDoNames[0] = g_nStringIdQO; #ifdef FORTE_USE_WSTRING_DATATYPE - doDataTypeNames[1] = g_nStringIdWSTRING; + mDoDataTypeNames[1] = g_nStringIdWSTRING; #else - doDataTypeNames[1] = g_nStringIdSTRING; + mDoDataTypeNames[1] = g_nStringIdSTRING; #endif - doNames[1] = g_nStringIdSTATUS; + mDoNames[1] = g_nStringIdSTATUS; } diff --git a/src/core/cominfra/commfb.h b/src/core/cominfra/commfb.h index 0857220f2..521ba0114 100644 --- a/src/core/cominfra/commfb.h +++ b/src/core/cominfra/commfb.h @@ -65,10 +65,16 @@ namespace forte { static const CStringDictionary::TStringId scmEventInputTypeIds[]; static const CStringDictionary::TStringId scmEventOutputTypeIds[]; - bool createInterfaceSpec(const char* paConfigString, SFBInterfaceSpec& paInterfaceSpec) override; + std::unique_ptr mDiDataTypeNames; + std::unique_ptr mDiNames; + std::unique_ptr mDoDataTypeNames; + std::unique_ptr mDoNames; + + bool createInterfaceSpec(const char* paConfigString, SFBInterfaceSpec& paInterfaceSpec) override; + + void configureDIs(const char* paDIConfigString, SFBInterfaceSpec& paInterfaceSpec); + void configureDOs(const char* paDOConfigString, SFBInterfaceSpec& paInterfaceSpec); - void configureDIs(const char* paDIConfigString, SFBInterfaceSpec& paInterfaceSpec) const; - void configureDOs(const char* paDOConfigString, SFBInterfaceSpec& paInterfaceSpec) const; }; } diff --git a/src/modules/IEC61131-3/Arithmetic/GEN_FORTE_F_MOVE_fbt.cpp b/src/modules/IEC61131-3/Arithmetic/GEN_FORTE_F_MOVE_fbt.cpp index ceb6b95f4..f14945a16 100644 --- a/src/modules/IEC61131-3/Arithmetic/GEN_FORTE_F_MOVE_fbt.cpp +++ b/src/modules/IEC61131-3/Arithmetic/GEN_FORTE_F_MOVE_fbt.cpp @@ -40,11 +40,6 @@ GEN_FORTE_F_MOVE::GEN_FORTE_F_MOVE(const CStringDictionary::TStringId paInstance CGenFunctionBlock(paContainer, paInstanceNameId) { } -GEN_FORTE_F_MOVE::~GEN_FORTE_F_MOVE(){ - delete[](getGenInterfaceSpec().mDIDataTypeNames); - delete[](getGenInterfaceSpec().mDODataTypeNames); -} - void GEN_FORTE_F_MOVE::executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) { switch(paEIID) { case scmEventREQID: @@ -77,10 +72,8 @@ bool GEN_FORTE_F_MOVE::createInterfaceSpec(const char *paConfigString, SFBInterf } } - CStringDictionary::TStringId *diDataTypeNames = new CStringDictionary::TStringId[1]; - diDataTypeNames[0] = poToCreate->getTypeNameId(); - CStringDictionary::TStringId *doDataTypeNames = new CStringDictionary::TStringId[1]; - doDataTypeNames[0] = poToCreate->getTypeNameId(); + mDiDataTypeNames[0] = poToCreate->getTypeNameId(); + mDoDataTypeNames[0] = poToCreate->getTypeNameId(); paInterfaceSpec.mNumEIs = 1; paInterfaceSpec.mEINames = scmEventInputNames; @@ -92,10 +85,10 @@ bool GEN_FORTE_F_MOVE::createInterfaceSpec(const char *paConfigString, SFBInterf paInterfaceSpec.mEOWithIndexes = scmEOWithIndexes; paInterfaceSpec.mNumDIs = 1; paInterfaceSpec.mDINames = scmDataInputNames; - paInterfaceSpec.mDIDataTypeNames = diDataTypeNames; + paInterfaceSpec.mDIDataTypeNames = mDiDataTypeNames.data(); paInterfaceSpec.mNumDOs = 1; paInterfaceSpec.mDONames = scmDataOutputNames; - paInterfaceSpec.mDODataTypeNames = doDataTypeNames; + paInterfaceSpec.mDODataTypeNames = mDoDataTypeNames.data(); return true; } diff --git a/src/modules/IEC61131-3/Arithmetic/GEN_FORTE_F_MOVE_fbt.h b/src/modules/IEC61131-3/Arithmetic/GEN_FORTE_F_MOVE_fbt.h index 02b6d3c77..2edbdf6df 100644 --- a/src/modules/IEC61131-3/Arithmetic/GEN_FORTE_F_MOVE_fbt.h +++ b/src/modules/IEC61131-3/Arithmetic/GEN_FORTE_F_MOVE_fbt.h @@ -21,15 +21,18 @@ #include "forte_array_fixed.h" #include "forte_array_variable.h" +#include class GEN_FORTE_F_MOVE : public CGenFunctionBlock { DECLARE_GENERIC_FIRMWARE_FB(GEN_FORTE_F_MOVE) private: static const CStringDictionary::TStringId scmDataInputNames[]; + std::array mDiDataTypeNames; static const CStringDictionary::TStringId scmDataOutputNames[]; - + std::array mDoDataTypeNames; + static const TEventID scmEventREQID = 0; static const TDataIOID scmEIWith[]; @@ -56,7 +59,7 @@ class GEN_FORTE_F_MOVE : public CGenFunctionBlock { public: GEN_FORTE_F_MOVE(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - ~GEN_FORTE_F_MOVE() override; + ~GEN_FORTE_F_MOVE() override = default; CIEC_ANY& var_IN() { return *static_cast(getDI(0)); diff --git a/src/modules/IEC61131-3/BitwiseOperators/genbitbase_fbt.cpp b/src/modules/IEC61131-3/BitwiseOperators/genbitbase_fbt.cpp index 139134685..871123b0d 100644 --- a/src/modules/IEC61131-3/BitwiseOperators/genbitbase_fbt.cpp +++ b/src/modules/IEC61131-3/BitwiseOperators/genbitbase_fbt.cpp @@ -34,12 +34,7 @@ const CStringDictionary::TStringId CGenBitBase::scmEventInputNames[] = {g_nStrin const CStringDictionary::TStringId CGenBitBase::scmEventOutputNames[] = { g_nStringIdCNF }; CGenBitBase::CGenBitBase(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : - CGenFunctionBlock(paContainer, paInstanceNameId), mDataInputNames(nullptr), mDataInputTypeIds(nullptr) { -} - -CGenBitBase::~CGenBitBase(){ - delete[] mDataInputNames; - delete[] mDataInputTypeIds; + CGenFunctionBlock(paContainer, paInstanceNameId) { } void CGenBitBase::readInputData(TEventID) { @@ -73,8 +68,8 @@ bool CGenBitBase::createInterfaceSpec(const char *paConfigString, SFBInterfaceSp if (paInterfaceSpec.mNumDIs < CFunctionBlock::scmMaxInterfaceEvents) { //create the data inputs - mDataInputNames = new CStringDictionary::TStringId[paInterfaceSpec.mNumDIs]; - mDataInputTypeIds = new CStringDictionary::TStringId[paInterfaceSpec.mNumDIs]; + mDataInputNames = std::make_unique(paInterfaceSpec.mNumDIs); + mDataInputTypeIds = std::make_unique(paInterfaceSpec.mNumDIs); char diNames[cgIdentifierLength] = { "IN" }; @@ -89,8 +84,8 @@ bool CGenBitBase::createInterfaceSpec(const char *paConfigString, SFBInterfaceSp paInterfaceSpec.mEINames = scmEventInputNames; paInterfaceSpec.mNumEOs = 1; paInterfaceSpec.mEONames = scmEventOutputNames; - paInterfaceSpec.mDINames = mDataInputNames; - paInterfaceSpec.mDIDataTypeNames = mDataInputTypeIds; + paInterfaceSpec.mDINames = mDataInputNames.get(); + paInterfaceSpec.mDIDataTypeNames = mDataInputTypeIds.get(); paInterfaceSpec.mNumDOs = 1; paInterfaceSpec.mDONames = scmDataOutputNames; paInterfaceSpec.mDODataTypeNames = scmDataOutputTypeIds; diff --git a/src/modules/IEC61131-3/BitwiseOperators/genbitbase_fbt.h b/src/modules/IEC61131-3/BitwiseOperators/genbitbase_fbt.h index 4e28825f7..7fef61d2c 100644 --- a/src/modules/IEC61131-3/BitwiseOperators/genbitbase_fbt.h +++ b/src/modules/IEC61131-3/BitwiseOperators/genbitbase_fbt.h @@ -20,11 +20,13 @@ #include "../genfb.h" #include "forte_any_bit_variant.h" +#include + class CGenBitBase : public CGenFunctionBlock { protected: CGenBitBase(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - ~CGenBitBase() override; + ~CGenBitBase() override = default; CIEC_ANY_BIT_VARIANT& var_IN(size_t paIndex) { return *static_cast(getDI(paIndex)); @@ -38,8 +40,8 @@ class CGenBitBase : public CGenFunctionBlock { static const TEventID scmEventCNFID = 0; private: - CStringDictionary::TStringId *mDataInputNames; - CStringDictionary::TStringId *mDataInputTypeIds; + std::unique_ptr mDataInputNames; + std::unique_ptr mDataInputTypeIds; static const CStringDictionary::TStringId scmDataOutputNames[]; static const CStringDictionary::TStringId scmDataOutputTypeIds[]; diff --git a/src/modules/convert/GEN_STRUCT_DEMUX_fbt.cpp b/src/modules/convert/GEN_STRUCT_DEMUX_fbt.cpp index dafafb7a5..023ff0b21 100644 --- a/src/modules/convert/GEN_STRUCT_DEMUX_fbt.cpp +++ b/src/modules/convert/GEN_STRUCT_DEMUX_fbt.cpp @@ -45,12 +45,6 @@ GEN_STRUCT_DEMUX::GEN_STRUCT_DEMUX(const CStringDictionary::TStringId paInstance CGenFunctionBlock(paContainer, paInstanceNameId){ } -GEN_STRUCT_DEMUX::~GEN_STRUCT_DEMUX() { - delete[] (getGenInterfaceSpec().mDIDataTypeNames); - delete[] (getGenInterfaceSpec().mDONames); - delete[] (getGenInterfaceSpec().mDODataTypeNames); -} - void GEN_STRUCT_DEMUX::readInputData(TEventID) { readData(0, *mDIs[0], mDIConns[0]); } @@ -93,9 +87,11 @@ bool GEN_STRUCT_DEMUX::createInterfaceSpec(const char *paConfigString, SFBInterf size_t structSize = structInstance->getStructSize(); if(structSize != 0 && structSize < cgInvalidPortId) { //the structure size must be non zero and less than cgInvalidPortId (maximum number of data outputs) - CStringDictionary::TStringId *doDataTypeNames = new CStringDictionary::TStringId[GEN_STRUCT_MUX::calcStructTypeNameSize(*structInstance)]; - CStringDictionary::TStringId *doNames = new CStringDictionary::TStringId[structSize]; - CStringDictionary::TStringId *diDataTypeNames = new CStringDictionary::TStringId[1]; + + mDoDataTypeNames = std::make_unique(GEN_STRUCT_MUX::calcStructTypeNameSize(*structInstance)); + mDoNames = std::make_unique(structSize); + + mDiDataTypeNames[0] = structTypeNameId; paInterfaceSpec.mNumEIs = 1; paInterfaceSpec.mEINames = scmEventInputNames; @@ -105,15 +101,15 @@ bool GEN_STRUCT_DEMUX::createInterfaceSpec(const char *paConfigString, SFBInterf paInterfaceSpec.mEOTypeNames = scmEventOutputTypeIds; paInterfaceSpec.mNumDIs = 1; paInterfaceSpec.mDINames = scmDataInputNames; - paInterfaceSpec.mDIDataTypeNames = diDataTypeNames; + paInterfaceSpec.mDIDataTypeNames = mDiDataTypeNames.data(); paInterfaceSpec.mNumDOs = structSize; - paInterfaceSpec.mDONames = doNames; - paInterfaceSpec.mDODataTypeNames = doDataTypeNames; - diDataTypeNames[0] = structTypeNameId; + paInterfaceSpec.mDONames = mDoNames.get(); + paInterfaceSpec.mDODataTypeNames = mDoDataTypeNames.get(); + auto doDataTypeNames = mDoDataTypeNames.get(); for(size_t i = 0; i < structSize; ++i) { const CIEC_ANY &member = *structInstance->getMember(i); - doNames[i] = structInstance->elementNames()[i]; + mDoNames[i] = structInstance->elementNames()[i]; fillDataPointSpec(member, doDataTypeNames); } retval = true; diff --git a/src/modules/convert/GEN_STRUCT_DEMUX_fbt.h b/src/modules/convert/GEN_STRUCT_DEMUX_fbt.h index 56266ad0f..0bfbb96c4 100644 --- a/src/modules/convert/GEN_STRUCT_DEMUX_fbt.h +++ b/src/modules/convert/GEN_STRUCT_DEMUX_fbt.h @@ -18,11 +18,19 @@ #include #include +#include +#include + class GEN_STRUCT_DEMUX : public CGenFunctionBlock { DECLARE_GENERIC_FIRMWARE_FB(GEN_STRUCT_DEMUX) private: + + std::unique_ptr mDoDataTypeNames; + std::unique_ptr mDoNames; + static const CStringDictionary::TStringId scmDataInputNames[]; + std::array mDiDataTypeNames; static const TEventID scmEventREQID = 0; static const CStringDictionary::TStringId scmEventInputNames[]; @@ -51,7 +59,7 @@ class GEN_STRUCT_DEMUX : public CGenFunctionBlock { GEN_STRUCT_DEMUX(const GEN_STRUCT_DEMUX &paOther) = delete; GEN_STRUCT_DEMUX(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - ~GEN_STRUCT_DEMUX() override; + ~GEN_STRUCT_DEMUX() override = default; }; diff --git a/src/modules/convert/GEN_STRUCT_MUX_fbt.cpp b/src/modules/convert/GEN_STRUCT_MUX_fbt.cpp index a08aac412..4b9680b57 100644 --- a/src/modules/convert/GEN_STRUCT_MUX_fbt.cpp +++ b/src/modules/convert/GEN_STRUCT_MUX_fbt.cpp @@ -61,12 +61,6 @@ void GEN_STRUCT_MUX::copyStructValuesToInputs() { } } -GEN_STRUCT_MUX::~GEN_STRUCT_MUX(){ - delete[](getGenInterfaceSpec().mDINames); - delete[](getGenInterfaceSpec().mDIDataTypeNames); - delete[](getGenInterfaceSpec().mDODataTypeNames); -} - void GEN_STRUCT_MUX::readInputData(TEventID) { for(TPortId i = 0; i < getFBInterfaceSpec().mNumDIs; ++i) { readData(i, *mDIs[i], mDIConns[i]); @@ -106,10 +100,11 @@ bool GEN_STRUCT_MUX::createInterfaceSpec(const char *paConfigString, SFBInterfac CStringDictionary::getInstance().get(structTypeNameId), cgInvalidPortId); return false; } + + mDiDataTypeNames = std::make_unique(calcStructTypeNameSize(*structInstance)); + mDiNames = std::make_unique(structSize); - auto* diDataTypeNames = new CStringDictionary::TStringId[calcStructTypeNameSize(*structInstance)]; - auto* diNames = new CStringDictionary::TStringId[structSize]; - auto* doDataTypeNames = new CStringDictionary::TStringId[1]; + mDoDataTypeNames[0] = structTypeNameId; paInterfaceSpec.mNumEIs = 1; paInterfaceSpec.mEINames = scmEventInputNames; @@ -118,19 +113,18 @@ bool GEN_STRUCT_MUX::createInterfaceSpec(const char *paConfigString, SFBInterfac paInterfaceSpec.mEONames = scmEventOutputNames; paInterfaceSpec.mEOTypeNames = scmEventOutputTypeIds; paInterfaceSpec.mNumDIs = structSize; - paInterfaceSpec.mDINames = diNames; - paInterfaceSpec.mDIDataTypeNames = diDataTypeNames; + paInterfaceSpec.mDINames = mDiNames.get(); + paInterfaceSpec.mDIDataTypeNames = mDiDataTypeNames.get(); paInterfaceSpec.mNumDOs = 1; paInterfaceSpec.mDONames = scmDataOutputNames; - paInterfaceSpec.mDODataTypeNames = doDataTypeNames; - doDataTypeNames[0] = structTypeNameId; + paInterfaceSpec.mDODataTypeNames = mDoDataTypeNames.data(); + auto diDataTypeNames = mDiDataTypeNames.get(); for(decltype(paInterfaceSpec.mNumDIs) i = 0; i < paInterfaceSpec.mNumDIs; i++) { const auto& member = *structInstance->getMember(i); - diNames[i] = structInstance->elementNames()[i]; + mDiNames[i] = structInstance->elementNames()[i]; fillDataPointSpec(member, diDataTypeNames); } - return true; } diff --git a/src/modules/convert/GEN_STRUCT_MUX_fbt.h b/src/modules/convert/GEN_STRUCT_MUX_fbt.h index 054cd64b6..78402811b 100644 --- a/src/modules/convert/GEN_STRUCT_MUX_fbt.h +++ b/src/modules/convert/GEN_STRUCT_MUX_fbt.h @@ -18,11 +18,19 @@ #include #include +#include +#include + class GEN_STRUCT_MUX : public CGenFunctionBlock { DECLARE_GENERIC_FIRMWARE_FB(GEN_STRUCT_MUX) private: + + std::unique_ptr mDiDataTypeNames; + std::unique_ptr mDiNames; + static const CStringDictionary::TStringId scmDataOutputNames[]; + std::array mDoDataTypeNames; static const TEventID scmEventREQID = 0; static const CStringDictionary::TStringId scmEventInputNames[]; @@ -51,7 +59,7 @@ class GEN_STRUCT_MUX : public CGenFunctionBlock { GEN_STRUCT_MUX(const GEN_STRUCT_MUX &paOther) = delete; GEN_STRUCT_MUX(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - ~GEN_STRUCT_MUX() override; + ~GEN_STRUCT_MUX() override = default; static CStringDictionary::TStringId getStructNameId(const char *paConfigString); diff --git a/src/modules/utils/GEN_ARRAY2ARRAY_fbt.cpp b/src/modules/utils/GEN_ARRAY2ARRAY_fbt.cpp index b926296af..a3fe26674 100644 --- a/src/modules/utils/GEN_ARRAY2ARRAY_fbt.cpp +++ b/src/modules/utils/GEN_ARRAY2ARRAY_fbt.cpp @@ -35,12 +35,7 @@ const CStringDictionary::TStringId GEN_ARRAY2ARRAY::scmEventOutputNames[] = { g_ const CStringDictionary::TStringId GEN_ARRAY2ARRAY::scmEventOutputTypeIds[] = {g_nStringIdEvent}; GEN_ARRAY2ARRAY::GEN_ARRAY2ARRAY(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : - CGenFunctionBlock(paContainer, paInstanceNameId), mDataInputTypeIds(nullptr), mDataOutputTypeIds(nullptr), m_ValueTypeID(CStringDictionary::scmInvalidStringId), mArrayLength(0){ -} - -GEN_ARRAY2ARRAY::~GEN_ARRAY2ARRAY(){ - delete[] mDataInputTypeIds; - delete[] mDataOutputTypeIds; + CGenFunctionBlock(paContainer, paInstanceNameId) { } void GEN_ARRAY2ARRAY::executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) { @@ -87,13 +82,11 @@ bool GEN_ARRAY2ARRAY::createInterfaceSpec(const char *paConfigString, SFBInterfa if(m_ValueTypeID != CStringDictionary::scmInvalidStringId && mArrayLength >= 1){ //create data input type - mDataInputTypeIds = new CStringDictionary::TStringId[3]; mDataInputTypeIds[0] = g_nStringIdARRAY; mDataInputTypeIds[1] = mArrayLength; mDataInputTypeIds[2] = m_ValueTypeID; //create data output type - mDataOutputTypeIds = new CStringDictionary::TStringId[3]; mDataOutputTypeIds[0] = g_nStringIdARRAY; mDataOutputTypeIds[1] = mArrayLength; mDataOutputTypeIds[2] = m_ValueTypeID; @@ -105,10 +98,10 @@ bool GEN_ARRAY2ARRAY::createInterfaceSpec(const char *paConfigString, SFBInterfa paInterfaceSpec.mEONames = scmEventOutputNames; paInterfaceSpec.mNumDIs = 1; paInterfaceSpec.mDINames = scmDataInputNames; - paInterfaceSpec.mDIDataTypeNames = mDataInputTypeIds; + paInterfaceSpec.mDIDataTypeNames = mDataInputTypeIds.data(); paInterfaceSpec.mNumDOs = 1; paInterfaceSpec.mDONames = scmDataOutputNames; - paInterfaceSpec.mDODataTypeNames = mDataOutputTypeIds; + paInterfaceSpec.mDODataTypeNames = mDataOutputTypeIds.data(); return true; } diff --git a/src/modules/utils/GEN_ARRAY2ARRAY_fbt.h b/src/modules/utils/GEN_ARRAY2ARRAY_fbt.h index 94448817f..b88673648 100644 --- a/src/modules/utils/GEN_ARRAY2ARRAY_fbt.h +++ b/src/modules/utils/GEN_ARRAY2ARRAY_fbt.h @@ -20,19 +20,21 @@ #include +#include + class GEN_ARRAY2ARRAY: public CGenFunctionBlock { DECLARE_GENERIC_FIRMWARE_FB(GEN_ARRAY2ARRAY) private: static const CStringDictionary::TStringId scmDataInputNames[]; - CStringDictionary::TStringId *mDataInputTypeIds; + std::array mDataInputTypeIds; CIEC_ARRAY &IN_Array() { return *static_cast(getDI(0)); }; static const CStringDictionary::TStringId scmDataOutputNames[]; - CStringDictionary::TStringId *mDataOutputTypeIds; + std::array mDataOutputTypeIds; CIEC_ARRAY &OUT_Array() { return *static_cast(getDO(0)); @@ -49,8 +51,8 @@ class GEN_ARRAY2ARRAY: public CGenFunctionBlock { static const SFBInterfaceSpec scmFBInterfaceSpec; //self-defined members - CStringDictionary::TStringId m_ValueTypeID; - unsigned int mArrayLength; + CStringDictionary::TStringId m_ValueTypeID{CStringDictionary::scmInvalidStringId}; + unsigned int mArrayLength{0}; void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; @@ -61,7 +63,7 @@ class GEN_ARRAY2ARRAY: public CGenFunctionBlock { public: GEN_ARRAY2ARRAY(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - ~GEN_ARRAY2ARRAY() override; + ~GEN_ARRAY2ARRAY() override = default; }; diff --git a/src/modules/utils/GEN_ARRAY2VALUES_fbt.cpp b/src/modules/utils/GEN_ARRAY2VALUES_fbt.cpp index a2ce4c50e..35f056096 100644 --- a/src/modules/utils/GEN_ARRAY2VALUES_fbt.cpp +++ b/src/modules/utils/GEN_ARRAY2VALUES_fbt.cpp @@ -37,13 +37,7 @@ const CStringDictionary::TStringId GEN_ARRAY2VALUES::scmEventOutputNames[] = { g const CStringDictionary::TStringId GEN_ARRAY2VALUES::scmEventOutputTypeIds[] = {g_nStringIdEvent}; GEN_ARRAY2VALUES::GEN_ARRAY2VALUES(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : - CGenFunctionBlock(paContainer, paInstanceNameId), mDataOutputNames(nullptr), mDataOutputTypeIds(nullptr), mDataInputTypeIds(nullptr), mDOutputs(0), mValueTypeID(CStringDictionary::scmInvalidStringId){ -} - -GEN_ARRAY2VALUES::~GEN_ARRAY2VALUES(){ - delete[] mDataOutputNames; - delete[] mDataInputTypeIds; - delete[] mDataOutputTypeIds; + CGenFunctionBlock(paContainer, paInstanceNameId) { } void GEN_ARRAY2VALUES::executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) { @@ -95,8 +89,8 @@ bool GEN_ARRAY2VALUES::createInterfaceSpec(const char *paConfigString, SFBInterf if(mValueTypeID != CStringDictionary::scmInvalidStringId && mDOutputs >= 2){ //create the data outputs - mDataOutputNames = new CStringDictionary::TStringId[mDOutputs]; - mDataOutputTypeIds = new CStringDictionary::TStringId[mDOutputs]; + mDataOutputNames = std::make_unique(mDOutputs); + mDataOutputTypeIds = std::make_unique(mDOutputs); char doNames[cgIdentifierLength] = { "OUT_" }; for(size_t doIndex = 0; doIndex < mDOutputs; ++doIndex){ @@ -106,7 +100,6 @@ bool GEN_ARRAY2VALUES::createInterfaceSpec(const char *paConfigString, SFBInterf } //create data input type - mDataInputTypeIds = new CStringDictionary::TStringId[3]; mDataInputTypeIds[0] = g_nStringIdARRAY; mDataInputTypeIds[1] = static_cast(mDOutputs); mDataInputTypeIds[2] = mValueTypeID; @@ -118,10 +111,10 @@ bool GEN_ARRAY2VALUES::createInterfaceSpec(const char *paConfigString, SFBInterf paInterfaceSpec.mEONames = scmEventOutputNames; paInterfaceSpec.mNumDIs = 1; paInterfaceSpec.mDINames = scmDataInputNames; - paInterfaceSpec.mDIDataTypeNames = mDataInputTypeIds; + paInterfaceSpec.mDIDataTypeNames = mDataInputTypeIds.data(); paInterfaceSpec.mNumDOs = mDOutputs; - paInterfaceSpec.mDONames = mDataOutputNames; - paInterfaceSpec.mDODataTypeNames = mDataOutputTypeIds; + paInterfaceSpec.mDONames = mDataOutputNames.get(); + paInterfaceSpec.mDODataTypeNames = mDataOutputTypeIds.get(); return true; } diff --git a/src/modules/utils/GEN_ARRAY2VALUES_fbt.h b/src/modules/utils/GEN_ARRAY2VALUES_fbt.h index f90904502..c0977b09c 100644 --- a/src/modules/utils/GEN_ARRAY2VALUES_fbt.h +++ b/src/modules/utils/GEN_ARRAY2VALUES_fbt.h @@ -20,15 +20,18 @@ #include +#include +#include + class GEN_ARRAY2VALUES : public CGenFunctionBlock { DECLARE_GENERIC_FIRMWARE_FB(GEN_ARRAY2VALUES) private: - CStringDictionary::TStringId *mDataOutputNames; - CStringDictionary::TStringId *mDataOutputTypeIds; + std::unique_ptr mDataOutputNames; + std::unique_ptr mDataOutputTypeIds; static const CStringDictionary::TStringId scmDataInputNames[]; - CStringDictionary::TStringId *mDataInputTypeIds; + std::array mDataInputTypeIds; CIEC_ARRAY &IN_Array(){ return *static_cast(getDI(0)); @@ -44,8 +47,8 @@ class GEN_ARRAY2VALUES : public CGenFunctionBlock { static const CStringDictionary::TStringId scmEventOutputTypeIds[]; //self-defined members - size_t mDOutputs; - CStringDictionary::TStringId mValueTypeID; + size_t mDOutputs{0}; + CStringDictionary::TStringId mValueTypeID{CStringDictionary::scmInvalidStringId}; void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; @@ -56,7 +59,7 @@ class GEN_ARRAY2VALUES : public CGenFunctionBlock { public: GEN_ARRAY2VALUES(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - ~GEN_ARRAY2VALUES() override; + ~GEN_ARRAY2VALUES() override = default; }; diff --git a/src/modules/utils/GEN_CSV_WRITER_fbt.cpp b/src/modules/utils/GEN_CSV_WRITER_fbt.cpp index 871d1a9d3..62b7046a1 100644 --- a/src/modules/utils/GEN_CSV_WRITER_fbt.cpp +++ b/src/modules/utils/GEN_CSV_WRITER_fbt.cpp @@ -61,12 +61,10 @@ void GEN_CSV_WRITER::executeEvent(TEventID paEIID, CEventChainExecutionThread *c } GEN_CSV_WRITER::GEN_CSV_WRITER(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : - CGenFunctionBlock(paContainer, paInstanceNameId), mCSVFile(nullptr), mDataInputNames(nullptr), mDataInputTypeIds(nullptr) { + CGenFunctionBlock(paContainer, paInstanceNameId), mCSVFile(nullptr) { } GEN_CSV_WRITER::~GEN_CSV_WRITER(){ - delete[] mDataInputNames; - delete[] mDataInputTypeIds; closeCSVFile(); } @@ -100,8 +98,8 @@ bool GEN_CSV_WRITER::createInterfaceSpec(const char *paConfigString, SFBInterfac acPos++; paInterfaceSpec.mNumDIs = static_cast(forte::core::util::strtoul(acPos, nullptr, 10) + 2); // we have in addition to the SDs a QI and FILE_NAME data inputs - mDataInputNames = new CStringDictionary::TStringId[paInterfaceSpec.mNumDIs]; - mDataInputTypeIds = new CStringDictionary::TStringId[paInterfaceSpec.mNumDIs]; + mDataInputNames = std::make_unique(paInterfaceSpec.mNumDIs); + mDataInputTypeIds = std::make_unique(paInterfaceSpec.mNumDIs); mDataInputNames[0] = g_nStringIdQI; mDataInputTypeIds[0] = g_nStringIdBOOL; @@ -115,8 +113,8 @@ bool GEN_CSV_WRITER::createInterfaceSpec(const char *paConfigString, SFBInterfac paInterfaceSpec.mEINames = scmEventInputNames; paInterfaceSpec.mNumEOs = 2; paInterfaceSpec.mEONames = scmEventOutputNames; - paInterfaceSpec.mDINames = mDataInputNames; - paInterfaceSpec.mDIDataTypeNames = mDataInputTypeIds; + paInterfaceSpec.mDINames = mDataInputNames.get(); + paInterfaceSpec.mDIDataTypeNames = mDataInputTypeIds.get(); paInterfaceSpec.mNumDOs = 2; paInterfaceSpec.mDONames = scmDataOutputNames; paInterfaceSpec.mDODataTypeNames = scmDataOutputTypeIds; diff --git a/src/modules/utils/GEN_CSV_WRITER_fbt.h b/src/modules/utils/GEN_CSV_WRITER_fbt.h index b1faa142b..8c162a982 100644 --- a/src/modules/utils/GEN_CSV_WRITER_fbt.h +++ b/src/modules/utils/GEN_CSV_WRITER_fbt.h @@ -22,6 +22,8 @@ #include #include "../../arch/forte_fileio.h" +#include + class GEN_CSV_WRITER : public CGenFunctionBlock { DECLARE_GENERIC_FIRMWARE_FB(GEN_CSV_WRITER) @@ -84,8 +86,8 @@ class GEN_CSV_WRITER : public CGenFunctionBlock { decltype(forte_fopen(nullptr, nullptr)) mCSVFile; - CStringDictionary::TStringId *mDataInputNames; - CStringDictionary::TStringId *mDataInputTypeIds; + std::unique_ptr mDataInputNames; + std::unique_ptr mDataInputTypeIds; static const CIEC_STRING scmOK; static const CIEC_STRING scmFileAlreadyOpened; diff --git a/src/modules/utils/GEN_F_MUX_fbt.cpp b/src/modules/utils/GEN_F_MUX_fbt.cpp index 55727a978..cb3f5f0f0 100644 --- a/src/modules/utils/GEN_F_MUX_fbt.cpp +++ b/src/modules/utils/GEN_F_MUX_fbt.cpp @@ -33,24 +33,7 @@ const CStringDictionary::TStringId GEN_F_MUX::scmEventOutputNames[] = { g_nStrin const CStringDictionary::TStringId GEN_F_MUX::scmEventOutputTypeIds[] = {g_nStringIdEvent}; GEN_F_MUX::GEN_F_MUX(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : - CGenFunctionBlock(paContainer, paInstanceNameId), - mEventInputNames(nullptr), - mDataOutputNames(nullptr), - mDataInputNames(nullptr), - mDataOutputTypeIds(nullptr), - mDataInputTypeIds(nullptr), - mEInputs(0), - mEOutputs(0), - mDInputs(0), - mDOutputs(0){ -} - -GEN_F_MUX::~GEN_F_MUX(){ - delete[] mEventInputNames; - delete[] mDataInputNames; - delete[] mDataInputTypeIds; - delete[] mDataOutputNames; - delete[] mDataOutputTypeIds; + CGenFunctionBlock(paContainer, paInstanceNameId){ } void GEN_F_MUX::executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) { @@ -174,13 +157,13 @@ bool GEN_F_MUX::createInterfaceSpec(const char *paConfigString, SFBInterfaceSpec //create the eventInputs if(mEInputs < CFunctionBlock::scmMaxInterfaceEvents && mDInputs < CFunctionBlock::scmMaxInterfaceEvents){ //create the eventInputs - mEventInputNames = new CStringDictionary::TStringId[mEInputs]; + mEventInputNames = std::make_unique(mEInputs); - generateGenericInterfacePointNameArray("EI", mEventInputNames, mEInputs); + generateGenericInterfacePointNameArray("EI", mEventInputNames.get(), mEInputs); //create the data inputs - mDataInputNames = new CStringDictionary::TStringId[mDInputs]; - mDataInputTypeIds = new CStringDictionary::TStringId[mDInputs]; + mDataInputNames = std::make_unique(mDInputs); + mDataInputTypeIds = std::make_unique(mDInputs); char diNames[cgIdentifierLength] = { "IN_" }; size_t di_posIndex = 0; for(size_t ei = 0; ei < mEInputs; ei++) { @@ -194,8 +177,8 @@ bool GEN_F_MUX::createInterfaceSpec(const char *paConfigString, SFBInterfaceSpec } //create the data outputs - mDataOutputNames = new CStringDictionary::TStringId[mDOutputs + 2]; - mDataOutputTypeIds = new CStringDictionary::TStringId[mDOutputs + 2]; + mDataOutputNames = std::make_unique(mDOutputs + 2); + mDataOutputTypeIds = std::make_unique(mDOutputs + 2); //data outputs for status and QO mDataOutputNames[0] = CStringDictionary::getInstance().insert("QO"); @@ -207,15 +190,15 @@ bool GEN_F_MUX::createInterfaceSpec(const char *paConfigString, SFBInterfaceSpec //create the interface Specification paInterfaceSpec.mNumEIs = mEInputs; - paInterfaceSpec.mEINames = mEventInputNames; + paInterfaceSpec.mEINames = mEventInputNames.get(); paInterfaceSpec.mNumEOs = mEOutputs; paInterfaceSpec.mEONames = scmEventOutputNames; paInterfaceSpec.mNumDIs = mDInputs; - paInterfaceSpec.mDINames = mDataInputNames; - paInterfaceSpec.mDIDataTypeNames = mDataInputTypeIds; + paInterfaceSpec.mDINames = mDataInputNames.get(); + paInterfaceSpec.mDIDataTypeNames = mDataInputTypeIds.get(); paInterfaceSpec.mNumDOs = mDOutputs + 2; - paInterfaceSpec.mDONames = mDataOutputNames; - paInterfaceSpec.mDODataTypeNames = mDataOutputTypeIds; + paInterfaceSpec.mDONames = mDataOutputNames.get(); + paInterfaceSpec.mDODataTypeNames = mDataOutputTypeIds.get(); return true; } return false; diff --git a/src/modules/utils/GEN_F_MUX_fbt.h b/src/modules/utils/GEN_F_MUX_fbt.h index cb5aef7a7..32e6e7c20 100644 --- a/src/modules/utils/GEN_F_MUX_fbt.h +++ b/src/modules/utils/GEN_F_MUX_fbt.h @@ -20,6 +20,8 @@ #include +#include + class GEN_F_MUX : public CGenFunctionBlock { DECLARE_GENERIC_FIRMWARE_FB(GEN_F_MUX) @@ -30,17 +32,17 @@ class GEN_F_MUX : public CGenFunctionBlock { static const TEventID scmEventEOID = 0; - CStringDictionary::TStringId *mEventInputNames; - CStringDictionary::TStringId *mDataOutputNames; - CStringDictionary::TStringId *mDataInputNames; - CStringDictionary::TStringId *mDataOutputTypeIds; - CStringDictionary::TStringId *mDataInputTypeIds; + std::unique_ptr mEventInputNames; + std::unique_ptr mDataOutputNames; + std::unique_ptr mDataInputNames; + std::unique_ptr mDataOutputTypeIds; + std::unique_ptr mDataInputTypeIds; //self-defined members - size_t mEInputs; - size_t mEOutputs; - size_t mDInputs; - size_t mDOutputs; + size_t mEInputs{0}; + size_t mEOutputs{0}; + size_t mDInputs{0}; + size_t mDOutputs{0}; void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; @@ -51,6 +53,6 @@ class GEN_F_MUX : public CGenFunctionBlock { public: GEN_F_MUX(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - ~GEN_F_MUX() override; + ~GEN_F_MUX() override = default; }; #endif //_GEN_F_MUX_H_ diff --git a/src/modules/utils/GEN_VALUES2ARRAY_fbt.cpp b/src/modules/utils/GEN_VALUES2ARRAY_fbt.cpp index a6d6a4b0d..6b432c7ce 100644 --- a/src/modules/utils/GEN_VALUES2ARRAY_fbt.cpp +++ b/src/modules/utils/GEN_VALUES2ARRAY_fbt.cpp @@ -37,13 +37,7 @@ const CStringDictionary::TStringId GEN_VALUES2ARRAY::scmEventOutputNames[] = { g const CStringDictionary::TStringId GEN_VALUES2ARRAY::scmEventOutputTypeIds[] = {g_nStringIdEvent}; GEN_VALUES2ARRAY::GEN_VALUES2ARRAY(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : - CGenFunctionBlock(paContainer, paInstanceNameId), mDataInputNames(nullptr), mDataInputTypeIds(nullptr), mDataOutputTypeIds(nullptr), mDInputs(0), m_ValueTypeID(CStringDictionary::CStringDictionary::scmInvalidStringId){ -} - -GEN_VALUES2ARRAY::~GEN_VALUES2ARRAY(){ - delete[] mDataInputNames; - delete[] mDataInputTypeIds; - delete[] mDataOutputTypeIds; + CGenFunctionBlock(paContainer, paInstanceNameId), mDataInputNames(nullptr), mDInputs(0), m_ValueTypeID(CStringDictionary::CStringDictionary::scmInvalidStringId){ } void GEN_VALUES2ARRAY::executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) { @@ -95,8 +89,8 @@ bool GEN_VALUES2ARRAY::createInterfaceSpec(const char *paConfigString, SFBInterf if(m_ValueTypeID != CStringDictionary::scmInvalidStringId && mDInputs >= 2){ //create the data inputs - mDataInputNames = new CStringDictionary::TStringId[mDInputs]; - mDataInputTypeIds = new CStringDictionary::TStringId[mDInputs]; + mDataInputNames = std::make_unique(mDInputs); + mDataInputTypeIds = std::make_unique(mDInputs); char diNames[cgIdentifierLength] = { "IN_" }; for(unsigned int di = 0; di < mDInputs; di = di + 1){ @@ -106,7 +100,6 @@ bool GEN_VALUES2ARRAY::createInterfaceSpec(const char *paConfigString, SFBInterf } //create data output type - mDataOutputTypeIds = new CStringDictionary::TStringId[3]; mDataOutputTypeIds[0] = g_nStringIdARRAY; mDataOutputTypeIds[1] = mDInputs; mDataOutputTypeIds[2] = m_ValueTypeID; @@ -117,11 +110,11 @@ bool GEN_VALUES2ARRAY::createInterfaceSpec(const char *paConfigString, SFBInterf paInterfaceSpec.mNumEOs = 1; paInterfaceSpec.mEONames = scmEventOutputNames; paInterfaceSpec.mNumDIs = mDInputs; - paInterfaceSpec.mDINames = mDataInputNames; - paInterfaceSpec.mDIDataTypeNames = mDataInputTypeIds; + paInterfaceSpec.mDINames = mDataInputNames.get(); + paInterfaceSpec.mDIDataTypeNames = mDataInputTypeIds.get(); paInterfaceSpec.mNumDOs = 1; paInterfaceSpec.mDONames = scmDataOutputNames; - paInterfaceSpec.mDODataTypeNames = mDataOutputTypeIds; + paInterfaceSpec.mDODataTypeNames = mDataOutputTypeIds.data(); return true; } return false; diff --git a/src/modules/utils/GEN_VALUES2ARRAY_fbt.h b/src/modules/utils/GEN_VALUES2ARRAY_fbt.h index 66c56d71d..c67fc0577 100644 --- a/src/modules/utils/GEN_VALUES2ARRAY_fbt.h +++ b/src/modules/utils/GEN_VALUES2ARRAY_fbt.h @@ -18,15 +18,18 @@ #include +#include +#include + class GEN_VALUES2ARRAY : public CGenFunctionBlock{ DECLARE_GENERIC_FIRMWARE_FB(GEN_VALUES2ARRAY) private: - CStringDictionary::TStringId *mDataInputNames; - CStringDictionary::TStringId *mDataInputTypeIds; + std::unique_ptr mDataInputNames; + std::unique_ptr mDataInputTypeIds; static const CStringDictionary::TStringId scmDataOutputNames[]; - CStringDictionary::TStringId *mDataOutputTypeIds; + std::array mDataOutputTypeIds; CIEC_ARRAY &OUT_Array(){ return *static_cast(getDO(0)); @@ -53,7 +56,7 @@ class GEN_VALUES2ARRAY : public CGenFunctionBlock{ public: GEN_VALUES2ARRAY(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - ~GEN_VALUES2ARRAY() override; + ~GEN_VALUES2ARRAY() override = default; }; diff --git a/src/stdfblib/events/GEN_E_DEMUX_fbt.cpp b/src/stdfblib/events/GEN_E_DEMUX_fbt.cpp index 4bb3abae8..32388eb0a 100644 --- a/src/stdfblib/events/GEN_E_DEMUX_fbt.cpp +++ b/src/stdfblib/events/GEN_E_DEMUX_fbt.cpp @@ -36,11 +36,6 @@ GEN_E_DEMUX::GEN_E_DEMUX(const CStringDictionary::TStringId paInstanceNameId, fo CGenFunctionBlock(paContainer, paInstanceNameId), mEventOutputNames(nullptr){ } -GEN_E_DEMUX::~GEN_E_DEMUX(){ - delete[] mEventOutputNames; - delete[] mEventOutputTypeIds; -} - void GEN_E_DEMUX::executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) { if(scmEventEIID == paEIID && static_cast(K()) < getFBInterfaceSpec().mNumEOs) { sendOutputEvent(static_cast(K()), paECET); // the value of K corresponds to the output event ID; @@ -64,17 +59,15 @@ bool GEN_E_DEMUX::createInterfaceSpec(const char *paConfigString, SFBInterfaceSp paInterfaceSpec.mNumEOs = static_cast(forte::core::util::strtoul(acPos, nullptr, 10)); if(paInterfaceSpec.mNumEOs < CFunctionBlock::scmMaxInterfaceEvents){ - mEventOutputNames = new CStringDictionary::TStringId[paInterfaceSpec.mNumEOs]; - mEventOutputTypeIds = new CStringDictionary::TStringId[paInterfaceSpec.mNumEOs]; - const CStringDictionary::TStringId eventID = CStringDictionary::getInstance().getId("Event"); - std::memset(mEventOutputTypeIds, static_cast(eventID), sizeof(*mEventOutputTypeIds) * paInterfaceSpec.mNumEOs); - generateGenericInterfacePointNameArray("EO", mEventOutputNames, paInterfaceSpec.mNumEOs); + mEventOutputNames = std::make_unique(paInterfaceSpec.mNumEOs); + + generateGenericInterfacePointNameArray("EO", mEventOutputNames.get(), paInterfaceSpec.mNumEOs); paInterfaceSpec.mNumEIs = 1; paInterfaceSpec.mEINames = scmEventInputNames; - paInterfaceSpec.mEONames = mEventOutputNames; + paInterfaceSpec.mEONames = mEventOutputNames.get(); paInterfaceSpec.mEITypeNames = scmEventInputTypeIds; - paInterfaceSpec.mEOTypeNames = mEventOutputTypeIds; + paInterfaceSpec.mEOTypeNames = nullptr; paInterfaceSpec.mNumDIs = 1; paInterfaceSpec.mDINames = scmDataInputNames; paInterfaceSpec.mDIDataTypeNames = scmDIDataTypeIds; diff --git a/src/stdfblib/events/GEN_E_DEMUX_fbt.h b/src/stdfblib/events/GEN_E_DEMUX_fbt.h index 37c79da60..2ce603f51 100644 --- a/src/stdfblib/events/GEN_E_DEMUX_fbt.h +++ b/src/stdfblib/events/GEN_E_DEMUX_fbt.h @@ -20,6 +20,8 @@ #include +#include + class GEN_E_DEMUX : public CGenFunctionBlock{ DECLARE_GENERIC_FIRMWARE_FB(GEN_E_DEMUX) @@ -30,8 +32,7 @@ class GEN_E_DEMUX : public CGenFunctionBlock{ static const CStringDictionary::TStringId scmEventInputNames[]; static const CStringDictionary::TStringId scmEventInputTypeIds[]; - CStringDictionary::TStringId *mEventOutputNames; - CStringDictionary::TStringId *mEventOutputTypeIds; + std::unique_ptr mEventOutputNames; void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; @@ -46,7 +47,7 @@ class GEN_E_DEMUX : public CGenFunctionBlock{ public: GEN_E_DEMUX(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - ~GEN_E_DEMUX() override; + ~GEN_E_DEMUX() override = default; }; #endif //_GEN_E_DEMUX_H_ diff --git a/src/stdfblib/events/GEN_E_MUX_fbt.cpp b/src/stdfblib/events/GEN_E_MUX_fbt.cpp index 4cef233e7..c448dd00a 100644 --- a/src/stdfblib/events/GEN_E_MUX_fbt.cpp +++ b/src/stdfblib/events/GEN_E_MUX_fbt.cpp @@ -33,12 +33,7 @@ const CStringDictionary::TStringId GEN_E_MUX::scmEventOutputNames[] = { g_nStrin const CStringDictionary::TStringId GEN_E_MUX::scmEventOutputTypeIds[] = { g_nStringIdEvent }; GEN_E_MUX::GEN_E_MUX(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer) : - CGenFunctionBlock(paContainer, paInstanceNameId), mEventInputNames(nullptr){ -} - -GEN_E_MUX::~GEN_E_MUX(){ - delete[] mEventInputNames; - delete[] mEventInputTypeIds; + CGenFunctionBlock(paContainer, paInstanceNameId) { } void GEN_E_MUX::executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) { @@ -65,16 +60,14 @@ bool GEN_E_MUX::createInterfaceSpec(const char *paConfigString, SFBInterfaceSpec paInterfaceSpec.mNumEIs = static_cast(forte::core::util::strtoul(acPos, nullptr, 10)); if(paInterfaceSpec.mNumEIs < CFunctionBlock::scmMaxInterfaceEvents && paInterfaceSpec.mNumEIs >= 2){ - mEventInputNames = new CStringDictionary::TStringId[paInterfaceSpec.mNumEIs]; - mEventInputTypeIds = new CStringDictionary::TStringId[paInterfaceSpec.mNumEIs]; - const CStringDictionary::TStringId eventID = g_nStringIdEvent; - std::fill_n(mEventInputTypeIds, paInterfaceSpec.mNumEIs, eventID); - generateGenericInterfacePointNameArray("EI", mEventInputNames, paInterfaceSpec.mNumEIs); + mEventInputNames = std::make_unique(paInterfaceSpec.mNumEIs); + + generateGenericInterfacePointNameArray("EI", mEventInputNames.get(), paInterfaceSpec.mNumEIs); - paInterfaceSpec.mEINames = mEventInputNames; + paInterfaceSpec.mEINames = mEventInputNames.get(); paInterfaceSpec.mNumEOs = 1; paInterfaceSpec.mEONames = scmEventOutputNames; - paInterfaceSpec.mEITypeNames = mEventInputNames; + paInterfaceSpec.mEITypeNames = nullptr; paInterfaceSpec.mEOTypeNames = scmEventOutputTypeIds; paInterfaceSpec.mNumDIs = 0; paInterfaceSpec.mDINames = nullptr; diff --git a/src/stdfblib/events/GEN_E_MUX_fbt.h b/src/stdfblib/events/GEN_E_MUX_fbt.h index 0693c6006..143e72a44 100644 --- a/src/stdfblib/events/GEN_E_MUX_fbt.h +++ b/src/stdfblib/events/GEN_E_MUX_fbt.h @@ -20,6 +20,8 @@ #include +#include + class GEN_E_MUX : public CGenFunctionBlock{ DECLARE_GENERIC_FIRMWARE_FB(GEN_E_MUX) @@ -30,8 +32,8 @@ class GEN_E_MUX : public CGenFunctionBlock{ static const CStringDictionary::TStringId scmEventOutputNames[]; static const CStringDictionary::TStringId scmEventOutputTypeIds[]; - CStringDictionary::TStringId *mEventInputNames; - CStringDictionary::TStringId *mEventInputTypeIds; + std::unique_ptr mEventInputNames; + std::unique_ptr mEventInputTypeIds; void executeEvent(TEventID paEIID, CEventChainExecutionThread *const paECET) override; @@ -46,7 +48,7 @@ class GEN_E_MUX : public CGenFunctionBlock{ public: GEN_E_MUX(const CStringDictionary::TStringId paInstanceNameId, forte::core::CFBContainer &paContainer); - ~GEN_E_MUX() override; + ~GEN_E_MUX() override = default; }; #endif //_GEN_E_MUX_H_