cotton_double/Include/ClassicMIL/MILDyn/milmod.h

1037 lines
46 KiB
C++

/***************************************************************************/
/*
Filename: MilMod.h
Owner : Matrox Imaging
Revision: 10.60.0776
Content : This file contains the defines and the prototypes for the
MIL geometric pattern matching module. (Mmod...).
Copyright © Matrox Electronic Systems Ltd., 1992-2023.
All Rights Reserved
*/
/***************************************************************************/
#ifndef __MILMOD_H__
#define __MILMOD_H__
#if (!M_MIL_LITE) // MIL FULL ONLY
/* C++ directive if needed */
#ifdef __cplusplus
extern "C"
{
#endif
/***************************************************************************/
/* MilMod CAPI defines */
/***************************************************************************/
/***************************************************************************/
/* MmodAlloc() */
/***************************************************************************/
/* Object types */
#define M_RESULT 0x00001000L
#define M_GEOMETRIC 0x00002000L
#define M_GEOMETRIC_CONTROLLED 0x00008000L
#define M_SHAPE_CIRCLE 0x00010000L
#define M_SHAPE_ELLIPSE 0x00020000L
#define M_SHAPE_RECTANGLE 0x00040000L
#define M_SHAPE_SEGMENT 0x00080000L
/***************************************************************************/
/* MmodGetResult() */
/***************************************************************************/
/* For ResultIndex */
#define M_ALL 0x40000000L // already defined in Mil.h
/* For Result Type */
#define M_NUMBER 1009L // already defined in Mil.h
#define M_GENERAL 0x20000000L // also defined in milreg.h
#define M_CONTEXT_ID 0x00001010L
#define M_TIMEOUT_END 10L
#define M_SCORE 0x00001400L // already defined in MilPat.h
#define M_TARGET_COVERAGE 0x00001500L
#define M_MODEL_COVERAGE 0x00001600L
#define M_FIT_ERROR 0x00001700L
#define M_SCORE_TARGET 0x00001800L
#define M_POSITION_X 0x00003400L // already defined in MilPat.h
#define M_POSITION_Y 0x00004400L // already defined in MilPat.h
#define M_ANGLE 0x00000800L // already defined in Mil.h
#define M_SCALE 0x00008010L // already defined in Milpat.h
#define M_A_FORWARD 0x00004001L
#define M_B_FORWARD 0x00004002L
#define M_C_FORWARD 0x00004003L
#define M_D_FORWARD 0x00004004L
#define M_E_FORWARD 0x00004005L
#define M_F_FORWARD 0x00004006L
#define M_A_REVERSE 0x00004011L
#define M_B_REVERSE 0x00004012L
#define M_C_REVERSE 0x00004013L
#define M_D_REVERSE 0x00004014L
#define M_E_REVERSE 0x00004015L
#define M_F_REVERSE 0x00004016L
#define M_RADIUS 0x00000040L
#define M_CIRCLE_ASPECT_RATIO 0x00002018L
#define M_SQUARE_ASPECT_RATIO 0x00000008L // already defined in Mil.h
#define M_CENTER_X 4L
#define M_CENTER_Y 5L
#define M_SCORE_FIT 2461L
#define M_TOP_LEFT_X 1004L // already defined in MilCode.h
#define M_TOP_LEFT_Y 1005L // already defined in MilCode.h
#define M_TOP_RIGHT_X 1014L // already defined in MilCode.h
#define M_TOP_RIGHT_Y 1015L // already defined in MilCode.h
#define M_BOTTOM_LEFT_X 1016L // already defined in MilCode.h
#define M_BOTTOM_LEFT_Y 1017L // already defined in MilCode.h
#define M_BOTTOM_RIGHT_X 1018L // already defined in MilCode.h
#define M_BOTTOM_RIGHT_Y 1019L // already defined in MilCode.h
#define M_AVAILABLE MAKE_INT64(0x0000400000000000) // Also defined in mil.h
/***************************************************************************/
/* MmodDefine() */
/***************************************************************************/
#define M_DELETE 3L // 3 Already defined in Milblob.h
#define M_IMAGE 0x00000004L // 4 Already defined in Mil.h
#define M_CIRCLE 0x00000008L // 8 Already defined in MilBga.h
#define M_ELLIPSE 0x00000010L // 16
#define M_SQUARE 0x00000020L // 32
#define M_RECTANGLE 0x00000040L // 64
#define M_LINE 0x00000080L // 128
#define M_RING 0x00000100L // 256
#define M_DXF_FILE 0x00000200L // 512
#define M_CROSS 0x00002000L // 8192 Already defined in MilBga.h
#define M_DIAMOND 0x00008000L // 32768
#define M_TRIANGLE 0x00010000L // 65536
#define M_MERGE_MODEL 0x00020000L // 131072
#define M_AUTO_DEFINE 0x00040000L // 262144
#define M_NO_CHECK 0x40000000L // already defined.
#define M_SEGMENT 0x00000082L // Already defined in milmetrol.h
/***************************************************************************/
/* MmodDefineFromFile() */
/***************************************************************************/
#define M_MEMORY (M_APP_INQUIRE_SYS_START+120L) /*5120*/ // Already defined in Mil.h
#define M_INTERACTIVE M_NULL // Already defined in mil.h, milcal.h, milcode.h, miledge.h, milmeas.h, milocr.h, milpat.h
#define M_DXF_FILE 0x00000200L // 512
/***************************************************************************/
/* MmodControl() / MmodInquire() */
/***************************************************************************/
// For Index
#define M_DEFAULT 0x10000000L // already defined in Mil.h
#define M_CONTEXT 0x08000000L
#define M_ALL 0x40000000L // already defined in Mil.h
// Modifier
#define M_SUPPORTED MAKE_INT64(0x0000800000000000) // Also defined in mil.h
// Context controls/inquires
#define M_IMAGE_ID 0x04000000L
#define M_NUMBER 1009L // already defined in Mil.h
#define M_REFERENCE_X 100L // also defined in milreg.h
#define M_REFERENCE_Y 101L // also defined in milreg.h
#define M_REFERENCE_ANGLE 110L
#if OldDefinesSupport
#define M_SEARCH_OFFSET_X 102L
#define M_SEARCH_OFFSET_Y 103L
#define M_SEARCH_SIZE_X 104L
#define M_SEARCH_SIZE_Y 105L
// MIL_DEPRECATED(M_SEARCH_OFFSET_X, 1010) // Also defined in MilPat.h
// MIL_DEPRECATED(M_SEARCH_OFFSET_Y, 1010) // Also defined in MilPat.h
// MIL_DEPRECATED(M_SEARCH_SIZE_X , 1010) // Also defined in MilPat.h
// MIL_DEPRECATED(M_SEARCH_SIZE_Y , 1010) // Also defined in MilPat.h
#endif
#define M_ACCURACY 106L
#define M_SPEED 8L // Already define in milpat.h
#define M_SMOOTHNESS 108L
#define M_EDGE_ACCURACY 5021L
#if OldDefinesSupport
#define M_KERNEL_WIDTH 109L
//MIL_DEPRECATED(M_KERNEL_WIDTH, 1010)
#endif
#define M_FILTER_MODE 122L // allready defined in miledge.h
#define M_DETAIL_LEVEL 111L
#define M_SEARCH_ANGLE_RANGE 113L // also defined in milreg.h
#define M_SEARCH_SCALE_RANGE 114L // also defined in milreg.h
#define M_SEARCH_POSITION_RANGE 119L // also defined in milreg.h
#define M_TIMEOUT 2077L // already define in mil.h
#define M_STOP_FIND 115L
#define M_SHARED_EDGES 220L
#define M_TARGET_CACHING 39L // Already define in milpat.h
#define M_SAVE_TARGET_EDGES 121L // Already define in milpat.h
#define M_OVERSCAN 53L // Already define in mil.h
#define M_OVERSCAN_REPLACE_VALUE 54L // Already define in mil.h
#define M_CONTEXT_CONVERT 535L // Already define in milocr.h
#define M_SEARCH_POSITION_FROM_GRAPHIC_LIST 1723L
// Context controls/inquires for M_GEOMETRIC_CONTROLLED
#define M_FIRST_LEVEL 31L //Already defined in milpat.h
#define M_LAST_LEVEL 32L //Already defined in milpat.h
#define M_AUTO 444L //Already defined in milocr.h
// Model controls/inquires
#define M_ACCEPTANCE 200L
#define M_ACCEPTANCE_TARGET 201L
#define M_CERTAINTY 202L
#define M_CERTAINTY_TARGET 203L
#define M_POLARITY 0x00004000L // already defined in MilMeas.h
#if OldDefinesSupport
#define M_POLARITY_CHECK M_POLARITY
MIL_DEPRECATED(M_POLARITY_CHECK, 1010)
#endif
#define M_MIN_SEPARATION_X 35L // already defined in MilPat.h
#define M_MIN_SEPARATION_Y 36L // already defined in MilPat.h
#define M_SCALE 0x00008010L // already defined in MilPat.h
#define M_SCALE_MIN_FACTOR 210L // also defined in milreg.h
#define M_SCALE_MAX_FACTOR 211L // also defined in milreg.h
#define M_ASPECT_RATIO 6001L // (Already defined in milcal.h)
#define M_EMPTY 236L
#define M_ACTIVE_EDGELS 1719L // also defined in MilMetrol.h
#define M_CORNER_RADIUS 239L
#define M_ANGLE 0x00000800L // already defined in Mil.h
#define M_ANGLE_DELTA_NEG 0x00000200L // Already define in MilPat.h
#define M_ANGLE_DELTA_POS 0x00000400L // Already define in MilPat.h
#define M_INDEX 217L
#define M_FIT_ERROR_WEIGHTING_FACTOR 221L
#define M_USER_LABEL 228L // also defined in milreg.h
#define M_INDEX_FROM_LABEL 229L // also defined in milreg.h
#define M_NUMBER_OF_CHAINED_PIXELS 56L // Already define in MilBlob.h
#define M_NUMBER_OF_CHAINED_EDGELS M_NUMBER_OF_CHAINED_PIXELS
#define M_CHAIN_X 65L // Already define in MilBlob.h
#define M_CHAIN_Y 144L // Already define in MilBlob.h
#define M_CHAIN_ANGLE 258L // Already define in MilEdge.h
#define M_CHAIN_INDEX 67L // Already define in MilBlob.h
#define M_MIN_SEPARATION_SCALE 68L
#define M_MIN_SEPARATION_ANGLE 69L
#define M_MIN_SEPARATION_ASPECT_RATIO 2016L
#define M_SEARCH_ASPECT_RATIO_CONSTRAINT 2215L
#define M_ASSOCIATED_CALIBRATION 125L // Already define in MilCal.h
#define M_CALIBRATED 0x0000300L
#define M_POSITION_DELTA_NEG_X 127L // also defined in milreg.h
#define M_POSITION_DELTA_POS_X 128L // also defined in milreg.h
#define M_POSITION_DELTA_NEG_Y 129L // also defined in milreg.h
#define M_POSITION_DELTA_POS_Y 130L // also defined in milreg.h
#define M_SAGITTA_TOLERANCE 1969L
#define M_DEVIATION_TOLERANCE 3035L
#define M_RESOLUTION_COARSENESS_LEVEL 2184L
#define M_MODEL_ASPECT_RATIO 2219L
#define M_MODEL_ASPECT_RATIO_MIN_FACTOR 2220L
#define M_MODEL_ASPECT_RATIO_MAX_FACTOR 2221L
#define M_COVERAGE_MAX 2457L
#define M_FIT_SCORE_MIN 2458L
#define M_LINE_PRESEARCH 2801L
#define M_MIN_SIDE_COVERAGE 2802L
#define M_ANGLE_MULTIPLE_RANGE 2803L
#define M_STEP_180 2818L
#define M_STEP_90 2905L
#define M_USE_GRID_DECOMPOSITION 2849L //=internal
#define M_COVERAGE_MIN 2453L
#define M_ANGLE_REGION 3095L
#define M_ELLIPSE_TOLERANCE_TO_CIRCLE 3585L
#define M_SEGMENT_CONSISTENT_GRADIENT 2943L
#define M_TRUE 1L // Already defined in mil.h, milmeas.h, miledge.h
#define M_FALSE 0L // Already defined in mil.h, milmeas.h, miledge.h
// Controls/inquires for Synthetic models
#define M_BOX_MARGIN_LEFT 308L
#define M_BOX_MARGIN_RIGHT 309L
#define M_BOX_MARGIN_TOP 310L
#define M_BOX_MARGIN_BOTTOM 311L
#define M_PIXEL_SCALE 316L
#define M_CAD_Y_AXIS 318L
// Controls/inquires for results
#define M_RESULT_OUTPUT_UNITS 1300L // Also in milim.h
// CAD Y Axis control values
#define M_FLIP 0x00010000L // Already defined in Mil.h
#define M_NO_FLIP 0x04000000L // Already defined in Mil.h
// Types of polarity check
#define M_SAME -1L // Already defined in MilMeas.h
#define M_REVERSE 4L // Already defined in Mil.h
#define M_SAME_OR_REVERSE 5L
#define M_ANY 0x11000000L // Already defined in MilMeas.h
#if OldDefinesSupport
#define M_MIX M_ANY
MIL_DEPRECATED(M_MIX, 1010)
#endif
// To remove user label
#define M_NO_LABEL 0x20000000L // Also defined in milreg.h
// Control values
#define M_VERY_LOW 0L // Already define in milpat.h
#define M_LOW 1L // Already define in milpat.h
#define M_MEDIUM 2L // Already define in milpat.h
#define M_HIGH 3L // Already define in milpat.h
#define M_VERY_HIGH 4L // Already define in milpat.h
#if OldDefinesSupport
#define M_KERNEL_DEPTH 368L
///MIL_DEPRECATED(M_KERNEL_DEPTH, 1010)
#endif
#define M_SIZE 0xC00L // Already define in medge.h
#define M_RECURSIVE 0x00040000 // Already defined in mildev.h
#define M_KERNEL 0x00400000L // Already defined in mil.h
// Parameters for output units
#define M_PIXEL 0x1000L
#define M_WORLD 0x2000L
#define M_ACCORDING_TO_CALIBRATION 1301L
/***************************************************************************/
/* MmodInquire() */
/***************************************************************************/
#define M_VALID 0x00000001L // Already define in Mil.h
#define M_CONTEXT_TYPE 162
#define M_MODEL_TYPE 162
#define M_PREPROCESSED 14L // Already define in MilPat.h
#define M_KERNEL_SIZE 301L
#define M_NUMBER_MODELS 302L
#define M_MODIFICATION_COUNT 5010L // Already define in Mil.h
#define M_OWNER_SYSTEM 1101L // already define in mil.h
#define M_SIZE_BYTE 5061L // already defined in Mil.h
#define M_ALLOC_OFFSET_X 15L // Already define in MilPat.h
#define M_ALLOC_OFFSET_Y 16L // Already define in MilPat.h
#define M_ALLOC_ANGLE 3329L // Already define in MilPat.h
#define M_ALLOC_SIZE_X 2L // Already define in MilPat.h
#define M_ALLOC_SIZE_Y 3L // Already define in MilPat.h
#define M_ORIGINAL_X 6L // Already define in MilPat.h
#define M_ORIGINAL_Y 7L // Already define in MilPat.h
#define M_WARNINGS 306L
#define M_ALLOC_SIZE_BAND 321L
#define M_ALLOC_TYPE 322L // Already defined in MilPat.h
#define M_ALLOC_SIGN 323L
#define M_ALLOC_SIZE_BIT 26L // Already defined in MilPat.h
// Model inquires for Misc Synthetic Model
#define M_RADIUS 0x00000040L
#define M_FOREGROUND_VALUE 4L // Already defined in MilBlob.h
#define M_FOREGROUND_WHITE 0x80L // Already define in MilBlob.h
#define M_FOREGROUND_BLACK 0x100L // Already define in MilBlob.h
#define M_FOREGROUND_ANY M_FOREGROUND_WHITE+M_FOREGROUND_BLACK
#define M_LENGTH 0x00002000L // already defined in Mil.h
#define M_WIDTH 0x00010000L // Already defined in Milmeas.h
#define M_HEIGHT 317L
#define M_HORIZONTAL_THICKNESS 233L
#define M_VERTICAL_THICKNESS 232L
#define M_INNER_RADIUS 234L
#define M_OUTER_RADIUS 235L
#define M_BOX_OFFSET_X 312L
#define M_BOX_OFFSET_Y 313L
#define M_BOX_SIZE_X 314L
#define M_BOX_SIZE_Y 315L
#define M_MOD_DEFINE_COMPATIBLE 330L
#define M_MODEL_IMAGE_ORIGIN_X 2007
#define M_MODEL_IMAGE_ORIGIN_Y 2008
#define M_HAS_DONT_CARE_MASK 2391 // also defined in milpat.h
#define M_HAS_FLAT_REGIONS_MASK 2392
#define M_HAS_WEIGHT_REGIONS_MASK 2393
#define M_START_POS_X 2820
#define M_START_POS_Y 2821
#define M_END_POS_X 2822
#define M_END_POS_Y 2823
#define M_LINE_TYPE 2824
#define M_CREST_WHITE 2825
#define M_CREST_BLACK 2826
#define M_RESULT_TYPE 1L // Already defined in milmeas.h, milim.h
#define M_HAS_TARGET_EDGES_SAVED 2679
/***************************************************************************/
/* MmodDraw() */
/***************************************************************************/
#define M_DRAW_IMAGE 0x00000002L // Already define in MilPat.h
#define M_DRAW_EDGES 0x00000004L
#define M_DRAW_DONT_CARE 0x00000008L // Already define in MilPat.h
#if OldDefinesSupport
#define M_DRAW_DONT_CARES M_DRAW_DONT_CARE
//MIL_DEPRECATED(M_DRAW_DONT_CARES, 1010)
#endif
#define M_DRAW_FLAT_REGIONS 0x00000010L
#define M_DRAW_BOX 0x00000020L // Already define in MilPat.h
#define M_DRAW_POSITION 0x00000040L // Already define in MilPat.h
#define M_DRAW_WEIGHT_REGIONS 0x00000100L
#define M_DRAW_AXIS 0x00000200L // Already define in MilBlob.h
#define M_ORIGINAL 0x00000199L // Already define in MilPat.h
#define M_MODEL 0x00010000L //65536
#define M_TARGET 0x00080000L // Also defined in milreg.h
#define M_DRAW_ACTIVE_EDGELS 0x00100000L // Also defined in milmetrol.h
#if OldDefinesSupport
#define M_DRAW_RELATIVE_ORIGIN_X 319L // deprecated : Use MgraControl(... M_DRAW_OFFSET_X...)
#define M_DRAW_RELATIVE_ORIGIN_Y 320L // deprecated : Use MgraControl(... M_DRAW_OFFSET_Y...)
#define M_DRAW_SCALE_X 3203L // deprecated : Use MgraControl(... M_DRAW_ZOOM_X ...)
#define M_DRAW_SCALE_Y 3204L // deprecated : Use MgraControl(... M_DRAW_ZOOM_Y ...)
// MIL_DEPRECATED(M_DRAW_RELATIVE_ORIGIN_X, 1010) Already defined in mil.h
// MIL_DEPRECATED(M_DRAW_RELATIVE_ORIGIN_Y, 1010) Already defined in mil.h
// MIL_DEPRECATED(M_DRAW_SCALE_X, 1010) Already defined in mil.h
// MIL_DEPRECATED(M_DRAW_SCALE_Y, 1010) Already defined in mil.h
#endif
/***************************************************************************/
/* MmodMask() */
/***************************************************************************/
#if OldDefinesSupport
#define M_DONT_CARES M_DONT_CARE
MIL_DEPRECATED(M_DONT_CARES, 1010)
#endif
#define M_DONT_CARE 0x00008000L // already defined in mil.h, milpat.h, milmod.h
#define M_FLAT_REGIONS 501L
#define M_WEIGHT_REGIONS 502L
/***************************************************************************/
/* MmodPreprocess() */
/***************************************************************************/
#define M_RESET 9L
#define M_COMPLETE 0x00000000L // Already defined in Mil.h
#define M_PARTIAL 0x00000001L // Already defined in Mil.h
/***************************************************************************/
/* MmodSave()/MmodRestore()/MmodStream() */
/***************************************************************************/
#define M_MEMORY (M_APP_INQUIRE_SYS_START+120L) /*5120*/ // Already defined in Mil.h
#define M_INTERACTIVE M_NULL // Already defined in mil.h, milcal.h, milcode.h, milmeas.h, milocr.h, milpat.h, milmod.h
#define M_SAVE 0x100L
#define M_RESTORE 0x10L
#define M_LOAD 1L
#define M_INQUIRE_SIZE_BYTE 2L
#define M_WITH_CALIBRATION 0x00020000L // Already in mil.h
/***************************************************************************/
/* WARNINGS definitions and string table */
/***************************************************************************/
// Deprecated flag names.
#if OldDefinesSupport
// #define M_MAJOR_AXIS_MAX 216L already defined in milmeas.h
// MIL_DEPRECATED(M_MAJOR_AXIS_MAX, 1000) already defined in milmeas.h
// #define M_MAJOR_AXIS_MIN 214L already defined in milmeas.h
// MIL_DEPRECATED(M_MAJOR_AXIS_MIN, 1000) already defined in milmeas.h
// #define M_MAJOR_AXIS M_RADIUS already defined in milmeas.h
// MIL_DEPRECATED(M_MAJOR_AXIS, 1000) already defined in milmeas.h
#endif
/***************************************************************************/
/* MilMod CAPI function prototypes */
/***************************************************************************/
MIL_ID MFTYPE MmodAlloc (MIL_ID SysId,
MIL_INT64 ModelFinderType,
MIL_INT64 ControlFlag,
MIL_ID* ContextIdPtr);
MIL_ID MFTYPE MmodAllocResult (MIL_ID SysId,
MIL_INT64 ControlFlag,
MIL_ID* ModResultIdPtr);
#if M_MIL_USE_64BIT
// Prototypes for 64 bits OSs
void MFTYPE MmodDefineInt64 (MIL_ID ContextId,
MIL_INT64 ModelType,
MIL_INT64 Param1,
MIL_DOUBLE Param2,
MIL_DOUBLE Param3,
MIL_DOUBLE Param4,
MIL_DOUBLE Param5);
void MFTYPE MmodDefineDouble (MIL_ID ContextId,
MIL_INT64 ModelType,
MIL_DOUBLE Param1,
MIL_DOUBLE Param2,
MIL_DOUBLE Param3,
MIL_DOUBLE Param4,
MIL_DOUBLE Param5);
#else
// Prototypes for 32 bits OSs
#define MmodDefineInt64 MmodDefine
#define MmodDefineDouble MmodDefine
void MFTYPE MmodDefine (MIL_ID ContextId,
MIL_INT64 ModelType,
MIL_DOUBLE Param1,
MIL_DOUBLE Param2,
MIL_DOUBLE Param3,
MIL_DOUBLE Param4,
MIL_DOUBLE Param5);
#endif
#if M_MIL_USE_64BIT
// Prototypes for 64 bits OSs
void MFTYPE MmodControlInt64 (MIL_ID ContextOrResultId,
MIL_INT Index,
MIL_INT64 ControlType,
MIL_INT64 ControlValue);
void MFTYPE MmodControlDouble (MIL_ID ContextOrResultId,
MIL_INT Index,
MIL_INT64 ControlType,
MIL_DOUBLE ControlValue);
#else
// Prototypes for 32 bits OSs
#define MmodControlInt64 MmodControl
#define MmodControlDouble MmodControl
void MFTYPE MmodControl (MIL_ID ContextOrResultId,
MIL_INT Index,
MIL_INT64 ControlType,
MIL_DOUBLE ControlValue);
#endif
MIL_INT MFTYPE MmodInquire (MIL_ID ContextOrResultId,
MIL_INT Index,
MIL_INT64 InquireType,
void* UserVarPtr);
void MFTYPE MmodMask (MIL_ID ContextId,
MIL_INT Index,
MIL_ID MaskBufferId,
MIL_INT64 MaskType,
MIL_INT64 ControlFlag);
void MFTYPE MmodPreprocess (MIL_ID ContextId,
MIL_INT64 ControlFlag);
void MFTYPE MmodFind (MIL_ID ContextId,
MIL_ID TargetImageOrResultId,
MIL_ID ModResultId);
void MFTYPE MmodGetResult (MIL_ID ResultId,
MIL_INT ResultIndex,
MIL_INT64 ResultType,
void* ResultArrayPtr);
void MFTYPE MmodGetResultOutputUnits(MIL_ID ResultId,
MIL_INT ResultIndex,
MIL_INT64 ResultType,
MIL_INT64 OutputUnits,
void* ResultArrayPtr);
void MFTYPE MmodDraw (MIL_ID ContextGraId,
MIL_ID ContextOrResultModId,
MIL_ID DstImageBufOrListGraId,
MIL_INT64 Operation,
MIL_INT Index,
MIL_INT64 ControlFlag);
#if M_MIL_USE_UNICODE
void MFTYPE MmodDefineFromFileW (MIL_ID ContextModId,
MIL_INT64 FileType,
MIL_CONST_TEXTW_PTR FileName,
MIL_INT64 ControlFlag );
void MFTYPE MmodSaveW (MIL_CONST_TEXTW_PTR FileName,
MIL_ID ContextId,
MIL_INT64 ControlFlag);
MIL_ID MFTYPE MmodRestoreW (MIL_CONST_TEXTW_PTR FileName,
MIL_ID SysId,
MIL_INT64 ControlFlag,
MIL_ID* ContextIdPtr);
void MFTYPE MmodStreamW (MIL_TEXTW_PTR MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID *ContextModIdPtr,
MIL_INT *SizeByteVarPtr);
void MFTYPE MmodDefineFromFileA (MIL_ID ContextModId,
MIL_INT64 FileType,
MIL_CONST_TEXTA_PTR FileName,
MIL_INT64 ControlFlag );
void MFTYPE MmodSaveA (MIL_CONST_TEXTA_PTR FileName,
MIL_ID ContextId,
MIL_INT64 ControlFlag);
MIL_ID MFTYPE MmodRestoreA (MIL_CONST_TEXTA_PTR FileName,
MIL_ID SysId,
MIL_INT64 ControlFlag,
MIL_ID* ContextIdPtr);
void MFTYPE MmodStreamA (MIL_TEXTA_PTR MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID *ContextModIdPtr,
MIL_INT *SizeByteVarPtr);
#if M_MIL_UNICODE_API
#define MmodDefineFromFile MmodDefineFromFileW
#define MmodSave MmodSaveW
#define MmodRestore MmodRestoreW
#define MmodStream MmodStreamW
#else
#define MmodDefineFromFile MmodDefineFromFileA
#define MmodSave MmodSaveA
#define MmodRestore MmodRestoreA
#define MmodStream MmodStreamA
#endif
#else
void MFTYPE MmodDefineFromFile (MIL_ID ContextModId,
MIL_INT64 FileType,
MIL_CONST_TEXT_PTR FileName,
MIL_INT64 ControlFlag );
void MFTYPE MmodSave (MIL_CONST_TEXT_PTR FileName,
MIL_ID ContextId,
MIL_INT64 ControlFlag);
MIL_ID MFTYPE MmodRestore (MIL_CONST_TEXT_PTR FileName,
MIL_ID SysId,
MIL_INT64 ControlFlag,
MIL_ID* ContextIdPtr);
void MFTYPE MmodStream (MIL_TEXT_PTR MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID *ContextModIdPtr,
MIL_INT *SizeByteVarPtr);
#endif // M_MIL_USE_UNICODE
void MFTYPE MmodFree (MIL_ID ObjectId);
/* C++ directive if needed */
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
inline void MFTYPE MmodStreamCpp(MilStreamParam MemPtrOrFileName,
MIL_ID SysId,
MIL_INT64 Operation,
MIL_INT64 StreamType,
MIL_DOUBLE Version,
MIL_INT64 ControlFlag,
MIL_ID* ContextModIdPtr,
MIL_INT* SizeByteVarPtr)
{
MmodStream(MemPtrOrFileName.m_Param, SysId, Operation, StreamType, Version, ControlFlag, ContextModIdPtr, SizeByteVarPtr);
}
#undef MmodStream
#define MmodStream MmodStreamCpp
#endif // __cplusplus
#if M_MIL_USE_64BIT
#ifdef __cplusplus
//////////////////////////////////////////////////////////////
// MmodControl function definition when compiling c++ files
//////////////////////////////////////////////////////////////
#if !M_MIL_USE_LINUX
inline void MmodControl(MIL_ID ContextOrResultId,
MIL_INT Index,
MIL_INT64 ControlType,
int ControlValue)
{
MmodControlInt64(ContextOrResultId, Index, ControlType, ControlValue);
};
#endif
inline void MmodControl(MIL_ID ContextOrResultId,
MIL_INT Index,
MIL_INT64 ControlType,
MIL_INT32 ControlValue)
{
MmodControlInt64(ContextOrResultId, Index, ControlType, ControlValue);
}
inline void MmodControl(MIL_ID ContextOrResultId,
MIL_INT Index,
MIL_INT64 ControlType,
MIL_INT64 ControlValue)
{
MmodControlInt64(ContextOrResultId, Index, ControlType, ControlValue);
}
inline void MmodControl(MIL_ID ContextOrResultId,
MIL_INT Index,
MIL_INT64 ControlType,
MIL_DOUBLE ControlValue)
{
MmodControlDouble(ContextOrResultId, Index, ControlType, ControlValue);
}
//////////////////////////////////////////////////////////////
// MmodDefine function definition when compiling c++ files
//////////////////////////////////////////////////////////////
#if !M_MIL_USE_LINUX
inline void MmodDefine(MIL_ID ContextId,
MIL_INT64 ModelType,
int Param1,
MIL_DOUBLE Param2,
MIL_DOUBLE Param3,
MIL_DOUBLE Param4,
MIL_DOUBLE Param5)
{
MmodDefineInt64(ContextId, ModelType, Param1, Param2, Param3, Param4, Param5);
}
#endif
inline void MmodDefine(MIL_ID ContextId,
MIL_INT64 ModelType,
MIL_INT32 Param1,
MIL_DOUBLE Param2,
MIL_DOUBLE Param3,
MIL_DOUBLE Param4,
MIL_DOUBLE Param5)
{
MmodDefineInt64(ContextId, ModelType, Param1, Param2, Param3, Param4, Param5);
}
inline void MmodDefine(MIL_ID ContextId,
MIL_INT64 ModelType,
MIL_INT64 Param1,
MIL_DOUBLE Param2,
MIL_DOUBLE Param3,
MIL_DOUBLE Param4,
MIL_DOUBLE Param5)
{
MmodDefineInt64(ContextId, ModelType, Param1, Param2, Param3, Param4, Param5);
}
inline void MmodDefine(MIL_ID ContextId,
MIL_INT64 ModelType,
MIL_DOUBLE Param1,
MIL_DOUBLE Param2,
MIL_DOUBLE Param3,
MIL_DOUBLE Param4,
MIL_DOUBLE Param5)
{
MmodDefineDouble(ContextId, ModelType, Param1, Param2, Param3, Param4, Param5);
}
#else
//////////////////////////////////////////////////////////////
// For C file, call the default function, i.e. Double one
//////////////////////////////////////////////////////////////
#define MmodControl MmodControlDouble
#define MmodDefine MmodDefineDouble
#endif // __cplusplus
#endif // M_MIL_USE_64BIT
#if M_MIL_USE_SAFE_TYPE
//////////////////////////////////////////////////////////////
// See milos.h for explanation about these functions.
//////////////////////////////////////////////////////////////
//-------------------------------------------------------------------------------------
// MmodGetResult
inline void MFTYPE MmodGetResultUnsafe (MIL_ID ResultId, MIL_INT Index, MIL_INT64 ResultType, void *ResultArrayPtr);
// ----------------------------------------------------------
// MmodInquire
inline MIL_INT MFTYPE MmodInquireUnsafe (MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 InquireType, void *ResultArrayPtr);
inline MIL_INT MFTYPE MmodInquireSafeType(MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 InquireType, MilVoidPtr ResultArrayPtr);
inline void MFTYPE MmodGetResultUnsafe (MIL_ID ResultId, MIL_INT Index, MIL_INT64 ResultType, void *ResultPtr) {MmodGetResult(ResultId, Index, ResultType, ResultPtr);}
// ----------------------------------------------------------
// MmodGetResult safe type definitions
inline void MFTYPE MmodGetResultSafeType(MIL_ID ResultId, MIL_INT Index, MIL_INT64 ResultType, MilVoidPtr UserVarPtr)
{
MIL_INT64 RequiredParamType = M_PARAM_TYPE_MIL_INT64;
if(!(M_DEFAULT_DATA_TYPE_BIT_SET(ResultType) || M_RECOMMENDED_DATA_TYPE_BIT_SET(ResultType)))
{
MmodGetResult(ResultId, Index, ResultType | M_DEFAULT_DATA_TYPE, &RequiredParamType);
}
if(!MfuncPointerIsCompatible(RequiredParamType, UserVarPtr.Type, ResultType))
{
SafeTypeError(MIL_TEXT("MmodGetResult"));
}
MmodGetResult(ResultId, Index, ResultType, UserVarPtr.Ptr);
}
// ----------------------------------------------------------
// MmodInquire
// ----------------------------------------------------------
// MmodInquire safe type definitions
inline MIL_INT MFTYPE MmodInquireSafeType(MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 InquireType, MilVoidPtr UserVarPtr)
{
MIL_INT64 RequiredParamType = M_PARAM_TYPE_MIL_INT64;
if(!(M_DEFAULT_DATA_TYPE_BIT_SET(InquireType) || M_RECOMMENDED_DATA_TYPE_BIT_SET(InquireType)))
{
MmodInquire(ContextOrResultId, Index, InquireType | M_DEFAULT_DATA_TYPE, &RequiredParamType);
}
if(!MfuncPointerIsCompatible(RequiredParamType, UserVarPtr.Type, InquireType))
{
SafeTypeError(MIL_TEXT("MmodInquire"));
}
return MmodInquire(ContextOrResultId, Index, InquireType, UserVarPtr.Ptr);
}
inline MIL_INT MFTYPE MmodInquireUnsafe (MIL_ID ContextOrResultId, MIL_INT Index, MIL_INT64 InquireType, void *UserVarPtr) {return MmodInquire (ContextOrResultId, Index, InquireType, UserVarPtr );}
#define MmodGetResult MmodGetResultSafeType
#define MmodInquire MmodInquireSafeType
#else // #if M_MIL_USE_SAFE_TYPE
#define MmodGetResultUnsafe MmodGetResult
#define MmodInquireUnsafe MmodInquire
#endif // #if M_MIL_USE_SAFE_TYPE
// ----------------------------------------------------------
// Overload for std::vector.
#if defined(M_MIL_USE_VECTOR) && M_MIL_USE_VECTOR
template <typename UserType>
inline MIL_INT MFTYPE MmodInquire(MIL_ID ContextId, MIL_INT Index, MIL_INT64 InquireType, std::vector<UserType> &ValuePtr)
{
// If the given MIL data type is not the same as the SrcType, change it to the correct one
// and give a warning.
MIL_INT64 InternalTrueDataTypeForStdVector = MilTraits<UserType>::TypeFlag;
#if M_MIL_USE_SAFE_TYPE
if(M_GET_HLVLDATATYPE(InquireType) != 0)
{
SafeTypeError(MIL_TEXT("MmodInquire"), MIL_TEXT("Combination value for the required data type is not supported with std::vector overload."));
}
#endif
InquireType = M_STRIP_HLVLDATATYPE(InquireType) + InternalTrueDataTypeForStdVector;
MIL_INT InternalNumberOfElementsForStdVector = 0;
MmodInquire(ContextId, Index, M_STRIP_HLVLDATATYPE(InquireType) + M_NB_ELEMENTS + M_TYPE_MIL_INT, &InternalNumberOfElementsForStdVector);
ValuePtr.resize(InternalNumberOfElementsForStdVector);
if(InternalNumberOfElementsForStdVector > 0)
{
return MmodInquire(ContextId, Index, InquireType, &ValuePtr[0]);
}
return 0;
}
template <typename UserType>
inline void MFTYPE MmodGetResult(MIL_ID ResultId, MIL_INT Index, MIL_INT64 ResultType, std::vector<UserType> &ValuePtr)
{
//! If the given MIL data type is not the same as the SrcType, change it to the correct one
//! and give a warning.
MIL_INT64 InternalTrueDataTypeForStdVector = MilTraits<UserType>::TypeFlag;
#if M_MIL_USE_SAFE_TYPE
if(M_GET_HLVLDATATYPE(ResultType) != 0)
{
SafeTypeError(MIL_TEXT("MmodGetResult"), MIL_TEXT("Combination value for the required data type is not supported with std::vector overload."));
}
#endif
ResultType = M_STRIP_HLVLDATATYPE(ResultType) + InternalTrueDataTypeForStdVector;
MIL_INT InternalNumberOfElementsForStdVector = 0;
MmodGetResult(ResultId, Index, M_STRIP_HLVLDATATYPE(ResultType) + M_NB_ELEMENTS + M_TYPE_MIL_INT, &InternalNumberOfElementsForStdVector);
ValuePtr.resize(InternalNumberOfElementsForStdVector);
if(InternalNumberOfElementsForStdVector > 0)
{
MmodGetResult(ResultId, Index, ResultType, &ValuePtr[0]);
}
}
// ----------------------------------------------------------
// Overloads for std::vector in MxxxStream.
inline void MFTYPE MmodStream(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,
MmodStream);
}
#endif // defined(M_MIL_USE_VECTOR) && M_MIL_USE_VECTOR
#if M_MIL_USE_STRING
/***************************************************************************/
/* GMF MODULE */
/***************************************************************************/
#if M_MIL_USE_UNICODE
#if M_MIL_UNICODE_API
inline void MFTYPE MmodSaveW(const MIL_STRING& FileName, MIL_ID ContextId, MIL_INT64 ControlFlag)
{
return MmodSaveW(FileName.c_str(), ContextId, ControlFlag);
}
inline MIL_ID MFTYPE MmodRestoreW(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextIdPtr)
{
return MmodRestoreW(FileName.c_str(), SysId, ControlFlag, ContextIdPtr);
}
inline void MFTYPE MmodDefineFromFileW(MIL_ID ContextModId, MIL_INT64 FileType, const MIL_STRING& FileName, MIL_INT64 ControlFlag)
{
MmodDefineFromFileW(ContextModId, FileType, FileName.c_str(), ControlFlag);
}
#else
inline void MFTYPE MmodSaveA(const MIL_STRING& FileName, MIL_ID ContextId, MIL_INT64 ControlFlag)
{
return MmodSaveA(FileName.c_str(), ContextId, ControlFlag);
}
inline MIL_ID MFTYPE MmodRestoreA(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextIdPtr)
{
return MmodRestoreA(FileName.c_str(), SysId, ControlFlag, ContextIdPtr);
}
inline void MFTYPE MmodDefineFromFileA(MIL_ID ContextModId, MIL_INT64 FileType, const MIL_STRING& FileName, MIL_INT64 ControlFlag)
{
MmodDefineFromFileA(ContextModId, FileType, FileName.c_str(), ControlFlag);
}
#endif /* M_MIL_UNICODE_API */
#else
inline void MFTYPE MmodSave(const MIL_STRING& FileName, MIL_ID ContextId, MIL_INT64 ControlFlag)
{
return MmodSave(FileName.c_str(), ContextId, ControlFlag);
}
inline MIL_ID MFTYPE MmodRestore(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_ID* ContextIdPtr)
{
return MmodRestore(FileName.c_str(), SysId, ControlFlag, ContextIdPtr);
}
inline void MFTYPE MmodDefineFromFile(MIL_ID ContextModId, MIL_INT64 FileType, const MIL_STRING& FileName, MIL_INT64 ControlFlag)
{
MmodDefineFromFile(ContextModId, FileType, FileName.c_str(), ControlFlag);
}
#endif /* M_MIL_USE_UNICODE */
#endif /* M_MIL_USE_STRING*/
////////////////////////////////////////////////////////////////////////////////
// MIL_UNIQUE_ID support
#if M_MIL_USE_MIL_UNIQUE_ID
#if M_MIL_USE_SAFE_TYPE
template <> inline bool MilIsCorrectObjectType<&MmodFree>(MIL_INT64 ObjectType)
{
return (ObjectType & ~M_USER_DEFINE_LOW_ATTRIBUTE) == M_MOD_OBJECT;
}
#endif
typedef MIL_UNIQUE_ID<&MmodFree> MIL_UNIQUE_MOD_ID;
#if M_MIL_USE_MOVE_SEMANTICS
inline MIL_UNIQUE_MOD_ID MmodAlloc(MIL_ID SysId, MIL_INT64 ModelFinderType, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG)
{
return MIL_UNIQUE_MOD_ID(MmodAlloc(SysId, ModelFinderType, ControlFlag, M_NULL));
}
inline MIL_UNIQUE_MOD_ID MmodAllocResult(MIL_ID SysId, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG)
{
return MIL_UNIQUE_MOD_ID(MmodAllocResult(SysId, ControlFlag, M_NULL));
}
inline MIL_UNIQUE_MOD_ID MmodRestore(MIL_CONST_TEXT_PTR FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG)
{
return MIL_UNIQUE_MOD_ID(MmodRestore(FileName, SysId, ControlFlag, M_NULL));
}
#if M_MIL_USE_STRING
inline MIL_UNIQUE_MOD_ID MmodRestore(const MIL_STRING& FileName, MIL_ID SysId, MIL_INT64 ControlFlag, MIL_UNIQUE_ID_TAG)
{
return MIL_UNIQUE_MOD_ID(MmodRestore(FileName, SysId, ControlFlag, M_NULL));
}
#endif // M_MIL_USE_STRING
template <MilFreeFuncType FreeFunc> inline void MmodFree(const MIL_UNIQUE_ID<FreeFunc>&) = delete;
inline void MmodStream(MilStreamParam MemPtrOrFileName,
MIL_ID SysId ,
MIL_INT64 Operation ,
MIL_INT64 StreamType ,
MIL_DOUBLE Version ,
MIL_INT64 ControlFlag ,
MIL_UNIQUE_MOD_ID* ContextModIdPtr ,
MIL_INT* SizeByteVarPtr )
{
MxxxStreamForMilUniqueId(MemPtrOrFileName, SysId, Operation, StreamType, Version, ControlFlag, ContextModIdPtr, SizeByteVarPtr, MmodStream);
}
#endif // M_MIL_USE_MOVE_SEMANTICS
#endif // M_MIL_USE_MIL_UNIQUE_ID
// End of MIL_UNIQUE_ID support
////////////////////////////////////////////////////////////////////////////////
#endif // !M_MIL_LITE
#endif // __MILMOD_H__