2320 lines
88 KiB
C++
2320 lines
88 KiB
C++
/***************************************************************************/
|
|
/*
|
|
|
|
Filename: MILVECTOR.H
|
|
Owner : Matrox Imaging
|
|
Revision: 10.60.0776
|
|
Content : This file contains the std::vector overload for the Matrox
|
|
Imaging Library (MIL)
|
|
|
|
Copyright © Matrox Electronic Systems Ltd., 1992-2023.
|
|
All Rights Reserved
|
|
*/
|
|
/***************************************************************************/
|
|
#ifndef __MILPROTO_H
|
|
#error milproto.h required
|
|
#else
|
|
|
|
#ifndef __MILVECTOR_H__
|
|
#define __MILVECTOR_H__
|
|
|
|
/************************************************************************/
|
|
/* SUPPORT FOR std::vector */
|
|
/************************************************************************/
|
|
#ifndef M_MIL_USE_VECTOR
|
|
#if (!defined(M_LINUX_KERNEL) || !M_LINUX_KERNEL) && (!defined(M_WINDOWS_NT_KERNEL_MODE) || !M_WINDOWS_NT_KERNEL_MODE) && (!defined(M_WINDOWS_CE_KERNEL_MODE) || !M_WINDOWS_CE_KERNEL_MODE) && defined(__cplusplus)
|
|
#define M_MIL_USE_VECTOR 1
|
|
#else
|
|
#define M_MIL_USE_VECTOR 0
|
|
#endif
|
|
#endif
|
|
|
|
/************************************************************************/
|
|
/* SUPPORT FOR std::vector */
|
|
/************************************************************************/
|
|
#if M_MIL_USE_VECTOR
|
|
#include <vector>
|
|
|
|
// Struct used for getting the MIL data type flag of a data type.
|
|
template <typename UserType>
|
|
struct MilTraits;
|
|
|
|
#define DECLARE_MIL_TRAITS(Type, MilDataTypeFlag, MilBufferTypeFlag) \
|
|
template <> \
|
|
struct MilTraits<Type> \
|
|
{ \
|
|
static const MIL_INT64 TypeFlag = MilDataTypeFlag; \
|
|
static const MIL_INT64 BufferTypeFlag = MilBufferTypeFlag; \
|
|
}
|
|
|
|
#define RUN_BUFINQUIRE_RETURNIFFAIL(MacroBufId, MacroInquireType, MacroUserVarptr) \
|
|
MbufInquire(MacroBufId, MacroInquireType, MacroUserVarptr); \
|
|
if(*MacroUserVarptr == 0) { \
|
|
return; \
|
|
}
|
|
|
|
DECLARE_MIL_TRAITS(MIL_INT8, M_TYPE_CHAR, M_SIGNED + 8);
|
|
DECLARE_MIL_TRAITS(signed char, M_TYPE_CHAR, M_SIGNED + 8);
|
|
DECLARE_MIL_TRAITS(MIL_UINT8, M_TYPE_MIL_UINT8, M_UNSIGNED + 8);
|
|
DECLARE_MIL_TRAITS(MIL_UINT16, M_DEFAULT, M_UNSIGNED + 16);
|
|
DECLARE_MIL_TRAITS(MIL_UINT32, M_DEFAULT, M_UNSIGNED + 32);
|
|
DECLARE_MIL_TRAITS(MIL_INT16, M_TYPE_MIL_INT16, M_SIGNED + 16);
|
|
DECLARE_MIL_TRAITS(MIL_INT32, M_TYPE_MIL_INT32, M_SIGNED + 32);
|
|
DECLARE_MIL_TRAITS(MIL_INT64, M_TYPE_MIL_INT64, M_SIGNED + 64);
|
|
DECLARE_MIL_TRAITS(MIL_FLOAT, M_TYPE_MIL_FLOAT, M_FLOAT + 32);
|
|
DECLARE_MIL_TRAITS(MIL_DOUBLE, M_TYPE_MIL_DOUBLE, M_FLOAT + 64);
|
|
DECLARE_MIL_TRAITS(MIL_UUID, M_TYPE_MIL_UUID, M_INVALID);
|
|
#if M_MIL_USE_WINDOWS
|
|
DECLARE_MIL_TRAITS(int, M_TYPE_MIL_INT32, M_SIGNED + 32);
|
|
DECLARE_MIL_TRAITS(unsigned int, M_TYPE_MIL_INT32, M_UNSIGNED + 32);
|
|
#endif
|
|
|
|
// Class used as any array parameter in C++ overloads of any functions that takes std::vector.
|
|
class CMilArrayParamOut
|
|
{
|
|
public:
|
|
inline CMilArrayParamOut(int Value): m_pParamVector(M_NULL), m_ParamValue(Value), m_MilDataType(M_NULL) {}
|
|
#if M_MIL_USE_NULLPTR
|
|
inline CMilArrayParamOut(std::nullptr_t) : m_pParamVector(M_NULL), m_ParamValue(M_NULL), m_MilDataType(M_NULL) {}
|
|
#endif
|
|
inline CMilArrayParamOut(std::vector<MIL_INT8 >& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_INT8 >::TypeFlag) {}
|
|
inline CMilArrayParamOut(std::vector<MIL_UINT8 >& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_UINT8 >::TypeFlag) {}
|
|
inline CMilArrayParamOut(std::vector<MIL_UINT16>& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_UINT16>::TypeFlag) {}
|
|
inline CMilArrayParamOut(std::vector<MIL_UINT32>& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_UINT32>::TypeFlag) {}
|
|
inline CMilArrayParamOut(std::vector<MIL_INT16 >& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_INT16 >::TypeFlag) {}
|
|
inline CMilArrayParamOut(std::vector<MIL_INT32 >& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_INT32 >::TypeFlag) {}
|
|
inline CMilArrayParamOut(std::vector<MIL_INT64 >& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_INT64 >::TypeFlag) {}
|
|
inline CMilArrayParamOut(std::vector<MIL_FLOAT >& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_FLOAT >::TypeFlag) {}
|
|
inline CMilArrayParamOut(std::vector<MIL_DOUBLE>& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_DOUBLE>::TypeFlag) {}
|
|
|
|
template <typename UserType>
|
|
inline void Resize(const MIL_INT& Size) { if(m_pParamVector) { (reinterpret_cast<std::vector<UserType>*>(m_pParamVector))->resize(Size); } }
|
|
|
|
template <typename UserType>
|
|
inline UserType* GetData() { return m_pParamVector ? &(*reinterpret_cast<std::vector<UserType>*>(m_pParamVector))[0] : M_NULL; }
|
|
|
|
inline bool IsValidParam() { return m_pParamVector ? true : m_ParamValue ? false : true; }
|
|
|
|
// For debug purpose.
|
|
inline bool IsNullPtr() { return m_pParamVector ? false : true; }
|
|
|
|
inline MIL_INT64 GetMilDataType() { return m_MilDataType; }
|
|
|
|
private:
|
|
void* m_pParamVector;
|
|
int m_ParamValue;
|
|
MIL_INT64 m_MilDataType;
|
|
};
|
|
|
|
class CMilArrayParamIn
|
|
{
|
|
public:
|
|
inline CMilArrayParamIn(int Value): m_pParamVector(M_NULL), m_ParamValue(Value), m_MilDataType(M_NULL) {}
|
|
#if M_MIL_USE_NULLPTR
|
|
inline CMilArrayParamIn(std::nullptr_t) : m_pParamVector(M_NULL), m_ParamValue(M_NULL), m_MilDataType(M_NULL) {}
|
|
#endif
|
|
inline CMilArrayParamIn(const std::vector<MIL_INT8 >& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_INT8 >::TypeFlag) {}
|
|
inline CMilArrayParamIn(const std::vector<MIL_UINT8 >& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_UINT8 >::TypeFlag) {}
|
|
inline CMilArrayParamIn(const std::vector<MIL_UINT16>& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_UINT16>::TypeFlag) {}
|
|
inline CMilArrayParamIn(const std::vector<MIL_INT16 >& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_INT16 >::TypeFlag) {}
|
|
inline CMilArrayParamIn(const std::vector<MIL_INT32 >& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_INT32 >::TypeFlag) {}
|
|
inline CMilArrayParamIn(const std::vector<MIL_INT64 >& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_INT64 >::TypeFlag) {}
|
|
inline CMilArrayParamIn(const std::vector<MIL_FLOAT >& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_FLOAT >::TypeFlag) {}
|
|
inline CMilArrayParamIn(const std::vector<MIL_DOUBLE>& Vec) : m_pParamVector(&Vec), m_ParamValue(M_NULL), m_MilDataType(MilTraits<MIL_DOUBLE>::TypeFlag) {}
|
|
|
|
template <typename UserType>
|
|
inline MIL_INT Size() { return m_pParamVector ? (MIL_INT)((reinterpret_cast<const std::vector<UserType>*>(m_pParamVector))->size()) : 0; }
|
|
|
|
template <typename UserType>
|
|
inline const UserType* GetData() { return m_pParamVector ? &(*reinterpret_cast<const std::vector<UserType>*>(m_pParamVector))[0] : M_NULL; }
|
|
|
|
inline bool IsValidParam() { return m_pParamVector ? true : m_ParamValue ? false : true; }
|
|
|
|
// For debug purpose.
|
|
inline bool IsNullPtr() { return m_pParamVector ? false : true; }
|
|
|
|
inline MIL_INT64 GetMilDataType() { return m_MilDataType; }
|
|
|
|
template <typename UserType>
|
|
inline bool IsEmpty() { return m_pParamVector ? (reinterpret_cast<const std::vector<UserType>*>(m_pParamVector))->empty() : false; }
|
|
|
|
private:
|
|
const void* m_pParamVector;
|
|
int m_ParamValue;
|
|
MIL_INT64 m_MilDataType;
|
|
};
|
|
|
|
#define M_INQUIRE_SIZE_BYTE 2L // Used in the MxxxStreamForStdVector function defined in milproto.h
|
|
|
|
/***************************************************************************/
|
|
/* MxxxStream function PROTOTYPE */
|
|
/***************************************************************************/
|
|
typedef void(MFTYPE* M_XXX_STREAM_FUNCTION)(MilStreamParam MemPtrOrFileName,
|
|
MIL_ID SysId,
|
|
MIL_INT64 Operation,
|
|
MIL_INT64 StreamType,
|
|
MIL_DOUBLE Version,
|
|
MIL_INT64 ControlFlag,
|
|
MIL_ID* MxxxIdPtr,
|
|
MIL_INT* SizeByteVarPtr);
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MxxxStream.
|
|
inline void MFTYPE MxxxStreamForStdVector(std::vector<MIL_UINT8> &MemPtrOrFileName,
|
|
MIL_ID SysId,
|
|
MIL_INT64 Operation,
|
|
MIL_INT64 StreamType,
|
|
MIL_DOUBLE Version,
|
|
MIL_INT64 ControlFlag,
|
|
MIL_ID* MxxxIdPtr,
|
|
MIL_INT* SizeByteVarPtr,
|
|
M_XXX_STREAM_FUNCTION MxxxStream)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(StreamType != M_MEMORY)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MxxxStream"), MIL_TEXT("StreamType parameter must be set to M_MEMORY with the std::vector overloads."));
|
|
}
|
|
#endif
|
|
|
|
switch(Operation)
|
|
{
|
|
case M_LOAD:
|
|
case M_RESTORE:
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(MemPtrOrFileName.empty())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MxxxStream"), MIL_TEXT("The Mem vector cannot be empty with M_LOAD or M_RESTORE operation."));
|
|
}
|
|
#endif
|
|
(*MxxxStream)(&MemPtrOrFileName[0],
|
|
SysId,
|
|
Operation,
|
|
StreamType,
|
|
Version,
|
|
ControlFlag,
|
|
MxxxIdPtr,
|
|
SizeByteVarPtr);
|
|
}
|
|
break;
|
|
case M_SAVE:
|
|
{
|
|
MIL_INT NumberOfBytes = -1;
|
|
(*MxxxStream)(M_NULL, M_NULL, M_INQUIRE_SIZE_BYTE, StreamType, Version, ControlFlag, MxxxIdPtr, &NumberOfBytes);
|
|
|
|
if(NumberOfBytes > 0)
|
|
{
|
|
MemPtrOrFileName.resize(NumberOfBytes);
|
|
|
|
(*MxxxStream)(&MemPtrOrFileName[0],
|
|
SysId,
|
|
Operation,
|
|
StreamType,
|
|
Version,
|
|
ControlFlag,
|
|
MxxxIdPtr,
|
|
SizeByteVarPtr);
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
{
|
|
SafeTypeError(MIL_TEXT("MxxxStream"), MIL_TEXT("Invalid Operation with the std::vector overloads."));
|
|
}
|
|
#endif
|
|
break;
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MgraCopy.
|
|
inline void MFTYPE MgraCopy(MIL_ID SrcListGraId,
|
|
MIL_ID DstListGraId,
|
|
MIL_INT64 Operation,
|
|
MIL_INT InsertLocation,
|
|
MIL_INT NumGraphics,
|
|
CMilArrayParamIn SrcIndexOrLabelArrayPtr,
|
|
CMilArrayParamOut DstLabelArrayPtr,
|
|
MIL_INT64 ControlFlag)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(NumGraphics <= 0)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraCopy"), MIL_TEXT("NumGraphics parameter must be greater than zero."));
|
|
}
|
|
if(!DstLabelArrayPtr.IsValidParam() || !SrcIndexOrLabelArrayPtr.IsValidParam())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraCopy"), MIL_TEXT("SrcIndexOrLabelArrayPtr or DstLabelArrayPtr cannot be an non zero integer."));
|
|
}
|
|
if(SrcIndexOrLabelArrayPtr.IsEmpty<MIL_INT>())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraCopy"), MIL_TEXT("The input vector cannot be empty."));
|
|
}
|
|
if(!SrcIndexOrLabelArrayPtr.IsNullPtr() && SrcIndexOrLabelArrayPtr.GetMilDataType() != MilTraits<MIL_INT>::TypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraCopy"), MIL_TEXT("The data type of SrcIndexOrLabelArrayPtr must be MIL_INT."));
|
|
}
|
|
if(!DstLabelArrayPtr.IsNullPtr() && DstLabelArrayPtr.GetMilDataType() != MilTraits<MIL_INT>::TypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraCopy"), MIL_TEXT("The data type of DstLabelArrayPtr must be MIL_INT."));
|
|
}
|
|
if(!SrcIndexOrLabelArrayPtr.IsNullPtr() && NumGraphics > (MIL_INT)SrcIndexOrLabelArrayPtr.Size<MIL_INT>() && NumGraphics != M_DEFAULT && NumGraphics != M_ALL)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraCopy"), MIL_TEXT("NumGraphics parameter must be smaller or equal (M_DEFAULT) to the size of input vector."));
|
|
}
|
|
#endif
|
|
|
|
if(!SrcIndexOrLabelArrayPtr.IsNullPtr() && NumGraphics != M_ALL && (NumGraphics == M_DEFAULT || NumGraphics > (MIL_INT)SrcIndexOrLabelArrayPtr.Size<MIL_INT>()))
|
|
{
|
|
NumGraphics = (MIL_INT)SrcIndexOrLabelArrayPtr.Size<MIL_INT>();
|
|
}
|
|
|
|
if(NumGraphics == M_ALL)
|
|
{
|
|
MIL_INT InternalNumGraphicsForStdVector = 0;
|
|
|
|
MgraInquireList(SrcListGraId, M_LIST, M_DEFAULT, M_NUMBER_OF_GRAPHICS + M_TYPE_MIL_INT, &InternalNumGraphicsForStdVector);
|
|
|
|
DstLabelArrayPtr.Resize<MIL_INT>(InternalNumGraphicsForStdVector);
|
|
|
|
if(InternalNumGraphicsForStdVector <= 0)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DstLabelArrayPtr.Resize<MIL_INT>(NumGraphics);
|
|
}
|
|
|
|
MgraCopy(SrcListGraId,
|
|
DstListGraId,
|
|
Operation,
|
|
InsertLocation,
|
|
NumGraphics,
|
|
SrcIndexOrLabelArrayPtr.GetData<MIL_INT>(),
|
|
DstLabelArrayPtr.GetData<MIL_INT>(),
|
|
ControlFlag);
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MgraDots.
|
|
template <typename UserType>
|
|
inline void MgraDots(MIL_ID ContextGraId,
|
|
MIL_ID DstImageBufOrListGraId,
|
|
MIL_INT NumberOfDots,
|
|
const std::vector<UserType> &PosXArrayPtr,
|
|
const std::vector<UserType> &PosYArrayPtr,
|
|
MIL_INT64 ControlFlag)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(NumberOfDots <= 0)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraDots"), MIL_TEXT("NumberOfDots parameter must be greater than zero."));
|
|
}
|
|
if(PosXArrayPtr.empty())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraDots"), MIL_TEXT("The input vectors cannot be empty."));
|
|
}
|
|
if(PosXArrayPtr.size() != PosYArrayPtr.size())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraDots"), MIL_TEXT("The input vectors must have the same size."));
|
|
}
|
|
if(NumberOfDots > (MIL_INT)PosXArrayPtr.size() && NumberOfDots != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraDots"), MIL_TEXT("NumberOfDots parameter must be smaller or equal (M_DEFAULT) to the size of input vectors."));
|
|
}
|
|
#endif
|
|
|
|
if(NumberOfDots == M_DEFAULT || NumberOfDots > (MIL_INT)PosXArrayPtr.size())
|
|
{
|
|
NumberOfDots = (MIL_INT)PosXArrayPtr.size();
|
|
}
|
|
|
|
MgraDots(ContextGraId,
|
|
DstImageBufOrListGraId,
|
|
NumberOfDots,
|
|
&PosXArrayPtr[0],
|
|
&PosYArrayPtr[0],
|
|
ControlFlag);
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MgraLines.
|
|
template <typename UserType>
|
|
inline void MgraLines(MIL_ID ContextGraId,
|
|
MIL_ID DstImageBufOrListGraId,
|
|
MIL_INT NumberOfLinesOrVertices,
|
|
const std::vector<UserType> &XPtr,
|
|
const std::vector<UserType> &YPtr,
|
|
CMilArrayParamIn X2Ptr,
|
|
CMilArrayParamIn Y2Ptr,
|
|
MIL_INT64 ControlFlag)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(!X2Ptr.IsValidParam() || !Y2Ptr.IsValidParam())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraLines"), MIL_TEXT("X2Ptr or Y2Ptr cannot be an non zero integer!"));
|
|
}
|
|
if(XPtr.size() != YPtr.size() ||
|
|
((MIL_INT)XPtr.size() != X2Ptr.Size<UserType>() && !X2Ptr.IsNullPtr()) ||
|
|
((MIL_INT)XPtr.size() != Y2Ptr.Size<UserType>() && !Y2Ptr.IsNullPtr()) ||
|
|
((MIL_INT)YPtr.size() != X2Ptr.Size<UserType>() && !X2Ptr.IsNullPtr()) ||
|
|
((MIL_INT)YPtr.size() != Y2Ptr.Size<UserType>() && !Y2Ptr.IsNullPtr()) ||
|
|
(X2Ptr.Size<UserType>() != Y2Ptr.Size<UserType>() && !X2Ptr.IsNullPtr() && !Y2Ptr.IsNullPtr()))
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraLines"), MIL_TEXT("The input vectors must have the same size!"));
|
|
}
|
|
if(XPtr.empty())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraLines"), MIL_TEXT("The input vectors cannot be empty."));
|
|
}
|
|
if(NumberOfLinesOrVertices <= 0)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraLines"), MIL_TEXT("NumberOfLinesOrVertices parameter must be greater than zero."));
|
|
}
|
|
if((!X2Ptr.IsNullPtr() && X2Ptr.GetMilDataType() != MilTraits<UserType>::TypeFlag) ||
|
|
(!Y2Ptr.IsNullPtr() && Y2Ptr.GetMilDataType() != MilTraits<UserType>::TypeFlag))
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraLines"), MIL_TEXT("The data type of X2Ptr or Y2Ptr must be the same as XPtr or YPtr."));
|
|
}
|
|
if(NumberOfLinesOrVertices > (MIL_INT)XPtr.size() && NumberOfLinesOrVertices != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraLines"), MIL_TEXT("NumberOfLinesOrVertices parameter must be smaller or equal (M_DEFAULT) to the size of input vectors."));
|
|
}
|
|
#endif
|
|
|
|
if(NumberOfLinesOrVertices == M_DEFAULT || NumberOfLinesOrVertices > (MIL_INT)XPtr.size())
|
|
{
|
|
NumberOfLinesOrVertices = (MIL_INT)XPtr.size();
|
|
}
|
|
|
|
MgraLines(ContextGraId,
|
|
DstImageBufOrListGraId,
|
|
NumberOfLinesOrVertices,
|
|
&XPtr[0],
|
|
&YPtr[0],
|
|
X2Ptr.GetData<UserType>(),
|
|
Y2Ptr.GetData<UserType>(),
|
|
ControlFlag);
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MgraVectors.
|
|
template <typename UserType>
|
|
inline void MFTYPE MgraVectors(MIL_ID ContextGraId,
|
|
MIL_ID DstImageBufOrListGraId,
|
|
MIL_INT NumVectors,
|
|
const std::vector<UserType>& XArrayPtr,
|
|
const std::vector<UserType>& YArrayPtr,
|
|
const std::vector<UserType>& UArrayPtr,
|
|
const std::vector<UserType>& VArrayPtr,
|
|
MIL_INT64 ScaleMode,
|
|
MIL_DOUBLE ScaleValue,
|
|
MIL_INT64 ControlFlag)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(NumVectors <= 0)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraVectors"), MIL_TEXT("NumVectors parameter must be greater than zero."));
|
|
}
|
|
if(XArrayPtr.empty())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraVectors"), MIL_TEXT("The input vectors cannot be empty."));
|
|
}
|
|
if(XArrayPtr.size() != YArrayPtr.size() ||
|
|
XArrayPtr.size() != UArrayPtr.size() ||
|
|
XArrayPtr.size() != VArrayPtr.size() ||
|
|
YArrayPtr.size() != UArrayPtr.size() ||
|
|
YArrayPtr.size() != VArrayPtr.size() ||
|
|
UArrayPtr.size() != VArrayPtr.size())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraVectors"), MIL_TEXT("The input vectors must have the same size."));
|
|
}
|
|
if(NumVectors > (MIL_INT)XArrayPtr.size() && NumVectors != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MgraVectors"), MIL_TEXT("NumVectors parameter must be smaller or equal (M_DEFAULT) to the size of input vectors."));
|
|
}
|
|
#endif
|
|
|
|
if(NumVectors == M_DEFAULT || NumVectors > (MIL_INT)XArrayPtr.size())
|
|
{
|
|
NumVectors = (MIL_INT)XArrayPtr.size();
|
|
}
|
|
|
|
MgraVectors(ContextGraId,
|
|
DstImageBufOrListGraId,
|
|
NumVectors,
|
|
&XArrayPtr[0],
|
|
&YArrayPtr[0],
|
|
&UArrayPtr[0],
|
|
&VArrayPtr[0],
|
|
ScaleMode,
|
|
ScaleValue,
|
|
ControlFlag);
|
|
}
|
|
|
|
#if !M_MIL_USE_LINUX || M_MIL_USE_64BIT|| M_COMPILING_MILDLL
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MseqDefine.
|
|
inline void MFTYPE MseqDefine(MIL_ID ContextSeqId,
|
|
MIL_INT SequenceIndex,
|
|
MIL_INT64 SequenceType,
|
|
const std::vector<MIL_ID>& Param1Ptr,
|
|
MIL_DOUBLE Param2)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(Param2 <= 0)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MseqDefine"), MIL_TEXT("Param2 parameter must be greater than zero."));
|
|
}
|
|
if(Param1Ptr.empty())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MseqDefine"), MIL_TEXT("The input vector cannot be empty."));
|
|
}
|
|
if(SequenceType != M_BUFFER_LIST)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MseqDefine"), MIL_TEXT("Invalid SequenceType with the std::vector overload."));
|
|
}
|
|
if(Param2 > (MIL_INT)Param1Ptr.size() && Param2 != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MseqDefine"), MIL_TEXT("Param2 parameter must be smaller or equal (M_DEFAULT) to the size of input vector."));
|
|
}
|
|
#endif
|
|
|
|
if(Param2 == M_DEFAULT || Param2 > (MIL_DOUBLE)Param1Ptr.size())
|
|
{
|
|
Param2 = (MIL_DOUBLE)Param1Ptr.size();
|
|
}
|
|
|
|
MseqDefine(ContextSeqId,
|
|
SequenceIndex,
|
|
SequenceType,
|
|
&Param1Ptr[0],
|
|
Param2);
|
|
}
|
|
#endif
|
|
|
|
//Overload for MbufGet to support vector inquire type
|
|
template <typename UserType>
|
|
inline void MFTYPE MbufGet(MIL_ID SrcBufId, std::vector<UserType> &UserArrayPtr)
|
|
{
|
|
MIL_INT InternalBufSizeX = 0;
|
|
MIL_INT InternalBufSizeY = 0;
|
|
MIL_INT InternalSizeBand = 0;
|
|
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_SIZE_X, &InternalBufSizeX);
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_SIZE_Y, &InternalBufSizeY);
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_SIZE_BAND, &InternalSizeBand);
|
|
|
|
MIL_INT InternalNbElementRequired = (InternalBufSizeX*InternalBufSizeY);
|
|
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
InternalNbElementRequired *= InternalSizeBand;
|
|
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGet"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGet"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
#endif
|
|
|
|
UserArrayPtr.resize(InternalNbElementRequired);
|
|
|
|
//ensure that SizeByteRequired > 0 to avoid crash in case one of the MbufInquire returns an invalid data.
|
|
if(InternalNbElementRequired > 0)
|
|
{
|
|
MbufGet(SrcBufId, &UserArrayPtr[0]);
|
|
}
|
|
}
|
|
|
|
//Overload for MbufImportSequence to support vector
|
|
inline void MFTYPE MbufImportSequence(MIL_CONST_TEXT_PTR FileName, MIL_INT64 FileFormat, MIL_INT64 Operation, MIL_ID SystemId, std::vector<MIL_ID> &BufArrayPtr, MIL_INT StartImage, MIL_INT NumberOfImages, MIL_INT64 ControlFlag)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(NumberOfImages <= 0)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufImportSequence"), MIL_TEXT("NumberOfImages must be greater than zero."));
|
|
}
|
|
if(NumberOfImages > (MIL_INT64)BufArrayPtr.size() && NumberOfImages != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufImportSequence"), MIL_TEXT("NumberOfImages parameter must be smaller or equal (M_DEFAULT) to the size of input vector."));
|
|
}
|
|
#endif
|
|
|
|
if(NumberOfImages == M_DEFAULT || NumberOfImages > (MIL_INT64)BufArrayPtr.size())
|
|
{
|
|
NumberOfImages = (MIL_INT64)BufArrayPtr.size();
|
|
}
|
|
|
|
BufArrayPtr.resize(NumberOfImages);
|
|
|
|
if(NumberOfImages > 0)
|
|
{
|
|
MbufImportSequence(FileName, FileFormat, Operation, SystemId, &BufArrayPtr[0], StartImage, NumberOfImages, ControlFlag);
|
|
}
|
|
}
|
|
|
|
//MIL_STRING and vector Overload for MbufImportSequence to support vector
|
|
#if M_MIL_USE_STRING
|
|
inline void MFTYPE MbufImportSequence(const MIL_STRING &FileName, MIL_INT64 FileFormat, MIL_INT64 Operation, MIL_ID SystemId, std::vector<MIL_ID> &BufArrayPtr, MIL_INT StartImage, MIL_INT NumberOfImages, MIL_INT64 ControlFlag)
|
|
{
|
|
MbufImportSequence(FileName.c_str(), FileFormat, Operation, SystemId, BufArrayPtr, StartImage, NumberOfImages, ControlFlag);
|
|
}
|
|
#endif
|
|
|
|
//Overload for MbufExportSequence to support vector
|
|
inline void MFTYPE MbufExportSequence(MIL_CONST_TEXT_PTR FileName, MIL_INT64 FileFormat, const std::vector<MIL_ID> &BufArrayPtrOrSystemIdPtr, MIL_INT NumOfIds, MIL_DOUBLE FrameRate, MIL_INT64 ControlFlag)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(NumOfIds <= 0)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufExportSequence"), MIL_TEXT("NumOfIds must be greater than zero."));
|
|
}
|
|
if(NumOfIds > (MIL_INT64)BufArrayPtrOrSystemIdPtr.size() && NumOfIds != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufExportSequence"), MIL_TEXT("NumOfIds parameter must be smaller or equal (M_DEFAULT) to the size of input vector."));
|
|
}
|
|
#endif
|
|
|
|
if(NumOfIds == M_DEFAULT || NumOfIds > (MIL_INT64)BufArrayPtrOrSystemIdPtr.size())
|
|
{
|
|
NumOfIds = (MIL_INT64)BufArrayPtrOrSystemIdPtr.size();
|
|
}
|
|
|
|
if(NumOfIds > 0)
|
|
{
|
|
MbufExportSequence(FileName, FileFormat, &BufArrayPtrOrSystemIdPtr[0], NumOfIds, FrameRate, ControlFlag);
|
|
}
|
|
}
|
|
|
|
//MIL_STRING and vector Overload for MbufExportSequence to support vector
|
|
#if M_MIL_USE_STRING
|
|
inline void MFTYPE MbufExportSequence(const MIL_STRING &FileName, MIL_INT64 FileFormat, const std::vector<MIL_ID> &BufArrayPtrOrSystemIdPtr, MIL_INT NumOfIds, MIL_DOUBLE FrameRate, MIL_INT64 ControlFlag)
|
|
{
|
|
MbufExportSequence(FileName.c_str(), FileFormat, BufArrayPtrOrSystemIdPtr, NumOfIds, FrameRate, ControlFlag);
|
|
}
|
|
#endif
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufGet1d.
|
|
template <typename UserType>
|
|
inline void MFTYPE MbufGet1d(MIL_ID SrcBufId, MIL_INT OffX, MIL_INT SizeX, std::vector<UserType> &UserArrayPtr)
|
|
{
|
|
MIL_INT InternalSizeBand = 0;
|
|
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_SIZE_BAND, &InternalSizeBand);
|
|
|
|
MIL_INT InternalNbElementRequired = SizeX;
|
|
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
InternalNbElementRequired *= InternalSizeBand;
|
|
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGet1d"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGet1d"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
#endif
|
|
|
|
UserArrayPtr.resize(InternalNbElementRequired);
|
|
|
|
//ensure that SizeByteRequired > 0 to avoid crash in case one of the MbufInquire returns an invalid data.
|
|
// In case if SizeX = 0, call the original function which will pop an MIL error.
|
|
if(InternalNbElementRequired > 0 || SizeX == 0)
|
|
{
|
|
MbufGet1d(SrcBufId, OffX, SizeX, &UserArrayPtr[0]);
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufGet2d.
|
|
template <typename UserType>
|
|
inline void MFTYPE MbufGet2d(MIL_ID SrcBufId, MIL_INT OffX, MIL_INT OffY, MIL_INT SizeX, MIL_INT SizeY, std::vector<UserType> &UserArrayPtr)
|
|
{
|
|
MIL_INT InternalSizeBand = 0;
|
|
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_SIZE_BAND, &InternalSizeBand);
|
|
|
|
MIL_INT InternalNbElementRequired = (SizeX*SizeY);
|
|
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
InternalNbElementRequired *= InternalSizeBand;
|
|
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGet2d"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGet2d"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
#endif
|
|
|
|
UserArrayPtr.resize(InternalNbElementRequired);
|
|
|
|
//ensure that InternalNbElementRequired > 0 to avoid crash in case one of the MbufInquire returns an invalid data.
|
|
// In case if SizeX or SizeY = 0, call the original function which will pop an MIL error.
|
|
if(InternalNbElementRequired > 0 || SizeX == 0 || SizeY == 0)
|
|
{
|
|
MbufGet2d(SrcBufId, OffX, OffY, SizeX, SizeY, &UserArrayPtr[0]);
|
|
}
|
|
}
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufGetArc.
|
|
template <typename UserType>
|
|
inline MIL_INT MFTYPE MbufGetArc(MIL_ID ImageBufId,
|
|
MIL_INT XCenter,
|
|
MIL_INT YCenter,
|
|
MIL_INT XRad,
|
|
MIL_INT YRad,
|
|
MIL_DOUBLE StartAngle,
|
|
MIL_DOUBLE EndAngle,
|
|
MIL_INT64 Mode,
|
|
MIL_INT *NbPixelsPtr,
|
|
std::vector<UserType> &ValueArrayPtr,
|
|
CMilArrayParamOut PosXArrayPtr,
|
|
CMilArrayParamOut PosYArrayPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(!PosXArrayPtr.IsValidParam() || !PosYArrayPtr.IsValidParam())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetArc"), MIL_TEXT("PosXArrayPtr and PosYArrayPtr cannot be an non zero integer."));
|
|
}
|
|
if(!PosXArrayPtr.IsNullPtr() && PosXArrayPtr.GetMilDataType() != MilTraits<MIL_INT>::TypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetArc"), MIL_TEXT("The data type of PosXArrayPtr must be MIL_INT."));
|
|
}
|
|
if(!PosYArrayPtr.IsNullPtr() && PosYArrayPtr.GetMilDataType() != MilTraits<MIL_INT>::TypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetArc"), MIL_TEXT("The data type of PosYArrayPtr must be MIL_INT."));
|
|
}
|
|
#endif
|
|
|
|
MIL_INT InternalNbElementRequired = 0;
|
|
MIL_INT InternalNbValueRequired= 0;
|
|
|
|
MbufGetArc(ImageBufId, XCenter, YCenter, XRad, YRad, StartAngle, EndAngle, Mode, &InternalNbElementRequired, M_NULL, M_NULL, M_NULL);
|
|
|
|
if(InternalNbElementRequired == 0)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
InternalNbValueRequired = InternalNbElementRequired;
|
|
|
|
MIL_INT InternalBufferType = 0;
|
|
MbufInquire(ImageBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbValueRequired += 7;
|
|
InternalNbValueRequired /= 8;
|
|
}
|
|
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetArc"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetArc"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
#endif
|
|
|
|
ValueArrayPtr.resize(InternalNbValueRequired);
|
|
PosXArrayPtr.Resize<MIL_INT>(InternalNbElementRequired);
|
|
PosYArrayPtr.Resize<MIL_INT>(InternalNbElementRequired);
|
|
|
|
//ensure that InternalNbElementRequired > 0 to avoid crash in case one of the MbufInquire returns an invalid data.
|
|
if(InternalNbElementRequired > 0)
|
|
{
|
|
MbufGetArc(ImageBufId,
|
|
XCenter,
|
|
YCenter,
|
|
XRad,
|
|
YRad,
|
|
StartAngle,
|
|
EndAngle,
|
|
Mode,
|
|
NbPixelsPtr,
|
|
&ValueArrayPtr[0],
|
|
PosXArrayPtr.GetData<MIL_INT>(),
|
|
PosYArrayPtr.GetData<MIL_INT>());
|
|
}
|
|
|
|
return InternalNbElementRequired;
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufGetColor.
|
|
template <typename UserType>
|
|
inline void MFTYPE MbufGetColor(MIL_ID SrcBufId, MIL_INT64 DataFormat, MIL_INT Band, std::vector<UserType> &UserArrayPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
switch(DataFormat)
|
|
{
|
|
case M_PACKED + M_RGB15:
|
|
case M_PACKED + M_RGB16:
|
|
case M_PACKED + M_BGR24:
|
|
case M_PACKED + M_RGB24:
|
|
case M_PACKED + M_BGR32:
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetColor"), MIL_TEXT("When the data format is M_PACKED, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
#endif
|
|
|
|
MIL_INT InternalBufSizeX = 0;
|
|
MIL_INT InternalBufSizeY = 0;
|
|
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_SIZE_X, &InternalBufSizeX);
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_SIZE_Y, &InternalBufSizeY);
|
|
|
|
MIL_INT InternalNbElementRequired = (InternalBufSizeX*InternalBufSizeY);
|
|
|
|
switch(DataFormat)
|
|
{
|
|
case M_PACKED + M_RGB15:
|
|
case M_PACKED + M_RGB16:
|
|
{
|
|
InternalNbElementRequired *= 2;
|
|
}
|
|
break;
|
|
case M_PACKED + M_BGR24:
|
|
case M_PACKED + M_RGB24:
|
|
{
|
|
InternalNbElementRequired *= 3;
|
|
}
|
|
break;
|
|
case M_PACKED + M_BGR32:
|
|
{
|
|
InternalNbElementRequired *= 4;
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetColor"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetColor"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
#endif
|
|
|
|
MIL_INT InternalSizeBand = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_SIZE_BAND, &InternalSizeBand);
|
|
InternalSizeBand = (Band == M_ALL_BANDS) ? InternalSizeBand : 1;
|
|
|
|
InternalNbElementRequired *= InternalSizeBand;
|
|
}
|
|
break;
|
|
}
|
|
|
|
UserArrayPtr.resize(InternalNbElementRequired);
|
|
|
|
//ensure that InternalNbElementRequired > 0 to avoid crash in case one of the MbufInquire returns an invalid data.
|
|
if(InternalNbElementRequired > 0)
|
|
{
|
|
MbufGetColor(SrcBufId, DataFormat, Band, &UserArrayPtr[0]);
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufGetColor2d.
|
|
template <typename UserType>
|
|
inline void MFTYPE MbufGetColor2d(MIL_ID SrcBufId, MIL_INT64 DataFormat, MIL_INT Band, MIL_INT OffX, MIL_INT OffY, MIL_INT SizeX, MIL_INT SizeY, std::vector<UserType> &UserArrayPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
switch(DataFormat)
|
|
{
|
|
case M_PACKED + M_RGB15:
|
|
case M_PACKED + M_RGB16:
|
|
case M_PACKED + M_BGR24:
|
|
case M_PACKED + M_RGB24:
|
|
case M_PACKED + M_BGR32:
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetColor2d"), MIL_TEXT("When the data format is M_PACKED, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
#endif
|
|
|
|
MIL_INT InternalNbElementRequired = (SizeX*SizeY);
|
|
|
|
switch(DataFormat)
|
|
{
|
|
case M_PACKED + M_RGB15:
|
|
case M_PACKED + M_RGB16:
|
|
{
|
|
InternalNbElementRequired *= 2;
|
|
}
|
|
break;
|
|
case M_PACKED + M_BGR24:
|
|
case M_PACKED + M_RGB24:
|
|
{
|
|
InternalNbElementRequired *= 3;
|
|
}
|
|
break;
|
|
case M_PACKED + M_BGR32:
|
|
{
|
|
InternalNbElementRequired *= 4;
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetColor2d"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetColor2d"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
#endif
|
|
|
|
MIL_INT InternalSizeBand = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_SIZE_BAND, &InternalSizeBand);
|
|
InternalSizeBand = (Band == M_ALL_BANDS) ? InternalSizeBand : 1;
|
|
|
|
InternalNbElementRequired *= InternalSizeBand;
|
|
}
|
|
break;
|
|
}
|
|
|
|
UserArrayPtr.resize(InternalNbElementRequired);
|
|
|
|
//ensure that InternalNbElementRequired > 0 to avoid crash in case one of the MbufInquire returns an invalid data.
|
|
// In case if SizeX or SizeY = 0, call the original function which will pop an MIL error.
|
|
if(InternalNbElementRequired > 0 || SizeX == 0 || SizeY == 0)
|
|
{
|
|
MbufGetColor2d(SrcBufId, DataFormat, Band, OffX, OffY, SizeX, SizeY, &UserArrayPtr[0]);
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufGetLine.
|
|
template <typename UserType>
|
|
inline void MFTYPE MbufGetLine(MIL_ID ImageBufId, MIL_INT StartX, MIL_INT StartY, MIL_INT EndX, MIL_INT EndY, MIL_INT64 Mode, MIL_INT *NbPixelsPtr, std::vector<UserType> &UserArrayPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(Mode != M_DEFAULT && MilTraits<UserType>::TypeFlag != MilTraits<MIL_INT>::TypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetLine"), MIL_TEXT("When Mode is not M_DEFAULT, the data type of UserArrayPtr must be MIL_INT."));
|
|
}
|
|
#endif
|
|
|
|
MIL_INT InternalNbElementRequired = 0;
|
|
MbufGetLine(ImageBufId, StartX, StartY, EndX, EndY, Mode, &InternalNbElementRequired, NULL);
|
|
|
|
if(Mode == M_DEFAULT)
|
|
{
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(ImageBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetLine"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetLine"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|
|
UserArrayPtr.resize(InternalNbElementRequired);
|
|
|
|
//ensure that InternalNbElementRequired > 0 to avoid crash in case one of the MbufInquire returns an invalid data.
|
|
if(InternalNbElementRequired > 0)
|
|
{
|
|
MbufGetLine(ImageBufId, StartX, StartY, EndX, EndY, Mode, NbPixelsPtr, &UserArrayPtr[0]);
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufGetList.
|
|
template<typename PosType, typename ValType>
|
|
inline void MFTYPE MbufGetList(MIL_ID SrcBufId,
|
|
MIL_INT NumPixels,
|
|
const std::vector<PosType>& PixXArrayPtr,
|
|
const std::vector<PosType>& PixYArrayPtr,
|
|
MIL_INT64 InterpolationMode,
|
|
std::vector<ValType> &UserArrayPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(PixXArrayPtr.empty())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetList"), MIL_TEXT("The input vectors cannot be empty."));
|
|
}
|
|
if(PixXArrayPtr.size() != PixYArrayPtr.size())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetList"), MIL_TEXT("The input vectors must have the same size."));
|
|
}
|
|
if(NumPixels > (MIL_INT)PixXArrayPtr.size() && NumPixels != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetList"), MIL_TEXT("NumPixels parameter must be smaller or equal (M_DEFAULT) to the size of input vectors."));
|
|
}
|
|
#endif
|
|
|
|
if(NumPixels == M_DEFAULT || NumPixels > (MIL_INT)PixXArrayPtr.size())
|
|
{
|
|
NumPixels = (MIL_INT)PixXArrayPtr.size();
|
|
}
|
|
|
|
MIL_INT InternalSizeBand = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_SIZE_BAND, &InternalSizeBand);
|
|
|
|
MIL_INT InternalNbElementRequired = NumPixels;
|
|
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(SrcBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
InternalNbElementRequired *= InternalSizeBand;
|
|
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<ValType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetList"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<ValType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufGetList"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
#endif
|
|
|
|
UserArrayPtr.resize(InternalNbElementRequired);
|
|
|
|
//ensure that InternalNbElementRequired > 0 to avoid crash in case one of the MbufInquire returns an invalid data.
|
|
// In case if NumPixels = 0, call the original function which will pop an MIL error.
|
|
if(InternalNbElementRequired > 0 || NumPixels == 0)
|
|
{
|
|
MbufGetList(SrcBufId, NumPixels, &PixXArrayPtr[0], &PixYArrayPtr[0], InterpolationMode, &UserArrayPtr[0]);
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufPut.
|
|
template<typename UserType>
|
|
inline void MFTYPE MbufPut(MIL_ID DestBufId, const std::vector<UserType>& UserArrayPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT InternalBufSizeX = 0;
|
|
MIL_INT InternalBufSizeY = 0;
|
|
MIL_INT InternalSizeBand = 0;
|
|
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_SIZE_X, &InternalBufSizeX);
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_SIZE_Y, &InternalBufSizeY);
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_SIZE_BAND, &InternalSizeBand);
|
|
|
|
MIL_INT InternalNbElementRequired = (InternalBufSizeX*InternalBufSizeY);
|
|
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
InternalNbElementRequired *= InternalSizeBand;
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPut"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPut"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
if((MIL_INT)UserArrayPtr.size() < InternalNbElementRequired)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPut"), MIL_TEXT("Vector size is not big enough for the required size."));
|
|
}
|
|
#endif
|
|
|
|
MbufPut(DestBufId, &UserArrayPtr[0]);
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufPut1d.
|
|
template<typename UserType>
|
|
inline void MFTYPE MbufPut1d(MIL_ID DestBufId, MIL_INT OffX, MIL_INT SizeX, const std::vector<UserType>& UserArrayPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT InternalSizeBand = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_SIZE_BAND, &InternalSizeBand);
|
|
|
|
MIL_INT InternalNbElementRequired = SizeX;
|
|
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
InternalNbElementRequired *= InternalSizeBand;
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPut1d"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPut1d"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
|
|
if((MIL_INT)UserArrayPtr.size() < InternalNbElementRequired)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPut1d"), MIL_TEXT("Vector size is not big enough for the required size."));
|
|
}
|
|
#endif
|
|
|
|
MbufPut1d(DestBufId, OffX, SizeX, &UserArrayPtr[0]);
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufPut2d
|
|
template<typename UserType>
|
|
inline void MFTYPE MbufPut2d(MIL_ID DestBufId, MIL_INT OffX, MIL_INT OffY, MIL_INT SizeX, MIL_INT SizeY, const std::vector<UserType>& UserArrayPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT InternalSizeBand = 0;
|
|
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_SIZE_BAND, &InternalSizeBand);
|
|
|
|
MIL_INT InternalNbElementRequired = (SizeX*SizeY);
|
|
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
InternalNbElementRequired *= InternalSizeBand;
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPut2d"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPut2d"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
|
|
if((MIL_INT)UserArrayPtr.size() < InternalNbElementRequired)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPut2d"), MIL_TEXT("Vector size is not big enough for the required size."));
|
|
}
|
|
#endif
|
|
|
|
MbufPut2d(DestBufId, OffX, OffY, SizeX, SizeY, &UserArrayPtr[0]);
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufPutColor
|
|
template<typename UserType>
|
|
inline void MFTYPE MbufPutColor(MIL_ID DestBufId, MIL_INT64 DataFormat, MIL_INT Band, const std::vector<UserType>& UserArrayPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
switch(DataFormat)
|
|
{
|
|
case M_PACKED + M_RGB15:
|
|
case M_PACKED + M_RGB16:
|
|
case M_PACKED + M_BGR24:
|
|
case M_PACKED + M_RGB24:
|
|
case M_PACKED + M_BGR32:
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutColor"), MIL_TEXT("When the data format is M_PACKED, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
MIL_INT InternalBufSizeX = 0;
|
|
MIL_INT InternalBufSizeY = 0;
|
|
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_SIZE_X, &InternalBufSizeX);
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_SIZE_Y, &InternalBufSizeY);
|
|
|
|
MIL_INT InternalNbElementRequired = (InternalBufSizeX*InternalBufSizeY);
|
|
|
|
switch(DataFormat)
|
|
{
|
|
case M_PACKED + M_RGB15:
|
|
case M_PACKED + M_RGB16:
|
|
{
|
|
InternalNbElementRequired *= 2;
|
|
}
|
|
break;
|
|
case M_PACKED + M_BGR24:
|
|
case M_PACKED + M_RGB24:
|
|
{
|
|
InternalNbElementRequired *= 3;
|
|
}
|
|
break;
|
|
case M_PACKED + M_BGR32:
|
|
{
|
|
InternalNbElementRequired *= 4;
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutColor"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutColor"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
|
|
MIL_INT InternalSizeBand = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_SIZE_BAND, &InternalSizeBand);
|
|
InternalSizeBand = (Band == M_ALL_BANDS) ? InternalSizeBand : 1;
|
|
|
|
InternalNbElementRequired *= InternalSizeBand;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if((MIL_INT)UserArrayPtr.size() < InternalNbElementRequired)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutColor"), MIL_TEXT("Vector size is not big enough for the required size."));
|
|
}
|
|
#endif
|
|
|
|
MbufPutColor(DestBufId, DataFormat, Band, &UserArrayPtr[0]);
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufPutColor2d
|
|
template<typename UserType>
|
|
inline void MFTYPE MbufPutColor2d(MIL_ID DestBufId, MIL_INT64 DataFormat, MIL_INT Band, MIL_INT OffX, MIL_INT OffY, MIL_INT SizeX, MIL_INT SizeY, const std::vector<UserType>& UserArrayPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
switch(DataFormat)
|
|
{
|
|
case M_PACKED + M_RGB15:
|
|
case M_PACKED + M_RGB16:
|
|
case M_PACKED + M_BGR24:
|
|
case M_PACKED + M_RGB24:
|
|
case M_PACKED + M_BGR32:
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutColor2d"), MIL_TEXT("When the data format is M_PACKED, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
MIL_INT InternalNbElementRequired = (SizeX*SizeY);
|
|
|
|
switch(DataFormat)
|
|
{
|
|
case M_PACKED + M_RGB15:
|
|
case M_PACKED + M_RGB16:
|
|
{
|
|
InternalNbElementRequired *= 2;
|
|
}
|
|
break;
|
|
case M_PACKED + M_BGR24:
|
|
case M_PACKED + M_RGB24:
|
|
{
|
|
InternalNbElementRequired *= 3;
|
|
}
|
|
break;
|
|
case M_PACKED + M_BGR32:
|
|
{
|
|
InternalNbElementRequired *= 4;
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutColor2d"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutColor2d"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
|
|
MIL_INT InternalSizeBand = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_SIZE_BAND, &InternalSizeBand);
|
|
InternalSizeBand = (Band == M_ALL_BANDS) ? InternalSizeBand : 1;
|
|
|
|
InternalNbElementRequired *= InternalSizeBand;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if((MIL_INT)UserArrayPtr.size() < InternalNbElementRequired)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutColor2d"), MIL_TEXT("Vector size is not big enough for the required size."));
|
|
}
|
|
#endif
|
|
|
|
MbufPutColor2d(DestBufId, DataFormat, Band, OffX, OffY, SizeX, SizeY, &UserArrayPtr[0]);
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector MbufPutLine
|
|
template<typename UserType>
|
|
inline void MFTYPE MbufPutLine(MIL_ID ImageBufId, MIL_INT StartX, MIL_INT StartY, MIL_INT EndX, MIL_INT EndY, MIL_INT64 Mode, MIL_INT *NbPixelsPtr, const std::vector<UserType>& UserArrayPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT InternalNbElementRequired = 0;
|
|
MbufPutLine(ImageBufId, StartX, StartY, EndX, EndY, Mode, &InternalNbElementRequired, NULL);
|
|
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(ImageBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<UserType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutLine"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<UserType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutLine"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
|
|
if((MIL_INT)UserArrayPtr.size() < InternalNbElementRequired)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutLine"), MIL_TEXT("Vector size is not big enough for the required size."));
|
|
}
|
|
#endif
|
|
|
|
MbufPutLine(ImageBufId, StartX, StartY, EndX, EndY, Mode, NbPixelsPtr, &UserArrayPtr[0]);
|
|
}
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufPutList.
|
|
template<typename PosType, typename ValType>
|
|
inline void MFTYPE MbufPutList(MIL_ID DestBufId,
|
|
MIL_INT NumPixels,
|
|
const std::vector<PosType>& PixXArrayPtr,
|
|
const std::vector<PosType>& PixYArrayPtr,
|
|
MIL_INT64 OverscanMode,
|
|
const std::vector<ValType>& UserArrayPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(PixXArrayPtr.empty())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutList"), MIL_TEXT("The input vectors cannot be empty."));
|
|
}
|
|
if(PixXArrayPtr.size() != PixYArrayPtr.size())
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutList"), MIL_TEXT("The input vectors must have the same size."));
|
|
}
|
|
if(NumPixels > (MIL_INT)PixXArrayPtr.size() && NumPixels != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutList"), MIL_TEXT("NumPixels parameter must be smaller or equal (M_DEFAULT) to the size of input vectors."));
|
|
}
|
|
#endif
|
|
|
|
if(NumPixels == M_DEFAULT || NumPixels > (MIL_INT)PixXArrayPtr.size())
|
|
{
|
|
NumPixels = (MIL_INT)PixXArrayPtr.size();
|
|
}
|
|
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT InternalSizeBand = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_SIZE_BAND, &InternalSizeBand);
|
|
|
|
MIL_INT InternalNbElementRequired = NumPixels;
|
|
|
|
MIL_INT InternalBufferType = 0;
|
|
RUN_BUFINQUIRE_RETURNIFFAIL(DestBufId, M_TYPE, &InternalBufferType);
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
InternalNbElementRequired += 7;
|
|
InternalNbElementRequired /= 8;
|
|
}
|
|
|
|
InternalNbElementRequired *= InternalSizeBand;
|
|
|
|
if(InternalBufferType == 1)
|
|
{
|
|
bool InternalBufferTypeNotEqual = MilTraits<ValType>::BufferTypeFlag != MilTraits<MIL_UINT8>::BufferTypeFlag;
|
|
if(InternalBufferTypeNotEqual)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutList"), MIL_TEXT("When the buffer type of the image is 1, the data type of UserArrayPtr must be MIL_UINT8."));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(InternalBufferType != MilTraits<ValType>::BufferTypeFlag)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutList"), MIL_TEXT("Vector data type does not match the buffer data type. Please try again with the right data type."));
|
|
}
|
|
}
|
|
|
|
if((MIL_INT)UserArrayPtr.size() < InternalNbElementRequired)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufPutList"), MIL_TEXT("Vector size is not big enough for the required size."));
|
|
}
|
|
#endif
|
|
|
|
MbufPutList(DestBufId, NumPixels, &PixXArrayPtr[0], &PixYArrayPtr[0], OverscanMode, &UserArrayPtr[0]);
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MobjMessageWrite.
|
|
inline void MFTYPE MobjMessageWrite(MIL_ID MessageId, const std::vector<MIL_UINT8>& MessagePtr, MIL_INT64 MessageSize, MIL_INT64 MessageTag, MIL_INT64 OperationFlag)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(MessageSize <= 0)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MobjMessageWrite"), MIL_TEXT("MessageSize must be greater than zero."));
|
|
}
|
|
if(MessageSize > (MIL_INT64)MessagePtr.size() && MessageSize != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MobjMessageWrite"), MIL_TEXT("MessageSize parameter must be smaller or equal (M_DEFAULT) to the size of input vector."));
|
|
}
|
|
#endif
|
|
|
|
if(MessageSize == M_DEFAULT || MessageSize > (MIL_INT64)MessagePtr.size())
|
|
{
|
|
MessageSize = (MIL_INT64)MessagePtr.size();
|
|
}
|
|
|
|
MobjMessageWrite(MessageId, &MessagePtr[0], MessageSize, MessageTag, OperationFlag);
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MobjMessageRead.
|
|
inline MIL_INT64 MFTYPE MobjMessageRead(MIL_ID MessageId, std::vector<MIL_UINT8> &MessagePtr, MIL_INT64 MessageInSize, MIL_INT64 *MessageOutSizePtr, MIL_INT64 *MessageTagPtr, MIL_INT64 *StatusPtr, MIL_INT64 OperationFlag)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(MessageInSize <= 0)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MobjMessageRead"), MIL_TEXT("MessageInSize must be greater than zero."));
|
|
}
|
|
#endif
|
|
|
|
if(MessageInSize == M_DEFAULT)
|
|
{
|
|
MessageInSize = 0;
|
|
MessageInSize = MobjMessageRead(MessageId, M_NULL, M_NULL, M_NULL, M_NULL, StatusPtr, OperationFlag);
|
|
}
|
|
|
|
MessagePtr.resize((MIL_INT)MessageInSize);
|
|
|
|
if(MessageInSize > 0)
|
|
{
|
|
MIL_INT64 InternalNeededSizeForStdVector = MobjMessageRead(MessageId, &MessagePtr[0], MessageInSize, MessageOutSizePtr, MessageTagPtr, StatusPtr, OperationFlag);
|
|
|
|
if(InternalNeededSizeForStdVector < MessageInSize)
|
|
{
|
|
MessagePtr.resize((MIL_INT)InternalNeededSizeForStdVector);
|
|
}
|
|
return InternalNeededSizeForStdVector;
|
|
}
|
|
return 0;
|
|
}
|
|
//Overloads for std::overload MthrWaitMultiple
|
|
inline MIL_INT MthrWaitMultiple(const std::vector<MIL_ID> &EventArrayIdPtr, MIL_INT EventArraySize, MIL_INT64 WaitOption, MIL_INT *StatePtr)
|
|
{
|
|
MIL_INT RetVal = 0;
|
|
|
|
if(EventArraySize == M_DEFAULT || EventArraySize > (MIL_INT64)EventArrayIdPtr.size())
|
|
{
|
|
EventArraySize = (MIL_INT64)EventArrayIdPtr.size();
|
|
}
|
|
|
|
RetVal = MthrWaitMultiple(&EventArrayIdPtr[0], EventArraySize, WaitOption, StatePtr);
|
|
|
|
return RetVal;
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MthrInquireMp.
|
|
inline MIL_INT MFTYPE MthrInquireMp(MIL_ID ThrId, MIL_INT64 InquireType, MIL_INT64 TypeFlag, MIL_INT64 TypeValue, std::vector<MIL_UINT64> &ResultPtr)
|
|
{
|
|
MIL_INT RetVal = 0;
|
|
|
|
if(InquireType == M_CORE_AFFINITY_MASK)
|
|
{
|
|
MIL_INT MaskArraySz = MthrInquireMp(ThrId, M_CORE_AFFINITY_MASK_ARRAY_SIZE, M_DEFAULT, M_DEFAULT, M_NULL);
|
|
ResultPtr.resize(MaskArraySz);
|
|
RetVal = MthrInquireMp(ThrId, InquireType, TypeFlag, TypeValue, &ResultPtr[0]);
|
|
}
|
|
else
|
|
{
|
|
ResultPtr.resize(1);
|
|
RetVal = MthrInquireMp(ThrId, InquireType, TypeFlag, TypeValue, &ResultPtr[0]);
|
|
}
|
|
return RetVal;
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MthrControlMp.
|
|
inline void MFTYPE MthrControlMp(MIL_ID ThrId, MIL_INT64 ControlType, MIL_INT64 TypeFlag, MIL_INT64 TypeValue, const std::vector<MIL_UINT64> &ValuePtr)
|
|
{
|
|
if(ControlType == M_CORE_AFFINITY_MASK)
|
|
{
|
|
MIL_INT AffinityMaskSz = MthrInquireMp(ThrId, M_CORE_AFFINITY_MASK + M_NB_ELEMENTS, M_DEFAULT, M_DEFAULT, M_NULL);
|
|
if(AffinityMaskSz > (MIL_INT)ValuePtr.size())
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
SafeTypeError(MIL_TEXT("MthrControlMp"), MIL_TEXT("ValuePtr size cannot be smaller than the M_CORE_AFFINITY_MASK_ARRAY_SIZE."));
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
MthrControlMp(ThrId, ControlType, TypeFlag, TypeValue, (MIL_UINT64*)&ValuePtr[0]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MthrControlMp(ThrId, ControlType, TypeFlag, TypeValue, (MIL_UINT64*)&ValuePtr[0]);
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MappControlMp.
|
|
inline void MFTYPE MappControlMp(MIL_ID ContextAppId, MIL_INT64 ControlType, MIL_INT64 TypeFlag, MIL_INT64 TypeValue, const std::vector<MIL_UINT64> &ValuePtr)
|
|
{
|
|
if(ControlType == M_CORE_AFFINITY_MASK)
|
|
{
|
|
MIL_INT AffinityMaskSz = MappInquireMp(ContextAppId, M_CORE_AFFINITY_MASK+M_NB_ELEMENTS, M_DEFAULT, M_DEFAULT, M_NULL);
|
|
if(AffinityMaskSz > (MIL_INT)ValuePtr.size())
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
SafeTypeError(MIL_TEXT("MappControlMp"), MIL_TEXT("ValuePtr size cannot be smaller than the M_CORE_AFFINITY_MASK+M_NB_ELEMENTS."));
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
MappControlMp(ContextAppId, ControlType, TypeFlag, TypeValue, (MIL_UINT64*)&ValuePtr[0]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MappControlMp(ContextAppId, ControlType, TypeFlag, TypeValue, (MIL_UINT64*)&ValuePtr[0]);
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MappInquireConnection.
|
|
inline MIL_INT MFTYPE MappInquireConnection(MIL_ID ContextAppId, MIL_INT64 InquireType, MIL_INT64 ControlFlag, MIL_INT64 ExtraFlag, std::vector<MIL_ID> &UserVarPtr)
|
|
{
|
|
MIL_INT RetVal = 0;
|
|
|
|
if(InquireType == M_DMIL_PUBLISHED_LIST)
|
|
{
|
|
MIL_INT PublishListSz = MappInquireConnection(ContextAppId, M_DMIL_PUBLISHED_LIST_SIZE, ControlFlag, ExtraFlag, M_NULL);
|
|
UserVarPtr.resize(PublishListSz);
|
|
if(PublishListSz > 0)
|
|
{
|
|
RetVal = MappInquireConnection(ContextAppId, InquireType, ControlFlag, ExtraFlag, &UserVarPtr[0]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
UserVarPtr.resize(1);
|
|
RetVal = MappInquireConnection(ContextAppId, InquireType, ControlFlag, ExtraFlag, &UserVarPtr[0]);
|
|
}
|
|
return RetVal;
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MappInquireMp.
|
|
inline MIL_INT MFTYPE MappInquireMp(MIL_ID ContextAppId, MIL_INT64 InquireType, MIL_INT64 TypeFlag, MIL_INT64 TypeValue, std::vector<MIL_UINT64> &UserVarPtr)
|
|
{
|
|
MIL_INT64 MaskSizeInquireType = 0;
|
|
|
|
// If the InquireType is an array.
|
|
if (InquireType == M_CORE_AFFINITY_MASK ||
|
|
InquireType == M_CORE_AFFINITY_MASK_PROCESS ||
|
|
InquireType == M_CORE_AFFINITY_MASK_HARDWARE ||
|
|
InquireType == M_MEMORY_BANK_CORE_AFFINITY_MASK||
|
|
InquireType == M_MEMORY_BANK_AFFINITY_MASK ||
|
|
InquireType == M_CORE_MEMORY_BANK_AFFINITY_MASK)
|
|
{
|
|
MaskSizeInquireType = InquireType + M_NB_ELEMENTS;
|
|
}
|
|
|
|
MIL_INT RetVal = 0;
|
|
if(MaskSizeInquireType)
|
|
{
|
|
MIL_INT AffinityMaskArraySize = MappInquireMp(ContextAppId, MaskSizeInquireType, TypeFlag, TypeValue, M_NULL);
|
|
if(AffinityMaskArraySize > 0)
|
|
{
|
|
UserVarPtr.resize(AffinityMaskArraySize);
|
|
RetVal = MappInquireMp(ContextAppId, InquireType, TypeFlag, TypeValue, &UserVarPtr[0]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
UserVarPtr.resize(1);
|
|
RetVal = MappInquireMp(ContextAppId, InquireType, TypeFlag, TypeValue, &UserVarPtr[0]);
|
|
}
|
|
return RetVal;
|
|
}
|
|
|
|
|
|
inline void MFTYPE MsysInquireFeature(MIL_ID SysId, MIL_INT64 InquireType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, std::vector<MIL_INT64>& UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MsysInquireFeature(SysId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_INT64)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MsysInquireFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_INT64> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MsysInquireFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_INT64>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
MIL_INT Size = 0;
|
|
if (InquireType == M_FEATURE_VALUE_ARRAY)
|
|
{
|
|
MsysInquireFeature(SysId, M_FEATURE_VALUE_ARRAY_SIZE, FeatureName.c_str(), M_TYPE_INT64, &Size);
|
|
UserVarPtr.resize(Size);
|
|
if(Size > 0)
|
|
{
|
|
MsysInquireFeature(SysId, M_FEATURE_VALUE_ARRAY, FeatureName.c_str(), M_TYPE_INT64 + M_FEATURE_USER_ARRAY_SIZE(Size), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
inline void MFTYPE MsysInquireFeature(MIL_ID SysId, MIL_INT64 InquireType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, std::vector<MIL_DOUBLE>& UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MsysInquireFeature(SysId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_DOUBLE)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MsysInquireFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_DOUBLE> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MsysInquireFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_DOUBLE>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
MIL_INT Size = 0;
|
|
if (InquireType == M_FEATURE_VALUE_ARRAY)
|
|
{
|
|
MsysInquireFeature(SysId, M_FEATURE_VALUE_ARRAY_SIZE, FeatureName.c_str(), M_TYPE_INT64, &Size);
|
|
UserVarPtr.resize(Size);
|
|
if(Size > 0)
|
|
{
|
|
MsysInquireFeature(SysId, M_FEATURE_VALUE_ARRAY, FeatureName.c_str(), M_TYPE_DOUBLE + M_FEATURE_USER_ARRAY_SIZE(Size), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
inline void MFTYPE MsysInquireFeature(MIL_ID SysId, MIL_INT64 InquireType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, std::vector<MIL_BOOL>& UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MsysInquireFeature(SysId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_BOOLEAN)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MsysInquireFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_BOOL> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MsysInquireFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_BOOL>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
MIL_INT Size = 0;
|
|
if (InquireType == M_FEATURE_VALUE_ARRAY)
|
|
{
|
|
MsysInquireFeature(SysId, M_FEATURE_VALUE_ARRAY_SIZE, FeatureName.c_str(), M_TYPE_INT64, &Size);
|
|
UserVarPtr.resize(Size);
|
|
if(Size > 0)
|
|
{
|
|
MsysInquireFeature(SysId, M_FEATURE_VALUE_ARRAY, FeatureName.c_str(), M_TYPE_BOOLEAN + M_FEATURE_USER_ARRAY_SIZE(Size), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
inline void MFTYPE MsysInquireFeature(MIL_ID SysId, MIL_INT64 InquireType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, std::vector<MIL_UINT8> &UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MsysInquireFeature(SysId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_REGISTER)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MsysInquireFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_UINT8> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MsysInquireFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_UINT8>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
MIL_INT Size = 0;
|
|
if (InquireType == M_FEATURE_VALUE)
|
|
{
|
|
MsysInquireFeature(SysId, M_FEATURE_SIZE, FeatureName.c_str(), M_TYPE_INT64, &Size);
|
|
UserVarPtr.resize(Size);
|
|
if(Size > 0)
|
|
{
|
|
MsysInquireFeature(SysId, M_FEATURE_VALUE, FeatureName.c_str(), M_TYPE_UINT8 + M_FEATURE_USER_ARRAY_SIZE(Size), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MsysControlFeature.
|
|
inline void MFTYPE MsysControlFeature(MIL_ID SysId, MIL_INT64 ControlType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, const std::vector<MIL_UINT8> &UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MsysInquireFeature(SysId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_REGISTER)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MsysControlFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_UINT8> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MsysControlFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_UINT8>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
if (ControlType == M_FEATURE_VALUE)
|
|
{
|
|
MsysControlFeature(SysId, M_FEATURE_VALUE, FeatureName.c_str(), M_TYPE_UINT8 + M_FEATURE_USER_ARRAY_SIZE(UserVarPtr.size()), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
|
|
inline void MFTYPE MdigInquireFeature(MIL_ID DigId, MIL_INT64 InquireType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, std::vector<MIL_INT64>& UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MdigInquireFeature(DigId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_INT64)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MdigInquireFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_INT64> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MdigInquireFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_INT64>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
MIL_INT Size = 0;
|
|
if (InquireType == M_FEATURE_VALUE_ARRAY)
|
|
{
|
|
MdigInquireFeature(DigId, M_FEATURE_VALUE_ARRAY_SIZE, FeatureName.c_str(), M_TYPE_INT64, &Size);
|
|
UserVarPtr.resize(Size);
|
|
if(Size > 0)
|
|
{
|
|
MdigInquireFeature(DigId, M_FEATURE_VALUE_ARRAY, FeatureName.c_str(), M_TYPE_INT64 + M_FEATURE_USER_ARRAY_SIZE(Size), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
inline void MFTYPE MdigInquireFeature(MIL_ID DigId, MIL_INT64 InquireType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, std::vector<MIL_DOUBLE>& UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MdigInquireFeature(DigId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_DOUBLE)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MdigInquireFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_DOUBLE> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MdigInquireFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_DOUBLE>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
MIL_INT Size = 0;
|
|
if (InquireType == M_FEATURE_VALUE_ARRAY)
|
|
{
|
|
MdigInquireFeature(DigId, M_FEATURE_VALUE_ARRAY_SIZE, FeatureName.c_str(), M_TYPE_INT64, &Size);
|
|
UserVarPtr.resize(Size);
|
|
if(Size > 0)
|
|
{
|
|
MdigInquireFeature(DigId, M_FEATURE_VALUE_ARRAY, FeatureName.c_str(), M_TYPE_DOUBLE + M_FEATURE_USER_ARRAY_SIZE(Size), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
inline void MFTYPE MdigInquireFeature(MIL_ID DigId, MIL_INT64 InquireType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, std::vector<MIL_BOOL>& UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MdigInquireFeature(DigId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_BOOLEAN)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MdigInquireFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_BOOL> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MdigInquireFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_BOOL>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
MIL_INT Size = 0;
|
|
if (InquireType == M_FEATURE_VALUE_ARRAY)
|
|
{
|
|
MdigInquireFeature(DigId, M_FEATURE_VALUE_ARRAY_SIZE, FeatureName.c_str(), M_TYPE_INT64, &Size);
|
|
UserVarPtr.resize(Size);
|
|
if(Size > 0)
|
|
{
|
|
MdigInquireFeature(DigId, M_FEATURE_VALUE_ARRAY, FeatureName.c_str(), M_TYPE_BOOLEAN + M_FEATURE_USER_ARRAY_SIZE(Size), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
inline void MFTYPE MdigInquireFeature(MIL_ID DigId, MIL_INT64 InquireType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, std::vector<MIL_UINT8> &UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MdigInquireFeature(DigId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_REGISTER)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MdigInquireFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_UINT8> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MdigInquireFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_UINT8>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
MIL_INT Size = 0;
|
|
if (InquireType == M_FEATURE_VALUE)
|
|
{
|
|
MdigInquireFeature(DigId, M_FEATURE_SIZE, FeatureName.c_str(), M_TYPE_INT64, &Size);
|
|
UserVarPtr.resize(Size);
|
|
if(Size > 0)
|
|
{
|
|
MdigInquireFeature(DigId, M_FEATURE_VALUE, FeatureName.c_str(), M_TYPE_UINT8 + M_FEATURE_USER_ARRAY_SIZE(Size), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MdigControlFeature.
|
|
inline void MFTYPE MdigControlFeature(MIL_ID DigId, MIL_INT64 ControlType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, const std::vector<MIL_UINT8> &UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MdigInquireFeature(DigId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_REGISTER)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MdigControlFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_UINT8> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MdigControlFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_UINT8>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
if (ControlType == M_FEATURE_VALUE)
|
|
{
|
|
MdigControlFeature(DigId, M_FEATURE_VALUE, FeatureName.c_str(), M_TYPE_UINT8 + M_FEATURE_USER_ARRAY_SIZE(UserVarPtr.size()), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
|
|
|
|
inline void MFTYPE MbufInquireFeature(MIL_ID BufId, MIL_INT64 InquireType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, std::vector<MIL_INT64>& UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MbufInquireFeature(BufId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_INT64)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufInquireFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_INT64> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufInquireFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_INT64>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
MIL_INT Size = 0;
|
|
if (InquireType == M_FEATURE_VALUE_ARRAY)
|
|
{
|
|
MbufInquireFeature(BufId, M_FEATURE_VALUE_ARRAY_SIZE, FeatureName.c_str(), M_TYPE_INT64, &Size);
|
|
UserVarPtr.resize(Size);
|
|
if(Size > 0)
|
|
{
|
|
MbufInquireFeature(BufId, M_FEATURE_VALUE_ARRAY, FeatureName.c_str(), M_TYPE_INT64 + M_FEATURE_USER_ARRAY_SIZE(Size), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
inline void MFTYPE MbufInquireFeature(MIL_ID BufId, MIL_INT64 InquireType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, std::vector<MIL_DOUBLE>& UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MbufInquireFeature(BufId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_DOUBLE)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufInquireFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_DOUBLE> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufInquireFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_DOUBLE>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
MIL_INT Size = 0;
|
|
if (InquireType == M_FEATURE_VALUE_ARRAY)
|
|
{
|
|
MbufInquireFeature(BufId, M_FEATURE_VALUE_ARRAY_SIZE, FeatureName.c_str(), M_TYPE_INT64, &Size);
|
|
UserVarPtr.resize(Size);
|
|
if(Size > 0)
|
|
{
|
|
MbufInquireFeature(BufId, M_FEATURE_VALUE_ARRAY, FeatureName.c_str(), M_TYPE_DOUBLE + M_FEATURE_USER_ARRAY_SIZE(Size), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
inline void MFTYPE MbufInquireFeature(MIL_ID BufId, MIL_INT64 InquireType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, std::vector<MIL_BOOL>& UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MbufInquireFeature(BufId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_BOOLEAN)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufInquireFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_BOOL> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufInquireFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_BOOL>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
MIL_INT Size = 0;
|
|
if (InquireType == M_FEATURE_VALUE_ARRAY)
|
|
{
|
|
MbufInquireFeature(BufId, M_FEATURE_VALUE_ARRAY_SIZE, FeatureName.c_str(), M_TYPE_INT64, &Size);
|
|
UserVarPtr.resize(Size);
|
|
if(Size > 0)
|
|
{
|
|
MbufInquireFeature(BufId, M_FEATURE_VALUE_ARRAY, FeatureName.c_str(), M_TYPE_BOOLEAN + M_FEATURE_USER_ARRAY_SIZE(Size), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
inline void MFTYPE MbufInquireFeature(MIL_ID BufId, MIL_INT64 InquireType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, std::vector<MIL_UINT8> &UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MbufInquireFeature(BufId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_REGISTER)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufInquireFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_UINT8> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufInquireFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_UINT8>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
MIL_INT Size = 0;
|
|
if (InquireType == M_FEATURE_VALUE)
|
|
{
|
|
MbufInquireFeature(BufId, M_FEATURE_SIZE, FeatureName.c_str(), M_TYPE_INT64, &Size);
|
|
UserVarPtr.resize(Size);
|
|
if(Size > 0)
|
|
{
|
|
MbufInquireFeature(BufId, M_FEATURE_VALUE, FeatureName.c_str(), M_TYPE_UINT8 + M_FEATURE_USER_ARRAY_SIZE(Size), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufControlFeature.
|
|
inline void MFTYPE MbufControlFeature(MIL_ID BufId, MIL_INT64 ControlType, const MIL_STRING& FeatureName, MIL_INT64 UserVarType, const std::vector<MIL_UINT8> &UserVarPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
MIL_INT64 Type = 0;
|
|
MbufInquireFeature(BufId, M_FEATURE_TYPE, FeatureName.c_str(), M_TYPE_INT64, &Type);
|
|
if (Type != M_TYPE_REGISTER)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufControlFeature"), MIL_TEXT("Feature type not compatible with std::vector<MIL_UINT8> overload."));
|
|
}
|
|
else if (UserVarType != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufControlFeature"), MIL_TEXT("UserVarType parameter must be M_DEFAULT with std::vector<MIL_UINT8>."));
|
|
}
|
|
#else
|
|
UNREFERENCED_PARAMETER(UserVarType);
|
|
#endif
|
|
|
|
if (ControlType == M_FEATURE_VALUE)
|
|
{
|
|
MbufControlFeature(BufId, M_FEATURE_VALUE, FeatureName.c_str(), M_TYPE_UINT8 + M_FEATURE_USER_ARRAY_SIZE(UserVarPtr.size()), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufInquireContainer.
|
|
#if !M_MIL_USE_64BIT
|
|
inline MIL_INT MFTYPE MbufInquireContainer(MIL_ID ContainerId, MIL_INT64 Component, MIL_INT64 InquireType, std::vector<MIL_ID> &UserVarPtr)
|
|
{
|
|
MIL_INT RetVal = 0;
|
|
|
|
if(M_IS_BUINQ_CONT_ID_ARRAY(InquireType))
|
|
{
|
|
MIL_INT ComponentListSz = MbufInquireContainer(ContainerId, Component, InquireType + M_NB_ELEMENTS, M_NULL);
|
|
UserVarPtr.resize(ComponentListSz);
|
|
if(ComponentListSz > 0)
|
|
{
|
|
RetVal = MbufInquireContainer(ContainerId, Component, InquireType + M_ARRAY_ID_SIZE(ComponentListSz), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
UserVarPtr.resize(1);
|
|
RetVal = MbufInquireContainer(ContainerId, Component, InquireType, &UserVarPtr[0]);
|
|
}
|
|
return RetVal;
|
|
}
|
|
#endif
|
|
|
|
inline MIL_INT MFTYPE MbufInquireContainer(MIL_ID ContainerId, MIL_INT64 Component, MIL_INT64 InquireType, std::vector<MIL_INT64> &UserVarPtr)
|
|
{
|
|
MIL_INT RetVal = 0;
|
|
|
|
if(M_IS_BUINQ_CONT_INT64_ARRAY(InquireType))
|
|
{
|
|
MIL_INT ComponentListSz = MbufInquireContainer(ContainerId, Component, InquireType + M_NB_ELEMENTS, M_NULL);
|
|
UserVarPtr.resize(ComponentListSz);
|
|
if(ComponentListSz > 0)
|
|
{
|
|
RetVal = MbufInquireContainer(ContainerId, Component, InquireType + M_ARRAY_ID_SIZE(ComponentListSz), &UserVarPtr[0]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
UserVarPtr.resize(1);
|
|
RetVal = MbufInquireContainer(ContainerId, Component, InquireType, &UserVarPtr[0]);
|
|
}
|
|
return RetVal;
|
|
}
|
|
|
|
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MxxxStream.
|
|
inline void MFTYPE MbufStream(std::vector<MIL_UINT8> &MemPtrOrFileName,
|
|
MIL_ID SysId,
|
|
MIL_INT64 Operation,
|
|
MIL_INT64 StreamType,
|
|
MIL_DOUBLE Version,
|
|
MIL_INT64 ControlFlag,
|
|
MIL_ID* McontextIdPtr,
|
|
MIL_INT* SizeByteVarPtr)
|
|
{
|
|
MxxxStreamForStdVector(MemPtrOrFileName,
|
|
SysId,
|
|
Operation,
|
|
StreamType,
|
|
Version,
|
|
ControlFlag,
|
|
McontextIdPtr,
|
|
SizeByteVarPtr,
|
|
MbufStream);
|
|
}
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MdigProcess.
|
|
inline void MFTYPE MdigProcess(MIL_ID DigId, const std::vector<MIL_ID>& DestImageArrayPtr, MIL_INT ImageCount, MIL_INT64 Operation, MIL_INT64 OperationFlag, MIL_DIG_HOOK_FUNCTION_PTR HookHandlerPtr, void *UserDataPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(ImageCount <= 0)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MdigProcess"), MIL_TEXT("ImageCount must be greater than zero."));
|
|
}
|
|
if(ImageCount > (MIL_INT)DestImageArrayPtr.size() && ImageCount != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MdigProcess"), MIL_TEXT("ImageCount parameter must be smaller or equal (M_DEFAULT) to the size of input vector."));
|
|
}
|
|
#endif
|
|
|
|
if(ImageCount == M_DEFAULT || ImageCount > (MIL_INT)DestImageArrayPtr.size())
|
|
{
|
|
ImageCount = (MIL_INT)DestImageArrayPtr.size();
|
|
}
|
|
|
|
MdigProcess(DigId, &DestImageArrayPtr[0], ImageCount, Operation, OperationFlag, HookHandlerPtr, UserDataPtr);
|
|
}
|
|
// ----------------------------------------------------------
|
|
// Overloads for std::vector in MbufChildContainer.
|
|
inline MIL_ID MFTYPE MbufChildContainer(MIL_ID ContId, MIL_INT ComponentCriteriaSize, const std::vector<MIL_INT64>& ComponentCriteriaArrayPtr, MIL_INT64 ControlFlag, MIL_ID *ContIdPtr)
|
|
{
|
|
#if M_MIL_USE_SAFE_TYPE
|
|
if(ComponentCriteriaSize <= 0)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufChildContainer"), MIL_TEXT("ComponentCriteriaSize must be greater than zero."));
|
|
}
|
|
if(ComponentCriteriaSize > (MIL_INT)ComponentCriteriaArrayPtr.size() && ComponentCriteriaSize != M_DEFAULT)
|
|
{
|
|
SafeTypeError(MIL_TEXT("MbufChildContainer"), MIL_TEXT("ComponentCriteriaSize parameter must be smaller or equal (M_DEFAULT) to the size of input vector."));
|
|
}
|
|
#endif
|
|
|
|
if(ComponentCriteriaSize == M_DEFAULT || ComponentCriteriaSize > (MIL_INT)ComponentCriteriaArrayPtr.size())
|
|
{
|
|
ComponentCriteriaSize = (MIL_INT)ComponentCriteriaArrayPtr.size();
|
|
}
|
|
|
|
return MbufChildContainer(ContId, ComponentCriteriaSize, &ComponentCriteriaArrayPtr[0], ControlFlag, ContIdPtr);
|
|
}
|
|
|
|
#endif // M_MIL_USE_VECTOR
|
|
|
|
#endif /* __MILVECTOR_H__ */
|
|
#endif /* __MILPROTO_H */
|