Medical Imaging Interaction Toolkit  2018.4.99-3e3f1a6e
Medical Imaging Interaction Toolkit
mitkInstantiateAccessFunctions.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef MITKINSTANTIATEACCESSFUNCTIONS_H_HEADER_INCLUDED
14 #define MITKINSTANTIATEACCESSFUNCTIONS_H_HEADER_INCLUDED
15 
16 #include <itkCastImageFilter.h>
17 #include <mitkConfig.h>
18 #include <mitkImageToItk.h>
19 
20 #include <boost/preprocessor/cat.hpp>
21 #include <boost/preprocessor/expand.hpp>
22 #include <boost/preprocessor/seq/for_each.hpp>
23 #include <boost/preprocessor/seq/for_each_product.hpp>
24 #include <boost/preprocessor/seq/to_tuple.hpp>
25 
26 #ifndef DOXYGEN_SKIP
27 
28 #define InstantiateAccessFunctionImpl(r, itkImgFunc, type) BOOST_PP_CAT(InstantiateAccessFunction_, itkImgFunc) type
29 
30 // product is of the form (itkImgFunc)(short)(2)
31 #ifdef _MSC_VER
32 #define InstantiateAccessFunctionProductImpl(r, product) \
33  BOOST_PP_CAT(InstantiateAccessFunction_, BOOST_PP_SEQ_HEAD(product)) \
34  BOOST_PP_EXPAND(BOOST_PP_SEQ_TO_TUPLE(BOOST_PP_SEQ_TAIL(product)))
35 #else
36 #define InstantiateAccessFunctionProductImpl(r, product) \
37  BOOST_PP_EXPAND(BOOST_PP_CAT(InstantiateAccessFunction_, BOOST_PP_SEQ_HEAD(product)) \
38  BOOST_PP_SEQ_TO_TUPLE(BOOST_PP_SEQ_TAIL(product)))
39 #endif
40 
41 #endif // DOXYGEN_SKIP
42 
43 //--------------------------------- instantiation functions ------------------------------
44 
85 #define InstantiateAccessFunctionForFixedType(itkImgFunc, pixelTypeSeq, dimSeq) \
86  BOOST_PP_SEQ_FOR_EACH_PRODUCT(InstantiateAccessFunctionProductImpl, ((itkImgFunc))(pixelTypeSeq)(dimSeq))
87 
95 #define InstantiateAccessFunction(itkImgFunc) \
96  InstantiateAccessFunctionForFixedType(itkImgFunc, MITK_ACCESSBYITK_PIXEL_TYPES_SEQ, MITK_ACCESSBYITK_DIMENSIONS_SEQ)
97 
108 #define InstantiateAccessFunctionForFixedDimension(itkImgFunc, dim) \
109  InstantiateAccessFunctionForFixedType(itkImgFunc, MITK_ACCESSBYITK_PIXEL_TYPES_SEQ, (dim))
110 
121 #define InstantiateAccessFunctionForFixedPixelType(itkImgFunc, pixelTypeSeq) \
122  InstantiateAccessFunctionForFixedType(itkImgFunc, pixelTypeSeq, MITK_ACCESSBYITK_DIMENSIONS_SEQ)
123 
133 #define InstantiateAccessFunctionForIntegralPixelTypes(itkImgFunc) \
134  InstantiateAccessFunctionForFixedType( \
135  itkImgFunc, MITK_ACCESSBYITK_INTEGRAL_PIXEL_TYPES_SEQ, MITK_ACCESSBYITK_DIMENSIONS_SEQ)
136 
146 #define InstantiateAccessFunctionForFloatingPixelTypes(itkImgFunc) \
147  InstantiateAccessFunctionForFixedType( \
148  itkImgFunc, MITK_ACCESSBYITK_FLOATING_PIXEL_TYPES_SEQ, MITK_ACCESSBYITK_DIMENSIONS_SEQ)
149 
150 #endif // of MITKINSTANTIATEACCESSFUNCTIONS_H_HEADER_INCLUDED