27#define _ML_CREATE_ITK_OBJECT_VOID(ML_OUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \
29 return new CLASS_NAME<ITKINDATATYPE, DIM>(); \
41#define _ML_DESTROY_ITK_OBJECT_VOID(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \
43 delete static_cast<CLASS_NAME<ITKINDATATYPE, DIM>*>(itkFactoryObj); \
57#define _ML_CREATE_ITK_OBJECT_VOID_WO_DT(ML_OUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \
59 return new CLASS_NAME<DIM>(); \
71#define _ML_DESTROY_ITK_OBJECT_VOID_WO_DT(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \
73 delete static_cast<CLASS_NAME<DIM>*>(itkFactoryObj); \
84#define MLITKImplementFactoryFuncs(CLASS_NAME, NAMESPACE, NEW_FUNC, DEL_FUNC) \
88 static void *CLASS_NAME##Creator(MLDataType dType, unsigned int dim){ \
90 ML_IMPLEMENT_ALL_ITK_6D_CASES("CLASS_NAME##creator())", \
92 NAMESPACE::CLASS_NAME, dType, dim); \
100 static void CLASS_NAME##Destructor(void *itkFactoryObj, MLDataType dType, unsigned int dim){ \
102 ML_IMPLEMENT_ALL_ITK_6D_CASES("CLASS_NAME##destructor()", \
104 NAMESPACE::CLASS_NAME, dType, dim); \
115#define MLITKObjectFactoryInit(FACTORY, CLASS_NAME) \
116 FACTORY._setCreatorAndDestructor(CLASS_NAME##Creator, CLASS_NAME##Destructor);
132 typedef void *(*MLITKObjectFactoryCreator)(
MLDataType dataType,
unsigned int dim);
165 _creatorFunc = cFunc;
166 _destructorFunc = dFunc;
179 _destroyInternalObject();
191 _itkObjectVoid = _creatorFunc(dataType,
static_cast<unsigned int>(dim));
192 _dataType = dataType;
193 _dimension =
static_cast<unsigned int>(dim);
199 _itkObjectVoid =
nullptr;
206 void _destroyInternalObject()
211 _destructorFunc(_itkObjectVoid, _dataType, _dimension);
219 _itkObjectVoid =
nullptr;
226 MLITKObjectFactory(
const MLITKObjectFactory &){}
229 MLITKObjectFactory &operator=(
const MLITKObjectFactory &){
return *
this; }
237 void *_itkObjectVoid;
243 unsigned int _dimension;
246 MLITKObjectFactoryCreator _creatorFunc;
249 MLITKObjectFactoryDestructor _destructorFunc;
~MLITKObjectFactory()
Destroy internally stored object.
MLDataType getDataType() const
Returns data type of the managed internal object.
void destroyObject()
Destroy object.
void _setCreatorAndDestructor(MLITKObjectFactoryCreator cFunc, MLITKObjectFactoryDestructor dFunc)
Sets creator and destructor functions. Only to be called by the macro.
unsigned int getDimension() const
Returns dimension of the managed internal object.
void * getObject() const
Returns void pointer to the managed internal object.
void createObject(MLDataType dType, ImageVector v)
Create object.
void(* MLITKObjectFactoryDestructor)(void *, MLDataType dataType, unsigned int dim)
Function type to destroy an object.
void createObject(MLDataType dType, int dim)
Create object.
void *(* MLITKObjectFactoryCreator)(MLDataType dataType, unsigned int dim)
Function type to cerate an object and to return a void pointer to it.
MLITKObjectFactory()
Create an empty object.
MLint getExtDimension() const
MLEXPORT MLint32 MLIsValidType(MLDataType dataType)
#define ML_INVALID_DATA_TYPE
#define ML_UNKNOWN_EXCEPTION
#define ML_PRINT_FATAL_ERROR(FUNC_NAME, REASON, HANDLING)
#define ML_PRINT_ERROR(FUNC_NAME, REASON, HANDLING)
#define ML_CATCH_BLOCK(__paramType)
#define MLITK_SUPPORT_EXPORT
TImageVector< MLint > ImageVector
Defines the standard ImageVector type that is used by the ML for indexing and coordinates.