Go to the documentation of this file.
   35 #ifndef NEKTAR_LIBUTILITIES_LINEARALGEBRA_EXPLICIT_INSTANTIATION_H 
   36 #define NEKTAR_LIBUTILITIES_LINEARALGEBRA_EXPLICIT_INSTANTIATION_H 
   38 #include <boost/preprocessor/repetition/for.hpp> 
   39 #include <boost/preprocessor/array/elem.hpp> 
   40 #include <boost/preprocessor/array/size.hpp> 
   41 #include <boost/preprocessor/repetition/repeat.hpp> 
   42 #include <boost/preprocessor/punctuation/paren.hpp> 
   43 #include <boost/preprocessor/punctuation/comma_if.hpp> 
   44 #include <boost/preprocessor/comparison/less.hpp> 
   45 #include <boost/preprocessor/logical/bool.hpp> 
   46 #include <boost/preprocessor/arithmetic/sub.hpp> 
   47 #include <boost/preprocessor/punctuation/comma.hpp> 
   48 #include <boost/preprocessor/comparison/greater.hpp> 
   49 #include <boost/preprocessor/array/pop_front.hpp> 
   50 #include <boost/preprocessor/array/push_back.hpp> 
   51 #include <boost/version.hpp> 
   55 #if BOOST_VERSION > 104800 
   56 #define BOOST_PP_TUPLE_REM_0() 
   60 #define NEKTAR_ALL_MATRIX_TYPES (6, (const DNekMat&, const DNekScalMat&, const DNekBlkMat&, const BlkMatDNekBlkMat&, const DNekScalBlkMat&, const BlkMatDNekScalBlkMat&)) 
   61 #define NEKTAR_BLOCK_MATRIX_TYPES (4, (const DNekBlkMat&, const BlkMatDNekBlkMat&, const DNekScalBlkMat&, const BlkMatDNekScalBlkMat&)) 
   62 #define NEKTAR_STANDARD_AND_SCALED_MATRICES (2, (const DNekMat&, const DNekScalMat&)) 
   64 #define NEKTAR_PRINT_ARRAY(z, n, data) \ 
   65     BOOST_PP_ARRAY_ELEM(n, data) \ 
   66     BOOST_PP_COMMA_IF(BOOST_PP_LESS(n, BOOST_PP_SUB(BOOST_PP_ARRAY_SIZE(data), 1))) 
   68 #define NEKTAR_CREATE_EXPLICIT_INTSTANTIATION(z, n, data) \ 
   69     template LIB_UTILITIES_EXPORT \ 
   70     BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ARRAY_ELEM(2, data)) BOOST_PP_ARRAY_ELEM(0, data) BOOST_PP_LPAREN()  \ 
   71     BOOST_PP_REPEAT(BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_ELEM(3, data)), NEKTAR_PRINT_ARRAY, BOOST_PP_ARRAY_ELEM(3, data)) \ 
   72     BOOST_PP_COMMA_IF(BOOST_PP_GREATER(BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_ELEM(3, data)), 0)) \ 
   73     BOOST_PP_ARRAY_ELEM(n, BOOST_PP_ARRAY_ELEM(1, data))\ 
   74     BOOST_PP_COMMA_IF(BOOST_PP_GREATER(BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_ELEM(4, data)), 0)) \ 
   75     BOOST_PP_REPEAT(BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_ELEM(4, data)), NEKTAR_PRINT_ARRAY, BOOST_PP_ARRAY_ELEM(4, data)) \ 
   78 #define NEKTAR_GENERATE_EXPLICIT_FUNCTION_INSTANTIATION_SINGLE_MATRIX(MethodName, MatrixTypes, ReturnType, BeforeArgs, AfterArgs) \ 
   79     BOOST_PP_REPEAT(BOOST_PP_ARRAY_SIZE(MatrixTypes), NEKTAR_CREATE_EXPLICIT_INTSTANTIATION, (5, (MethodName, MatrixTypes, ReturnType, BeforeArgs, AfterArgs))) 
   82 #define NEKTAR_GENERATE_EXPLICIT_FUNCTION_INSTANTIATION_TWO_MATRICES_INNER(z, n, data) \ 
   83     BOOST_PP_REPEAT(BOOST_PP_ARRAY_SIZE(BOOST_PP_ARRAY_ELEM(2, data)),  NEKTAR_CREATE_EXPLICIT_INTSTANTIATION, (5, (BOOST_PP_ARRAY_ELEM(0, data), BOOST_PP_ARRAY_ELEM(2, data), BOOST_PP_ARRAY_ELEM(3, data), BOOST_PP_ARRAY_PUSH_BACK(BOOST_PP_ARRAY_ELEM(4, data), BOOST_PP_ARRAY_ELEM(n, BOOST_PP_ARRAY_ELEM(1, data))),  BOOST_PP_ARRAY_ELEM(5, data)))) 
   87 #define NEKTAR_GENERATE_EXPLICIT_FUNCTION_INSTANTIATION_TWO_MATRICES(MethodName, FirstMatrixTypes, SecondMatrixTypes, ReturnType, BeforeArgs, AfterArgs) \ 
   88     BOOST_PP_REPEAT(BOOST_PP_ARRAY_SIZE(FirstMatrixTypes), NEKTAR_GENERATE_EXPLICIT_FUNCTION_INSTANTIATION_TWO_MATRICES_INNER, (6, (MethodName, FirstMatrixTypes, SecondMatrixTypes, ReturnType, BeforeArgs, AfterArgs))) 
   91 #endif //NEKTAR_LIBUTILITIES_LINEARALGEBRA_EXPLICIT_INSTANTIATION_H