|
Teuchos - Trilinos Tools Package
Version of the Day
|
00001 // @HEADER 00002 // *********************************************************************** 00003 // 00004 // Teuchos: Common Tools Package 00005 // Copyright (2004) Sandia Corporation 00006 // 00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00008 // license for use of this work by or on behalf of the U.S. Government. 00009 // 00010 // Redistribution and use in source and binary forms, with or without 00011 // modification, are permitted provided that the following conditions are 00012 // met: 00013 // 00014 // 1. Redistributions of source code must retain the above copyright 00015 // notice, this list of conditions and the following disclaimer. 00016 // 00017 // 2. Redistributions in binary form must reproduce the above copyright 00018 // notice, this list of conditions and the following disclaimer in the 00019 // documentation and/or other materials provided with the distribution. 00020 // 00021 // 3. Neither the name of the Corporation nor the names of the 00022 // contributors may be used to endorse or promote products derived from 00023 // this software without specific prior written permission. 00024 // 00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY 00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE 00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00036 // 00037 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 00038 // 00039 // *********************************************************************** 00040 // @HEADER 00041 00042 #ifndef TEUCHOS_EXPLICIT_INSTANTIATION_HELPERS_HPP 00043 #define TEUCHOS_EXPLICIT_INSTANTIATION_HELPERS_HPP 00044 00045 00053 #include "Teuchos_ConfigDefs.hpp" 00054 00055 00056 // 00057 // 2007/07/10: rabartl: NOTE: Semicolons must only be used at the lowest level 00058 // of final code to ensure that there will not be any empty semicolon lines 00059 // that might issue a compiler warning or error. In general, I like to define 00060 // macros that need a semicolon when you use them because my emacs mode will 00061 // then do the indentation correctly. However, this is not a big deal since 00062 // these macros only get used in a final *.cpp file and at that point they are 00063 // only used once in the entire mostly empty file. 00064 // 00065 00066 #ifdef HAVE_TEUCHOS_FLOAT 00067 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_FLOAT(INSTANT_MACRO)\ 00068 INSTANT_MACRO(float) 00069 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_FLOAT(CLASSNAME)\ 00070 template class CLASSNAME<float>; 00071 #else 00072 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_FLOAT(INSTANT_MACRO) 00073 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_FLOAT(CLASSNAME) 00074 #endif 00075 00076 00077 #define TEUCHOS_MACRO_TEMPLATE_INSTANT_DOUBLE(INSTANT_MACRO)\ 00078 INSTANT_MACRO(double) 00079 #define TEUCHOS_CLASS_TEMPLATE_INSTANT_DOUBLE(CLASSNAME)\ 00080 template class CLASSNAME<double>; 00081 00082 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(HAVE_TEUCHOS_FLOAT) 00083 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_COMPLEX_FLOAT(INSTANT_MACRO)\ 00084 INSTANT_MACRO(std::complex<float>) 00085 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_COMPLEX_FLOAT(CLASSNAME)\ 00086 template class CLASSNAME<std::complex<float> >; 00087 #else 00088 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_COMPLEX_FLOAT(INSTANT_MACRO) 00089 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_COMPLEX_FLOAT(CLASSNAME) 00090 #endif 00091 00092 00093 #ifdef HAVE_TEUCHOS_COMPLEX 00094 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_COMPLEX_DOUBLE(INSTANT_MACRO)\ 00095 INSTANT_MACRO(std::complex<double>) 00096 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_COMPLEX_DOUBLE(CLASSNAME)\ 00097 template class CLASSNAME<std::complex<double> >; 00098 #else 00099 # define TEUCHOS_MACRO_TEMPLATE_INSTANT_COMPLEX_DOUBLE(INSTANT_MACRO) 00100 # define TEUCHOS_CLASS_TEMPLATE_INSTANT_COMPLEX_DOUBLE(CLASSNAME) 00101 #endif 00102 00103 00107 #define TEUCHOS_MACRO_TEMPLATE_INSTANT_REAL_SCALAR_TYPES(MACRONAME) \ 00108 TEUCHOS_MACRO_TEMPLATE_INSTANT_FLOAT(MACRONAME) \ 00109 TEUCHOS_MACRO_TEMPLATE_INSTANT_DOUBLE(MACRONAME) 00110 00111 00115 #define TEUCHOS_MACRO_TEMPLATE_INSTANT_SCALAR_TYPES(MACRONAME)\ 00116 TEUCHOS_MACRO_TEMPLATE_INSTANT_FLOAT(MACRONAME) \ 00117 TEUCHOS_MACRO_TEMPLATE_INSTANT_DOUBLE(MACRONAME) \ 00118 TEUCHOS_MACRO_TEMPLATE_INSTANT_COMPLEX_FLOAT(MACRONAME) \ 00119 TEUCHOS_MACRO_TEMPLATE_INSTANT_COMPLEX_DOUBLE(MACRONAME) 00120 00121 00125 #define TEUCHOS_CLASS_TEMPLATE_INSTANT_REAL_SCALAR_TYPES(CLASSNAME)\ 00126 TEUCHOS_CLASS_TEMPLATE_INSTANT_FLOAT(CLASSNAME) \ 00127 TEUCHOS_CLASS_TEMPLATE_INSTANT_DOUBLE(CLASSNAME) 00128 00129 00133 #define TEUCHOS_CLASS_TEMPLATE_INSTANT_SCALAR_TYPES(CLASSNAME)\ 00134 TEUCHOS_CLASS_TEMPLATE_INSTANT_FLOAT(CLASSNAME) \ 00135 TEUCHOS_CLASS_TEMPLATE_INSTANT_DOUBLE(CLASSNAME) \ 00136 TEUCHOS_CLASS_TEMPLATE_INSTANT_COMPLEX_FLOAT(CLASSNAME) \ 00137 TEUCHOS_CLASS_TEMPLATE_INSTANT_COMPLEX_DOUBLE(CLASSNAME) 00138 00139 00140 #endif // TEUCHOS_EXPLICIT_INSTANTIATION_HELPERS_HPP
1.7.6.1