Teuchos - Trilinos Tools Package  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Teuchos_ExplicitInstantiationHelpers.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Teuchos: Common Tools Package
4 //
5 // Copyright 2004 NTESS and the Teuchos contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef TEUCHOS_EXPLICIT_INSTANTIATION_HELPERS_HPP
11 #define TEUCHOS_EXPLICIT_INSTANTIATION_HELPERS_HPP
12 
13 
21 #include "Teuchos_ConfigDefs.hpp"
22 
23 
24 //
25 // 2007/07/10: rabartl: NOTE: Semicolons must only be used at the lowest level
26 // of final code to ensure that there will not be any empty semicolon lines
27 // that might issue a compiler warning or error. In general, I like to define
28 // macros that need a semicolon when you use them because my emacs mode will
29 // then do the indentation correctly. However, this is not a big deal since
30 // these macros only get used in a final *.cpp file and at that point they are
31 // only used once in the entire mostly empty file.
32 //
33 
34 #ifdef HAVE_TEUCHOS_INST_FLOAT
35 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_FLOAT(INSTANT_MACRO)\
36  INSTANT_MACRO(float)
37 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_FLOAT(CLASSNAME)\
38  template class CLASSNAME<float>;
39 #else
40 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_FLOAT(INSTANT_MACRO)
41 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_FLOAT(CLASSNAME)
42 #endif
43 
44 
45 #define TEUCHOS_MACRO_TEMPLATE_INSTANT_DOUBLE(INSTANT_MACRO)\
46  INSTANT_MACRO(double)
47 #define TEUCHOS_CLASS_TEMPLATE_INSTANT_DOUBLE(CLASSNAME)\
48  template class CLASSNAME<double>;
49 
50 
51 #ifdef HAVE_TEUCHOS_INST_COMPLEX_FLOAT
52 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_COMPLEX_FLOAT(INSTANT_MACRO)\
53  INSTANT_MACRO(std::complex<float>)
54 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_COMPLEX_FLOAT(CLASSNAME)\
55  template class CLASSNAME<std::complex<float> >;
56 #else
57 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_COMPLEX_FLOAT(INSTANT_MACRO)
58 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_COMPLEX_FLOAT(CLASSNAME)
59 #endif
60 
61 
62 #ifdef HAVE_TEUCHOS_INST_COMPLEX_DOUBLE
63 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_COMPLEX_DOUBLE(INSTANT_MACRO)\
64  INSTANT_MACRO(std::complex<double>)
65 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_COMPLEX_DOUBLE(CLASSNAME)\
66  template class CLASSNAME<std::complex<double> >;
67 #else
68 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_COMPLEX_DOUBLE(INSTANT_MACRO)
69 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_COMPLEX_DOUBLE(CLASSNAME)
70 #endif
71 
72 #ifdef HAVE_TEUCHOS_LONG_DOUBLE
73 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_LONG_DOUBLE(INSTANT_MACRO)\
74  INSTANT_MACRO(long double)
75 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_LONG_DOUBLE(CLASSNAME)\
76  template class CLASSNAME<long double>;
77 #else
78 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_LONG_DOUBLE(INSTANT_MACRO)
79 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_LONG_DOUBLE(CLASSNAME)
80 #endif
81 
82 
83 #ifdef HAVE_TEUCHOSCORE_QUADMATH
84 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_FLOAT128(INSTANT_MACRO)\
85  INSTANT_MACRO(__float128)
86 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_FLOAT128(CLASSNAME)\
87  template class CLASSNAME<__float128>;
88 #else
89 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_FLOAT128(INSTANT_MACRO)
90 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_FLOAT128(CLASSNAME)
91 #endif // HAVE_TEUCHOSCORE_QUADMATH
92 
93 
97 #define TEUCHOS_MACRO_TEMPLATE_INSTANT_REAL_SCALAR_TYPES(MACRONAME) \
98  TEUCHOS_MACRO_TEMPLATE_INSTANT_FLOAT(MACRONAME) \
99  TEUCHOS_MACRO_TEMPLATE_INSTANT_DOUBLE(MACRONAME)
100 
101 
105 #define TEUCHOS_MACRO_TEMPLATE_INSTANT_SCALAR_TYPES(MACRONAME)\
106  TEUCHOS_MACRO_TEMPLATE_INSTANT_FLOAT(MACRONAME) \
107  TEUCHOS_MACRO_TEMPLATE_INSTANT_DOUBLE(MACRONAME) \
108  TEUCHOS_MACRO_TEMPLATE_INSTANT_COMPLEX_FLOAT(MACRONAME) \
109  TEUCHOS_MACRO_TEMPLATE_INSTANT_COMPLEX_DOUBLE(MACRONAME)
110 
111 
115 #define TEUCHOS_CLASS_TEMPLATE_INSTANT_REAL_SCALAR_TYPES(CLASSNAME)\
116  TEUCHOS_CLASS_TEMPLATE_INSTANT_FLOAT(CLASSNAME) \
117  TEUCHOS_CLASS_TEMPLATE_INSTANT_DOUBLE(CLASSNAME)
118 
119 
123 #define TEUCHOS_CLASS_TEMPLATE_INSTANT_SCALAR_TYPES(CLASSNAME)\
124  TEUCHOS_CLASS_TEMPLATE_INSTANT_FLOAT(CLASSNAME) \
125  TEUCHOS_CLASS_TEMPLATE_INSTANT_DOUBLE(CLASSNAME) \
126  TEUCHOS_CLASS_TEMPLATE_INSTANT_COMPLEX_FLOAT(CLASSNAME) \
127  TEUCHOS_CLASS_TEMPLATE_INSTANT_COMPLEX_DOUBLE(CLASSNAME)
128 
129 
130 #endif // TEUCHOS_EXPLICIT_INSTANTIATION_HELPERS_HPP
Teuchos header file which uses auto-configuration information to include necessary C++ headers...