Program Listing for File param_serdes.h#

Return to documentation for file (interfaces\serdes\param_serdes.h)

#ifndef __IDL_GENERATED__PARAM_SERDES_H__20260404_121552_390__
#define __IDL_GENERATED__PARAM_SERDES_H__20260404_121552_390__

// Includes...
#include <cstdint>
#include <support/serdes.h>
#include <support/local_service_access.h>
#include <interfaces/com.h>
#include <interfaces/serdes/core_ps_serdes.h>
#include "../param.h"

#include "core_serdes.h"

// Serializer / deserializer namespace
namespace serdes
{
    template <>
    class CSerdes<sdv::EParamFlags>
    {
    public:
        static void CalcSize(const sdv::EParamFlags& rVar, size_t& rnSize)
        {

            // Calculating the size of EParamFlags
            sdv::ser_size(static_cast<uint32_t>(rVar), rnSize);
        }

        template <sdv::EEndian eTargetEndianess, typename TCRC>
        static sdv::serializer<eTargetEndianess, TCRC>& Serialize(sdv::serializer<eTargetEndianess, TCRC>& rSerializer, const sdv::EParamFlags& rVar)
        {
            // Serializing members of EParamFlags
            rSerializer << static_cast<uint32_t>(rVar);
            return rSerializer;
        }

        template <sdv::EEndian eSourceEndianess, typename TCRC>
        static sdv::deserializer<eSourceEndianess, TCRC>& Deserialize(sdv::deserializer<eSourceEndianess, TCRC>& rDeserializer, sdv::EParamFlags& rVar)
        {
            // Deserializing members of EParamFlags
            uint32_t base = 0;
            rDeserializer >> base;
            rVar = static_cast<sdv::EParamFlags>(base);
            return rDeserializer;
        }
    };

    template <>
    class CSerdes<sdv::EParamType>
    {
    public:
        static void CalcSize(const sdv::EParamType& rVar, size_t& rnSize)
        {

            // Calculating the size of EParamType
            sdv::ser_size(static_cast<int32_t>(rVar), rnSize);
        }

        template <sdv::EEndian eTargetEndianess, typename TCRC>
        static sdv::serializer<eTargetEndianess, TCRC>& Serialize(sdv::serializer<eTargetEndianess, TCRC>& rSerializer, const sdv::EParamType& rVar)
        {
            // Serializing members of EParamType
            rSerializer << static_cast<int32_t>(rVar);
            return rSerializer;
        }

        template <sdv::EEndian eSourceEndianess, typename TCRC>
        static sdv::deserializer<eSourceEndianess, TCRC>& Deserialize(sdv::deserializer<eSourceEndianess, TCRC>& rDeserializer, sdv::EParamType& rVar)
        {
            // Deserializing members of EParamType
            int32_t base = 0;
            rDeserializer >> base;
            rVar = static_cast<sdv::EParamType>(base);
            return rDeserializer;
        }
    };

    template <>
    class CSerdes<sdv::SNumberInfo>
    {
    public:
        static void CalcSize(const sdv::SNumberInfo& rVar, size_t& rnSize)
        {

            // Calculating the size of SNumberInfo
            sdv::ser_size(rVar.anyLowerLimit, rnSize);
            sdv::ser_size(rVar.bIncludeLowerLinit, rnSize);
            sdv::ser_size(rVar.anyUpperLimit, rnSize);
            sdv::ser_size(rVar.bIncludeUpperLimit, rnSize);
        }

        template <sdv::EEndian eTargetEndianess, typename TCRC>
        static sdv::serializer<eTargetEndianess, TCRC>& Serialize(sdv::serializer<eTargetEndianess, TCRC>& rSerializer, const sdv::SNumberInfo& rVar)
        {
            // Serializing members of SNumberInfo
            rSerializer << rVar.anyLowerLimit;
            rSerializer << rVar.bIncludeLowerLinit;
            rSerializer << rVar.anyUpperLimit;
            rSerializer << rVar.bIncludeUpperLimit;
            return rSerializer;
        }

        template <sdv::EEndian eSourceEndianess, typename TCRC>
        static sdv::deserializer<eSourceEndianess, TCRC>& Deserialize(sdv::deserializer<eSourceEndianess, TCRC>& rDeserializer, sdv::SNumberInfo& rVar)
        {
            // Deserializing members of SNumberInfo
            rDeserializer >> rVar.anyLowerLimit;
            rDeserializer >> rVar.bIncludeLowerLinit;
            rDeserializer >> rVar.anyUpperLimit;
            rDeserializer >> rVar.bIncludeUpperLimit;
            return rDeserializer;
        }
    };

    template <>
    class CSerdes<sdv::SStringInfo>
    {
    public:
        static void CalcSize(const sdv::SStringInfo& rVar, size_t& rnSize)
        {

            // Calculating the size of SStringInfo
            sdv::ser_size(rVar.ssPattern, rnSize);
        }

        template <sdv::EEndian eTargetEndianess, typename TCRC>
        static sdv::serializer<eTargetEndianess, TCRC>& Serialize(sdv::serializer<eTargetEndianess, TCRC>& rSerializer, const sdv::SStringInfo& rVar)
        {
            // Serializing members of SStringInfo
            rSerializer << rVar.ssPattern;
            return rSerializer;
        }

        template <sdv::EEndian eSourceEndianess, typename TCRC>
        static sdv::deserializer<eSourceEndianess, TCRC>& Deserialize(sdv::deserializer<eSourceEndianess, TCRC>& rDeserializer, sdv::SStringInfo& rVar)
        {
            // Deserializing members of SStringInfo
            rDeserializer >> rVar.ssPattern;
            return rDeserializer;
        }
    };

    template <>
    class CSerdes<sdv::SLabelInfo::SLabel>
    {
    public:
        static void CalcSize(const sdv::SLabelInfo::SLabel& rVar, size_t& rnSize)
        {

                // Calculating the size of SLabel
                sdv::ser_size(rVar.anyValue, rnSize);
                sdv::ser_size(rVar.ssLabel, rnSize);
        }

        template <sdv::EEndian eTargetEndianess, typename TCRC>
        static sdv::serializer<eTargetEndianess, TCRC>& Serialize(sdv::serializer<eTargetEndianess, TCRC>& rSerializer, const sdv::SLabelInfo::SLabel& rVar)
        {
                // Serializing members of SLabel
                rSerializer << rVar.anyValue;
                rSerializer << rVar.ssLabel;
            return rSerializer;
        }

        template <sdv::EEndian eSourceEndianess, typename TCRC>
        static sdv::deserializer<eSourceEndianess, TCRC>& Deserialize(sdv::deserializer<eSourceEndianess, TCRC>& rDeserializer, sdv::SLabelInfo::SLabel& rVar)
        {
                // Deserializing members of SLabel
                rDeserializer >> rVar.anyValue;
                rDeserializer >> rVar.ssLabel;
            return rDeserializer;
        }
    };

    template <>
    class CSerdes<sdv::SLabelInfo>
    {
    public:
        static void CalcSize(const sdv::SLabelInfo& rVar, size_t& rnSize)
        {

            // Calculating the size of SLabelInfo
            sdv::ser_size(rVar.seqLabels, rnSize);
        }

        template <sdv::EEndian eTargetEndianess, typename TCRC>
        static sdv::serializer<eTargetEndianess, TCRC>& Serialize(sdv::serializer<eTargetEndianess, TCRC>& rSerializer, const sdv::SLabelInfo& rVar)
        {
            // Serializing members of SLabelInfo
            rSerializer << rVar.seqLabels;
            return rSerializer;
        }

        template <sdv::EEndian eSourceEndianess, typename TCRC>
        static sdv::deserializer<eSourceEndianess, TCRC>& Deserialize(sdv::deserializer<eSourceEndianess, TCRC>& rDeserializer, sdv::SLabelInfo& rVar)
        {
            // Deserializing members of SLabelInfo
            rDeserializer >> rVar.seqLabels;
            return rDeserializer;
        }
    };

    template <>
    class CSerdes<sdv::SParamInfo>
    {
    public:
        static void CalcSize(const sdv::SParamInfo& rVar, size_t& rnSize)
        {

            // Calculating the size of SParamInfo
            sdv::ser_size(rVar.get_switch(), rnSize);
            sdv::ser_size(rVar.uiFlags, rnSize);
            sdv::ser_size(rVar.ssName, rnSize);
            sdv::ser_size(rVar.ssGroup, rnSize);
            sdv::ser_size(rVar.ssUnit, rnSize);
            sdv::ser_size(rVar.ssDescription, rnSize);
            sdv::ser_size(rVar.anyDefaultVal, rnSize);

            // Calculating the size of union_0
            switch (rVar.get_switch())
            {
            case sdv::EParamType::number_param:
                sdv::ser_size(rVar.uExtInfo.sNumberInfo, rnSize);
                break;
            case sdv::EParamType::string_param:
                sdv::ser_size(rVar.uExtInfo.sStringInfo, rnSize);
                break;
            case sdv::EParamType::enum_param:
                sdv::ser_size(rVar.uExtInfo.sEnumInfo, rnSize);
                break;
            case sdv::EParamType::bitmask_param:
                sdv::ser_size(rVar.uExtInfo.sBitmaskInfo, rnSize);
                break;
            }
        }

        template <sdv::EEndian eTargetEndianess, typename TCRC>
        static sdv::serializer<eTargetEndianess, TCRC>& Serialize(sdv::serializer<eTargetEndianess, TCRC>& rSerializer, const sdv::SParamInfo& rVar)
        {
            // Serializing members of SParamInfo
            rSerializer << rVar.get_switch();
            rSerializer << rVar.uiFlags;
            rSerializer << rVar.ssName;
            rSerializer << rVar.ssGroup;
            rSerializer << rVar.ssUnit;
            rSerializer << rVar.ssDescription;
            rSerializer << rVar.anyDefaultVal;

            // Serializing members of union_0
            switch (rVar.get_switch())
            {
            case sdv::EParamType::number_param:
                rSerializer << rVar.uExtInfo.sNumberInfo;
                break;
            case sdv::EParamType::string_param:
                rSerializer << rVar.uExtInfo.sStringInfo;
                break;
            case sdv::EParamType::enum_param:
                rSerializer << rVar.uExtInfo.sEnumInfo;
                break;
            case sdv::EParamType::bitmask_param:
                rSerializer << rVar.uExtInfo.sBitmaskInfo;
                break;
            }
            return rSerializer;
        }

        template <sdv::EEndian eSourceEndianess, typename TCRC>
        static sdv::deserializer<eSourceEndianess, TCRC>& Deserialize(sdv::deserializer<eSourceEndianess, TCRC>& rDeserializer, sdv::SParamInfo& rVar)
        {
            // Deserializing members of SParamInfo
            sdv::EParamType temp_eType{};
            rDeserializer >> temp_eType;
            rVar.switch_to(temp_eType);
            rDeserializer >> rVar.uiFlags;
            rDeserializer >> rVar.ssName;
            rDeserializer >> rVar.ssGroup;
            rDeserializer >> rVar.ssUnit;
            rDeserializer >> rVar.ssDescription;
            rDeserializer >> rVar.anyDefaultVal;

            // Deserializing members of union_0
            switch (rVar.get_switch())
            {
            case sdv::EParamType::number_param:
                rDeserializer >> rVar.uExtInfo.sNumberInfo;
                break;
            case sdv::EParamType::string_param:
                rDeserializer >> rVar.uExtInfo.sStringInfo;
                break;
            case sdv::EParamType::enum_param:
                rDeserializer >> rVar.uExtInfo.sEnumInfo;
                break;
            case sdv::EParamType::bitmask_param:
                rDeserializer >> rVar.uExtInfo.sBitmaskInfo;
                break;
            }
            return rDeserializer;
        }
    };

    template <>
    class CSerdes<sdv::IParameters*>
    {
    public:
        static void CalcSize([[maybe_unused]] sdv::IParameters* pInterface, size_t& rnSize)
        {
            sdv::ser_size(sdv::interface_id(), rnSize);
            sdv::ser_size(sdv::ps::TMarshallID(), rnSize);
        }

        template <sdv::EEndian eTargetEndianess, typename TCRC>
        static sdv::serializer<eTargetEndianess, TCRC>& Serialize(sdv::serializer<eTargetEndianess, TCRC>& rSerializer, sdv::IParameters* pInterface)
        {
            // Get interface to the component isolation service.
            auto ptrComControl = sdv::core::GetObject("CommunicationControl");
            if (!ptrComControl) throw sdv::ps::XMarshallNotInitialized{};
            sdv::ps::IMarshallAccess* pMarshallAccess = ptrComControl.GetInterface<sdv::ps::IMarshallAccess>();
            if (!pMarshallAccess) throw sdv::ps::XMarshallNotInitialized{};

            // Serialize the interface ID first
            rSerializer << sdv::GetInterfaceId<sdv::IParameters>();

            // Create and serialize a stub object for the interface.
            sdv::ps::TMarshallID tStubID = pMarshallAccess->GetStub(pInterface);
            rSerializer << tStubID;

            return rSerializer;
        }

        template <sdv::EEndian eSourceEndianess, typename TCRC>
        static sdv::deserializer<eSourceEndianess, TCRC>& Deserialize(sdv::deserializer<eSourceEndianess, TCRC>& rDeserializer, sdv::IParameters*& rpInterface)
        {
            // Get interface to the component isolation service.
            auto ptrComControl = sdv::core::GetObject("CommunicationControl");
            if (!ptrComControl) throw sdv::ps::XMarshallNotInitialized{};
            sdv::ps::IMarshallAccess* pMarshallAccess = ptrComControl.GetInterface<sdv::ps::IMarshallAccess>();
            if (!pMarshallAccess) throw sdv::ps::XMarshallNotInitialized{};

            // Get the interface ID
            sdv::interface_id id = 0;
            rDeserializer >> id;

            // Get the stub ID
            sdv::ps::TMarshallID tStubID{};
            rDeserializer >> tStubID;

            // Create the proxy
            rpInterface = pMarshallAccess->GetProxy(tStubID, id).get<sdv::IParameters>();

            return rDeserializer;
        }
    };
} // serdes namespace

#endif // !defined(__IDL_GENERATED__PARAM_SERDES_H__20260404_121552_392__)