Program Listing for File module_serdes.h#

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

#ifndef __IDL_GENERATED__MODULE_SERDES_H__20251008_120503_470__
#define __IDL_GENERATED__MODULE_SERDES_H__20251008_120503_470__

// 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 "../module.h"

#include "core_serdes.h"

// Serializer / deserializer namespace
namespace serdes
{
    template <>
    class CSerdes<sdv::core::IModuleControl*>
    {
    public:
        static void CalcSize([[maybe_unused]] sdv::core::IModuleControl* 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::core::IModuleControl* 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::core::IModuleControl>();

            // 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::core::IModuleControl*& 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::core::IModuleControl>();

            return rDeserializer;
        }
    };

    template <>
    class CSerdes<sdv::core::IModuleControlConfig*>
    {
    public:
        static void CalcSize([[maybe_unused]] sdv::core::IModuleControlConfig* 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::core::IModuleControlConfig* 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::core::IModuleControlConfig>();

            // 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::core::IModuleControlConfig*& 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::core::IModuleControlConfig>();

            return rDeserializer;
        }
    };

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

            // Calculating the size of SModuleInfo
            sdv::ser_size(rVar.tModuleID, rnSize);
            sdv::ser_size(rVar.ssPath, rnSize);
            sdv::ser_size(rVar.ssFilename, rnSize);
            sdv::ser_size(rVar.uiVersion, rnSize);
            sdv::ser_size(rVar.bActive, rnSize);
        }

        template <sdv::EEndian eTargetEndianess, typename TCRC>
        static sdv::serializer<eTargetEndianess, TCRC>& Serialize(sdv::serializer<eTargetEndianess, TCRC>& rSerializer, const sdv::core::SModuleInfo& rVar)
        {
            // Serializing members of SModuleInfo
            rSerializer << rVar.tModuleID;
            rSerializer << rVar.ssPath;
            rSerializer << rVar.ssFilename;
            rSerializer << rVar.uiVersion;
            rSerializer << rVar.bActive;
            return rSerializer;
        }

        template <sdv::EEndian eSourceEndianess, typename TCRC>
        static sdv::deserializer<eSourceEndianess, TCRC>& Deserialize(sdv::deserializer<eSourceEndianess, TCRC>& rDeserializer, sdv::core::SModuleInfo& rVar)
        {
            // Deserializing members of SModuleInfo
            rDeserializer >> rVar.tModuleID;
            rDeserializer >> rVar.ssPath;
            rDeserializer >> rVar.ssFilename;
            rDeserializer >> rVar.uiVersion;
            rDeserializer >> rVar.bActive;
            return rDeserializer;
        }
    };

    template <>
    class CSerdes<sdv::core::IModuleInfo*>
    {
    public:
        static void CalcSize([[maybe_unused]] sdv::core::IModuleInfo* 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::core::IModuleInfo* 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::core::IModuleInfo>();

            // 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::core::IModuleInfo*& 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::core::IModuleInfo>();

            return rDeserializer;
        }
    };
} // serdes namespace

#endif // !defined(__IDL_GENERATED__MODULE_SERDES_H__20251008_120503_471__)