Teuchos - Trilinos Tools Package Version of the Day
Loading...
Searching...
No Matches
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
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.