/************************************************************************/ /* * * Filename : miluniqueid.h * Revision : 10.60.0776 * Content : MIL_UNIQUE_ID C++ RAII class for a MIL_ID * * Copyright © Matrox Electronic Systems Ltd., 1992-2023. * All Rights Reserved *************************************************************************/ #ifndef __UNIQUE_MIL_ID_H #define __UNIQUE_MIL_ID_H #ifndef M_MIL_USE_MIL_UNIQUE_ID #if defined(__cplusplus) && (!defined(M_COMPILING_MILDLL) || !M_COMPILING_MILDLL) && (!defined(M_LINUX_KERNEL) || !M_LINUX_KERNEL) && (!defined(M_WINDOWS_NT_KERNEL_MODE) || !M_WINDOWS_NT_KERNEL_MODE) #define M_MIL_USE_MIL_UNIQUE_ID 1 #else #define M_MIL_USE_MIL_UNIQUE_ID 0 #endif #endif #if M_MIL_USE_MIL_UNIQUE_ID typedef void (MFTYPE MilFreeFuncType)(MIL_ID Id); #if M_MIL_USE_SAFE_TYPE template inline bool MilIsCorrectObjectType(MIL_INT64 ObjectType); // Functions used in debug to report an error if a MIL object ends up in the wrong // MIL_UNIQUE_ID type. template <> inline bool MilIsCorrectObjectType<&MappFree>(MIL_INT64 ObjectType) { return ObjectType == M_APPLICATION; } template <> inline bool MilIsCorrectObjectType<&MappCloseConnection>(MIL_INT64 ObjectType) { return ObjectType == M_APPLICATION; } template <> inline bool MilIsCorrectObjectType<&MbufFree>(MIL_INT64 ObjectType) { return M_IS_BUFFER_TYPE(ObjectType) || ObjectType == M_CONTAINER; } template <> inline bool MilIsCorrectObjectType<&MdigFree>(MIL_INT64 ObjectType) { return M_IS_DIGITIZER_TYPE(ObjectType); } template <> inline bool MilIsCorrectObjectType<&MgraFree>(MIL_INT64 ObjectType) { return ObjectType == M_GRAPHIC_CONTEXT || ObjectType == M_GRAPHIC_LIST; } template <> inline bool MilIsCorrectObjectType<&MobjFree>(MIL_INT64 ObjectType) { return (ObjectType == M_MESSAGE_MAILBOX) || (ObjectType == M_HOOK_CONTEXT) || (ObjectType == M_OPAQUE_HOOK_CONTEXT) || (ObjectType == M_HTTP_SERVER); } #if !M_MIL_USE_LINUX || M_MIL_USE_64BIT template <> inline bool MilIsCorrectObjectType<&MseqFree>(MIL_INT64 ObjectType) { return ObjectType == M_SEQUENCE_CONTEXT; } #endif template <> inline bool MilIsCorrectObjectType<&MsysFree>(MIL_INT64 ObjectType) { return ObjectType == M_SYSTEM; } template <> inline bool MilIsCorrectObjectType<&MsysIoFree>(MIL_INT64 ObjectType) { return ObjectType == M_SYS_IO_CONTEXT; } template <> inline bool MilIsCorrectObjectType<&MthrFree>(MIL_INT64 ObjectType) { return ObjectType == M_EVENT || ObjectType == M_SYSTEM_THREAD || ObjectType == M_MUTEX; } template inline void MilCheckObjectType(MIL_ID Id) { if (!M_ID_IS_VIRTUAL_OR_NULL(Id)) { MIL_INT64 ObjectType; MfuncInquire(Id, M_OBJECT_TYPE_EXTENDED, &ObjectType); if (!MilIsCorrectObjectType(ObjectType)) SafeTypeError(MIL_TEXT("allocation function"), MIL_TEXT("Mismatch between object type and MIL_UNIQUE_ID type.")); } } #define MIL_CHECK_OBJECT_TYPE(Id, FreeFunc) MilCheckObjectType(Id) #else // In release, there is no check at ID acquisition. When the free function is called, // a MIL error is reported if the object type is incorrect. #define MIL_CHECK_OBJECT_TYPE(Id, FreeFunc) #endif // MIL_ID wrapper that manages its lifetime by calling the corresponding free function // in the destructor. Interface similar to std::unique_ptr. template class MIL_UNIQUE_ID { public: explicit MIL_UNIQUE_ID(MIL_ID Id = M_NULL) MIL_NOEXCEPT : m_Id(Id) { MIL_CHECK_OBJECT_TYPE(m_Id, FreeFunc); } ~MIL_UNIQUE_ID() MIL_NOEXCEPT { free_id(); } #if M_MIL_USE_MOVE_SEMANTICS MIL_UNIQUE_ID(MIL_UNIQUE_ID&& Other) MIL_NOEXCEPT : m_Id(Other.m_Id) { Other.m_Id = M_NULL; } MIL_UNIQUE_ID& operator=(MIL_UNIQUE_ID&& Other) MIL_NOEXCEPT { if (&Other != this) { free_id(); m_Id = Other.m_Id; Other.m_Id = M_NULL; } return *this; } // Forbid construction from MIL_UNIQUE_ID of a different type. // (Could happen because of implicit conversion to MIL_ID) template MIL_UNIQUE_ID(const MIL_UNIQUE_ID&) = delete; #endif #if M_MIL_USE_NULLPTR MIL_UNIQUE_ID& operator=(std::nullptr_t) MIL_NOEXCEPT { reset(); return *this; } #endif MIL_ID release() MIL_NOEXCEPT { MIL_ID Id = m_Id; m_Id = M_NULL; return Id; } void reset(MIL_ID NewId = M_NULL) MIL_NOEXCEPT { if (NewId != m_Id) { free_id(); m_Id = NewId; } MIL_CHECK_OBJECT_TYPE(m_Id, FreeFunc); } MIL_ID get() const MIL_NOEXCEPT { return m_Id; } #if M_MIL_USE_REF_QUALIFIERS // Allow implicit conversion to MIL_ID only on non-temporary MIL_UNIQUE_IDs. operator MIL_ID() const & MIL_NOEXCEPT { return m_Id; } operator MIL_ID() && = delete; #else operator MIL_ID() const MIL_NOEXCEPT { return m_Id; } #endif friend void swap(MIL_UNIQUE_ID& lhs, MIL_UNIQUE_ID& rhs) MIL_NOEXCEPT { MIL_ID lhsId = lhs.m_Id; lhs.m_Id = rhs.m_Id; rhs.m_Id = lhsId; } private: #ifndef M_MIL_USE_MOVE_SEMANTICS // Copy is forbidden MIL_UNIQUE_ID(const MIL_UNIQUE_ID&); MIL_UNIQUE_ID& operator=(const MIL_UNIQUE_ID&); #endif void free_id() MIL_NOEXCEPT { if (!M_ID_IS_VIRTUAL_OR_NULL(m_Id)) FreeFunc(m_Id); } MIL_ID m_Id; }; // Specific MIL_UNIQUE_ID instantiations for each free function. typedef MIL_UNIQUE_ID<&MappFree > MIL_UNIQUE_APP_ID; typedef MIL_UNIQUE_ID<&MappCloseConnection> MIL_UNIQUE_CONNECTION_ID; typedef MIL_UNIQUE_ID<&MbufFree > MIL_UNIQUE_BUF_ID; typedef MIL_UNIQUE_ID<&MdigFree > MIL_UNIQUE_DIG_ID; typedef MIL_UNIQUE_ID<&MgraFree > MIL_UNIQUE_GRA_ID; typedef MIL_UNIQUE_ID<&MobjFree > MIL_UNIQUE_OBJ_ID; typedef MIL_UNIQUE_ID<&MsysFree > MIL_UNIQUE_SYS_ID; typedef MIL_UNIQUE_ID<&MsysIoFree> MIL_UNIQUE_SYSIO_ID; typedef MIL_UNIQUE_ID<&MthrFree > MIL_UNIQUE_THR_ID; #if !M_MIL_USE_LINUX || M_MIL_USE_64BIT typedef MIL_UNIQUE_ID<&MseqFree > MIL_UNIQUE_SEQ_ID; #endif // Factory functions that wrap all MIL allocation functions to return a MIL_UNIQUE_ID // instead of a MIL_ID. To use the factory function, simply replace the last // MIL_ID* parameter with M_UNIQUE_ID. #if M_MIL_USE_MOVE_SEMANTICS // Structure used for tag dispatching in the C++ overloads below. struct MIL_UNIQUE_ID_TAG {}; #define M_UNIQUE_ID MIL_UNIQUE_ID_TAG() // Structure used to accept an array of either MIL_UNIQUE_IDs or MIL_IDs. struct MilConstArrayIdParam { const MIL_ID* m_IdArrayPtr; inline MilConstArrayIdParam(const MIL_ID* p) : m_IdArrayPtr(p) {} template inline MilConstArrayIdParam(const MIL_UNIQUE_ID* p) : m_IdArrayPtr(reinterpret_cast(p)) { static_assert(sizeof(MIL_UNIQUE_ID[2]) == sizeof(MIL_ID[2]), "cannot cast const MIL_UNIQUE_ID* to const MIL_ID*"); } }; // Generic implementation of MxxxStream C++ overloads for MIL_UNIQUE_IDs. template inline void MxxxStreamForMilUniqueId(MilStreamParam MemPtrOrFileName, MIL_ID SysId , MIL_INT64 Operation , MIL_INT64 StreamType , MIL_DOUBLE Version , MIL_INT64 ControlFlag , MIL_UNIQUE_ID* UniqueIdPtr , MIL_INT* SizeByteVarPtr , M_XXX_STREAM_FUNCTION MxxxStream ) { MIL_ID TempId = UniqueIdPtr->get(); (*MxxxStream)(MemPtrOrFileName, SysId, Operation, StreamType, Version, ControlFlag, &TempId, SizeByteVarPtr); if (Operation & M_RESTORE) UniqueIdPtr->reset(TempId); } // APP inline MIL_UNIQUE_APP_ID MappAlloc(MIL_CONST_TEXT_PTR ServerDescription, MIL_INT64 InitFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_APP_ID(MappAlloc(ServerDescription, InitFlag, M_NULL)); } inline MIL_UNIQUE_CONNECTION_ID MappOpenConnection(MIL_CONST_TEXT_PTR ConnectionDescriptor, MIL_INT64 InitFlag, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { MIL_ID RemoteContextAppId = M_NULL; MappOpenConnection(ConnectionDescriptor, InitFlag, ControlFlag, &RemoteContextAppId); return MIL_UNIQUE_CONNECTION_ID(RemoteContextAppId); } #if M_MIL_USE_STRING inline MIL_UNIQUE_APP_ID MappAlloc(const MIL_STRING& ServerDescription, MIL_INT64 InitFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_APP_ID(MappAlloc(ServerDescription, InitFlag, M_NULL)); } inline MIL_UNIQUE_CONNECTION_ID MappOpenConnection(const MIL_STRING& ConnectionDescriptor, MIL_INT64 InitFlag, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { MIL_ID RemoteContextAppId = M_NULL; MappOpenConnection(ConnectionDescriptor, InitFlag, ControlFlag, &RemoteContextAppId); return MIL_UNIQUE_CONNECTION_ID(RemoteContextAppId); } #endif template inline void MappFree(const MIL_UNIQUE_ID&) = delete; template inline void MappCloseConnection(const MIL_UNIQUE_ID&) = delete; // BUF inline MIL_UNIQUE_BUF_ID MbufAlloc1d(MIL_ID SystemId, MIL_INT SizeX, MIL_INT Type, MIL_INT64 Attribute, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufAlloc1d(SystemId, SizeX, Type, Attribute, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufAlloc2d(MIL_ID SystemId, MIL_INT SizeX, MIL_INT SizeY, MIL_INT Type, MIL_INT64 Attribute, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufAlloc2d(SystemId, SizeX, SizeY, Type, Attribute, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufAllocColor(MIL_ID SystemId, MIL_INT SizeBand, MIL_INT SizeX, MIL_INT SizeY, MIL_INT Type, MIL_INT64 Attribute, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufAllocColor(SystemId, SizeBand, SizeX, SizeY, Type, Attribute, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufAllocDefault(MIL_ID SysId, MIL_ID RefMilObjectId, MIL_INT64 Attribute, MIL_INT64 ControlFlag, MIL_INT64 ControlValue, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufAllocDefault(SysId, RefMilObjectId, Attribute, ControlFlag, ControlValue, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufAllocContainer(MIL_ID SysId, MIL_INT64 Attribute, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufAllocContainer(SysId, Attribute, ControlFlag, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufChild1d(MIL_ID ParentBufId, MIL_INT OffX, MIL_INT SizeX, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufChild1d(ParentBufId, OffX, SizeX, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufChild2d(MIL_ID ParentBufId, MIL_INT OffX, MIL_INT OffY, MIL_INT SizeX, MIL_INT SizeY, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufChild2d(ParentBufId, OffX, OffY, SizeX, SizeY, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufChildColor2d(MIL_ID ParentBufId, MIL_INT Band, MIL_INT OffX, MIL_INT OffY, MIL_INT SizeX, MIL_INT SizeY, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufChildColor2d(ParentBufId, Band, OffX, OffY, SizeX, SizeY, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufChildColor2dClip(MIL_ID ParentBufId, MIL_INT Band, MIL_INT OffX, MIL_INT OffY, MIL_INT SizeX, MIL_INT SizeY, MIL_INT* StatusPtr, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufChildColor2dClip(ParentBufId, Band, OffX, OffY, SizeX, SizeY, StatusPtr, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufChildColor(MIL_ID ParentBufId, MIL_INT Band, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufChildColor(ParentBufId, Band, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufChildContainer(MIL_ID ContId, MIL_INT ComponentCriteriaSize, const MIL_INT64* ComponentCriteriaArrayPtr, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufChildContainer(ContId, ComponentCriteriaSize, ComponentCriteriaArrayPtr, ControlFlag, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufChildContainer(MIL_ID ContId, MIL_INT ComponentCriteriaSize, const std::vector& ComponentCriteriaArrayPtr, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufChildContainer(ContId, ComponentCriteriaSize, ComponentCriteriaArrayPtr, ControlFlag, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufClone(MIL_ID SrcBufId, MIL_ID SysId, MIL_INT SizeX, MIL_INT SizeY, MIL_INT Type, MIL_INT64 Attribute, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufClone(SrcBufId, SysId, SizeX, SizeY, Type, Attribute, ControlFlag, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufCreate2dFunc(MIL_ID SystemId, MIL_INT SizeX, MIL_INT SizeY, MIL_INT Type, MIL_INT64 Attribute, MIL_INT64 ControlFlag, MIL_INT Pitch, MIL_DATA_PTR DataPtr, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufCreate2dFunc(SystemId, SizeX, SizeY, Type, Attribute, ControlFlag, Pitch, DataPtr, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufCreateColor(MIL_ID SystemId, MIL_INT SizeBand, MIL_INT SizeX, MIL_INT SizeY, MIL_INT Type, MIL_INT64 Attribute, MIL_INT64 ControlFlag, MIL_INT Pitch, void** ArrayOfDataPtr, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufCreateColor(SystemId, SizeBand, SizeX, SizeY, Type, Attribute, ControlFlag, Pitch, ArrayOfDataPtr, M_NULL)); } inline MIL_UNIQUE_BUF_ID MbufRestore(MIL_CONST_TEXT_PTR FileName, MIL_ID SystemId, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufRestore(FileName, SystemId, M_NULL)); } #if M_MIL_USE_STRING inline MIL_UNIQUE_BUF_ID MbufRestore(const MIL_STRING& FileName, MIL_ID SystemId, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_BUF_ID(MbufRestore(FileName, SystemId, M_NULL)); } #endif template inline void MbufFree(const MIL_UNIQUE_ID&) = delete; inline void MbufExportSequence( MIL_CONST_TEXT_PTR FileName , MIL_INT64 FileFormat , MilConstArrayIdParam BufArrayPtrOrSystemIdPtr, MIL_INT NumOfIds , MIL_DOUBLE FrameRate , MIL_INT64 ControlFlag ) { MbufExportSequence(FileName, FileFormat, BufArrayPtrOrSystemIdPtr.m_IdArrayPtr, NumOfIds, FrameRate, ControlFlag); } inline MIL_ID MbufImport(MIL_CONST_TEXT_PTR FileName, MIL_INT64 FileFormat, MIL_INT64 Operation, MIL_ID SystemId, int) { return MbufImport(FileName, FileFormat, Operation, SystemId, static_cast(0)); } #if M_MIL_USE_NULLPTR inline MIL_ID MbufImport(MIL_CONST_TEXT_PTR FileName, MIL_INT64 FileFormat, MIL_INT64 Operation, MIL_ID SystemId, std::nullptr_t) { return MbufImport(FileName, FileFormat, Operation, SystemId, static_cast(0)); } #endif inline MIL_ID MbufImport(MIL_CONST_TEXT_PTR FileName, MIL_INT64 FileFormat, MIL_INT64 Operation, MIL_ID SystemId, MIL_UNIQUE_BUF_ID* BufIdPtr) { if (BufIdPtr) { MIL_ID TempBufId = BufIdPtr->get(); MIL_ID ReturnValue = MbufImport(FileName, FileFormat, Operation, SystemId, &TempBufId); if (Operation & M_RESTORE) BufIdPtr->reset(TempBufId); return ReturnValue; } else { return MbufImport(FileName, FileFormat, Operation, SystemId, static_cast(0)); } } inline MIL_UNIQUE_BUF_ID MbufImport(MIL_CONST_TEXT_PTR FileName, MIL_INT64 FileFormat, MIL_INT64 Operation, MIL_ID SystemId, MIL_UNIQUE_ID_TAG) { #if M_MIL_USE_SAFE_TYPE if ((Operation & M_RESTORE) != M_RESTORE) SafeTypeError(MIL_TEXT("MbufImport"), MIL_TEXT("This overload only supports the M_RESTORE operation.")); #endif return MIL_UNIQUE_BUF_ID(MbufImport(FileName, FileFormat, Operation, SystemId, M_NULL)); } #if M_MIL_USE_STRING inline void MbufExportSequence( const MIL_STRING& FileName , MIL_INT64 FileFormat , MilConstArrayIdParam BufArrayPtrOrSystemIdPtr, MIL_INT NumOfIds , MIL_DOUBLE FrameRate , MIL_INT64 ControlFlag ) { MbufExportSequence(FileName.c_str(), FileFormat, BufArrayPtrOrSystemIdPtr.m_IdArrayPtr, NumOfIds, FrameRate, ControlFlag); } inline MIL_ID MbufImport(const MIL_STRING& FileName, MIL_INT64 FileFormat, MIL_INT64 Operation, MIL_ID SystemId, int) { return MbufImport(FileName.c_str(), FileFormat, Operation, SystemId, static_cast(0)); } #if M_MIL_USE_NULLPTR inline MIL_ID MbufImport(const MIL_STRING& FileName, MIL_INT64 FileFormat, MIL_INT64 Operation, MIL_ID SystemId, std::nullptr_t) { return MbufImport(FileName.c_str(), FileFormat, Operation, SystemId, static_cast(0)); } #endif inline MIL_ID MbufImport(const MIL_STRING& FileName, MIL_INT64 FileFormat, MIL_INT64 Operation, MIL_ID SystemId, MIL_UNIQUE_BUF_ID* BufIdPtr) { return MbufImport(FileName.c_str(), FileFormat, Operation, SystemId, BufIdPtr); } inline MIL_UNIQUE_BUF_ID MbufImport(const MIL_STRING& FileName, MIL_INT64 FileFormat, MIL_INT64 Operation, MIL_ID SystemId, MIL_UNIQUE_ID_TAG) { #if M_MIL_USE_SAFE_TYPE if(Operation != M_RESTORE) SafeTypeError(MIL_TEXT("MbufImport"), MIL_TEXT("This overload only supports the M_RESTORE operation.")); #endif return MIL_UNIQUE_BUF_ID(MbufImport(FileName.c_str(), FileFormat, Operation, SystemId, M_NULL)); } #endif inline void MbufStream(MilStreamParam MemPtrOrFileName, MIL_ID SysId, MIL_INT64 Operation, MIL_INT64 StreamType, MIL_DOUBLE Version, MIL_INT64 ControlFlag, MIL_UNIQUE_BUF_ID* MbufIdPtr, MIL_INT* SizeByteVarPtr) { MxxxStreamForMilUniqueId(MemPtrOrFileName, SysId, Operation, StreamType, Version, ControlFlag, MbufIdPtr, SizeByteVarPtr, MbufStream); } // DIG inline MIL_UNIQUE_DIG_ID MdigAlloc(MIL_ID SystemId, MIL_INT DigNum, MIL_CONST_TEXT_PTR DataFormat, MIL_INT64 InitFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_DIG_ID(MdigAlloc(SystemId, DigNum, DataFormat, InitFlag, M_NULL)); } #if M_MIL_USE_STRING inline MIL_UNIQUE_DIG_ID MdigAlloc(MIL_ID SystemId, MIL_INT DigNum, const MIL_STRING& DataFormat, MIL_INT64 InitFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_DIG_ID(MdigAlloc(SystemId, DigNum, DataFormat, InitFlag, M_NULL)); } #endif template inline void MdigFree(const MIL_UNIQUE_ID&) = delete; inline void MdigProcess( MIL_ID DigId, MilConstArrayIdParam DestImageArrayPtr, MIL_INT ImageCount, MIL_INT64 Operation, MIL_INT64 OperationFlag, MIL_DIG_HOOK_FUNCTION_PTR HookHandlerPtr, void* UserDataPtr) { MdigProcess(DigId, DestImageArrayPtr.m_IdArrayPtr, ImageCount, Operation, OperationFlag, HookHandlerPtr, UserDataPtr); } // GRA inline MIL_UNIQUE_GRA_ID MgraAlloc(MIL_ID SysId, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_GRA_ID(MgraAlloc(SysId, M_NULL)); } inline MIL_UNIQUE_GRA_ID MgraAllocList(MIL_ID SysId, MIL_INT ListGraType, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_GRA_ID(MgraAllocList(SysId, ListGraType, M_NULL)); } template inline void MgraFree(const MIL_UNIQUE_ID&) = delete; // OBJ inline MIL_UNIQUE_OBJ_ID MobjAlloc(MIL_ID SysId, MIL_INT64 ObjectType, MIL_INT64 InitFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_OBJ_ID(MobjAlloc(SysId, ObjectType, InitFlag, M_NULL)); } template inline void MobjFree(const MIL_UNIQUE_ID&) = delete; // SEQ #if !M_MIL_USE_LINUX || M_MIL_USE_64BIT inline MIL_UNIQUE_SEQ_ID MseqAlloc(MIL_ID SystemId, MIL_INT64 SequenceType, MIL_INT64 Operation, MIL_UINT32 OutputFormat, MIL_INT64 InitFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_SEQ_ID(MseqAlloc(SystemId, SequenceType, Operation, OutputFormat, InitFlag, M_NULL)); } template inline void MseqFree(const MIL_UNIQUE_ID&) = delete; #endif // SYS inline MIL_UNIQUE_SYS_ID MsysAlloc(MIL_ID ContextAppId, MIL_CONST_TEXT_PTR SystemDescriptor, MIL_INT SystemNum, MIL_INT64 InitFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_SYS_ID(MsysAlloc(ContextAppId, SystemDescriptor, SystemNum, InitFlag, M_NULL)); } #if M_MIL_USE_STRING inline MIL_UNIQUE_SYS_ID MsysAlloc(MIL_ID ContextAppId, const MIL_STRING& SystemDescriptor, MIL_INT SystemNum, MIL_INT64 InitFlag, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_SYS_ID(MsysAlloc(ContextAppId, SystemDescriptor, SystemNum, InitFlag, M_NULL)); } #endif template inline void MsysFree(const MIL_UNIQUE_ID&) = delete; // SYSIO inline MIL_UNIQUE_SYSIO_ID MsysIoAlloc(MIL_ID SysId, MIL_INT64 IoCmdListNum, MIL_INT64 Type, MIL_INT64 CounterSrc, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_SYSIO_ID(MsysIoAlloc(SysId, IoCmdListNum, Type, CounterSrc, M_NULL)); } template inline void MsysIoFree(const MIL_UNIQUE_ID&) = delete; // THR inline MIL_UNIQUE_THR_ID MthrAlloc(MIL_ID SystemId, MIL_INT64 ObjectType, MIL_INT64 ControlFlag, MIL_THREAD_FUNCTION_PTR ThreadFctPtr, void *UserDataPtr, MIL_UNIQUE_ID_TAG) { return MIL_UNIQUE_THR_ID(MthrAlloc(SystemId, ObjectType, ControlFlag, ThreadFctPtr, UserDataPtr, M_NULL)); } template inline void MthrFree(const MIL_UNIQUE_ID&) = delete; inline MIL_INT MthrWaitMultiple(MilConstArrayIdParam EventArrayIdPtr, MIL_INT EventArraySize, MIL_INT64 WaitOption, MIL_INT *StatePtr) { return MthrWaitMultiple(EventArrayIdPtr.m_IdArrayPtr, EventArraySize, WaitOption, StatePtr); } #endif // #if M_MIL_USE_MOVE_SEMANTICS #endif // #if M_MIL_USE_MIL_UNIQUE_ID #endif // #ifndef __UNIQUE_MIL_ID_H