Program Listing for File param.h#

Return to documentation for file (interfaces\param.h)

#ifndef __IDL_GENERATED__PARAM_H__20260404_121552_385__
#define __IDL_GENERATED__PARAM_H__20260404_121552_385__

#ifdef _MSC_VER
// Prevent bogus warnings about uninitialized members during static code analysis.
#pragma warning(push)
#pragma warning(disable : 26495)
#endif

// Provide fixed width integer types.
#include <cstdint>

#include "core.h"

namespace sdv
{
    enum class EParamFlags : uint32_t
    {
        mask = 0xff,

        read_write = 0x00,

        read_only = 0x01,

        temporary = 0x20,

        state_mask = 0xff00,

        dirty = 0x0100,

        locked = 0x0400,
    };

    enum class EParamType : int32_t
    {
        boolean_param,

        number_param,

        string_param,

        enum_param,

        bitmask_param,
    };

    struct SNumberInfo
    {
        sdv::any_t anyLowerLimit;

        bool bIncludeLowerLinit;

        sdv::any_t anyUpperLimit;

        bool bIncludeUpperLimit;
    };

    struct SStringInfo
    {
        sdv::u8string ssPattern;
    };

    struct SLabelInfo
    {
        struct SLabel
        {
            sdv::any_t anyValue;

            sdv::u8string ssLabel;
        };

        sdv::sequence<SLabel> seqLabels;
    };

    struct SParamInfo
    {
        SParamInfo()
        {
            construct_eType();
        }

        SParamInfo(const SParamInfo& rvar) :
            uiFlags(rvar.uiFlags),
            ssName(rvar.ssName),
            ssGroup(rvar.ssGroup),
            ssUnit(rvar.ssUnit),
            ssDescription(rvar.ssDescription),
            anyDefaultVal(rvar.anyDefaultVal)
        {
            // Construct content based on eType
            eType = rvar.eType;
            switch (rvar.eType)
            {
            case sdv::EParamType::number_param:
                new (&uExtInfo.sNumberInfo) SNumberInfo(rvar.uExtInfo.sNumberInfo);
                break;
            case sdv::EParamType::string_param:
                new (&uExtInfo.sStringInfo) SStringInfo(rvar.uExtInfo.sStringInfo);
                break;
            case sdv::EParamType::enum_param:
                new (&uExtInfo.sEnumInfo) SLabelInfo(rvar.uExtInfo.sEnumInfo);
                break;
            case sdv::EParamType::bitmask_param:
                new (&uExtInfo.sBitmaskInfo) SLabelInfo(rvar.uExtInfo.sBitmaskInfo);
                break;
            default:
                break;
            }
        }

        SParamInfo(SParamInfo&& rvar) noexcept :
            uiFlags(rvar.uiFlags),
            ssName(std::move(rvar.ssName)),
            ssGroup(std::move(rvar.ssGroup)),
            ssUnit(std::move(rvar.ssUnit)),
            ssDescription(std::move(rvar.ssDescription)),
            anyDefaultVal(std::move(rvar.anyDefaultVal))
        {
            // Construct content based on eType
            eType = rvar.eType;
            switch (rvar.eType)
            {
            case sdv::EParamType::number_param:
                new (&uExtInfo.sNumberInfo) SNumberInfo(std::move(rvar.uExtInfo.sNumberInfo));
                break;
            case sdv::EParamType::string_param:
                new (&uExtInfo.sStringInfo) SStringInfo(std::move(rvar.uExtInfo.sStringInfo));
                break;
            case sdv::EParamType::enum_param:
                new (&uExtInfo.sEnumInfo) SLabelInfo(std::move(rvar.uExtInfo.sEnumInfo));
                break;
            case sdv::EParamType::bitmask_param:
                new (&uExtInfo.sBitmaskInfo) SLabelInfo(std::move(rvar.uExtInfo.sBitmaskInfo));
                break;
            default:
                break;
            }
        }

        ~SParamInfo()
        {
            destruct_eType();
        }

        SParamInfo& operator=(const SParamInfo & rvar)
        {
            // Destroy previous allocation.
            destruct_eType();

            uiFlags = rvar.uiFlags;
            ssName = rvar.ssName;
            ssGroup = rvar.ssGroup;
            ssUnit = rvar.ssUnit;
            ssDescription = rvar.ssDescription;
            anyDefaultVal = rvar.anyDefaultVal;

            // Construct content based on eType
            eType = rvar.eType;
            switch (rvar.eType)
            {
            case sdv::EParamType::number_param:
                new (&uExtInfo.sNumberInfo) SNumberInfo(rvar.uExtInfo.sNumberInfo);
                break;
            case sdv::EParamType::string_param:
                new (&uExtInfo.sStringInfo) SStringInfo(rvar.uExtInfo.sStringInfo);
                break;
            case sdv::EParamType::enum_param:
                new (&uExtInfo.sEnumInfo) SLabelInfo(rvar.uExtInfo.sEnumInfo);
                break;
            case sdv::EParamType::bitmask_param:
                new (&uExtInfo.sBitmaskInfo) SLabelInfo(rvar.uExtInfo.sBitmaskInfo);
                break;
            default:
                break;
            }

            return *this;
        }

        SParamInfo& operator=(SParamInfo&& rvar) noexcept
        {
            // Destroy previous allocation.
            destruct_eType();

            uiFlags = rvar.uiFlags;
            ssName = std::move(rvar.ssName);
            ssGroup = std::move(rvar.ssGroup);
            ssUnit = std::move(rvar.ssUnit);
            ssDescription = std::move(rvar.ssDescription);
            anyDefaultVal = std::move(rvar.anyDefaultVal);

            // Construct content based on eType
            eType = rvar.eType;
            switch (rvar.eType)
            {
            case sdv::EParamType::number_param:
                new (&uExtInfo.sNumberInfo) SNumberInfo(std::move(rvar.uExtInfo.sNumberInfo));
                break;
            case sdv::EParamType::string_param:
                new (&uExtInfo.sStringInfo) SStringInfo(std::move(rvar.uExtInfo.sStringInfo));
                break;
            case sdv::EParamType::enum_param:
                new (&uExtInfo.sEnumInfo) SLabelInfo(std::move(rvar.uExtInfo.sEnumInfo));
                break;
            case sdv::EParamType::bitmask_param:
                new (&uExtInfo.sBitmaskInfo) SLabelInfo(std::move(rvar.uExtInfo.sBitmaskInfo));
                break;
            default:
                break;
            }

            return *this;
        }

    private:
        void construct_eType(sdv::EParamType val = sdv::EParamType{})
        {
            eType = val;
            switch (val)
            {
            case sdv::EParamType::number_param:
                new (&uExtInfo.sNumberInfo) SNumberInfo;
                break;
            case sdv::EParamType::string_param:
                new (&uExtInfo.sStringInfo) SStringInfo;
                break;
            case sdv::EParamType::enum_param:
                new (&uExtInfo.sEnumInfo) SLabelInfo;
                break;
            case sdv::EParamType::bitmask_param:
                new (&uExtInfo.sBitmaskInfo) SLabelInfo;
                break;
            default:
                break;
            }
        }

        void destruct_eType()
        {
            switch (eType)
            {
            case sdv::EParamType::number_param:
                uExtInfo.sNumberInfo.~SNumberInfo();
                break;
            case sdv::EParamType::string_param:
                uExtInfo.sStringInfo.~SStringInfo();
                break;
            case sdv::EParamType::enum_param:
                uExtInfo.sEnumInfo.~SLabelInfo();
                break;
            case sdv::EParamType::bitmask_param:
                uExtInfo.sBitmaskInfo.~SLabelInfo();
                break;
            default:
                break;
            }
        }

    public:
        void switch_to(sdv::EParamType val)
        {
            // Anything to do?
            if (eType == val) return;

            // Destruct and construct eType...
            destruct_eType();
            construct_eType(val);
        }

        sdv::EParamType get_switch() const
        {
            return eType;
        }

    private:
        EParamType eType;

    public:
        uint32_t uiFlags;

        sdv::u8string ssName;

        sdv::u8string ssGroup;

        sdv::u8string ssUnit;

        sdv::u8string ssDescription;

        sdv::any_t anyDefaultVal;


        union union_0 /*switch(eType)*/
        {
            union_0() {}

            ~union_0() {}

            // case sdv::EParamType::number_param:
            SNumberInfo sNumberInfo;

            // case sdv::EParamType::string_param:
            SStringInfo sStringInfo;

            // case sdv::EParamType::enum_param:
            SLabelInfo sEnumInfo;

            // case sdv::EParamType::bitmask_param:
            SLabelInfo sBitmaskInfo;
        } uExtInfo;
    };

    interface IParameters
    {
        static constexpr ::sdv::interface_id _id = 0x454F3BF881A931D2;

        virtual sdv::sequence<sdv::u8string> GetParamPaths() const = 0;

        virtual sdv::any_t GetParam(/*in*/ const sdv::u8string& ssPath) const = 0;

        virtual bool SetParam(/*in*/ const sdv::u8string& ssPath, /*in*/ sdv::any_t anyValue) = 0;

        virtual SParamInfo GetParamInfo(/*in*/ const sdv::u8string& ssPath) const = 0;

        virtual bool IsParamDirty(/*in*/ const sdv::u8string& ssPath) const = 0;

        virtual void ResetParamDirtyFlag(/*in*/ const sdv::u8string& ssPath) = 0;

        virtual bool IsParamMapDirty() const = 0;

        virtual void ResetParamMapDirtyFlags() = 0;
    };
}

#ifdef _MSC_VER
#pragma warning(pop)
#endif

#endif // !defined(__IDL_GENERATED__PARAM_H__20260404_121552_388__)