Teuchos - Trilinos Tools Package Version of the Day
Teuchos_ScalarTraitsDecl.hpp
Go to the documentation of this file.
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_SCALARTRAITS_DECL_HPP_
00043 #define _TEUCHOS_SCALARTRAITS_DECL_HPP_
00044 
00049 #include "Teuchos_ConfigDefs.hpp"
00050 
00051 
00052 namespace Teuchos {
00053 
00054 
00055 template <typename T>
00056 struct UndefinedScalarTraits
00057 {
00059   static inline T notDefined() { return T::this_type_is_missing_a_specialization(); }
00060 };
00061 
00062 
00063 /* This is the default structure used by ScalarTraits<T> to produce a compile time
00064   error when the specialization does not exist for type <tt>T</tt>.
00065 */
00066 
00067 
00088 template <typename T>
00089 struct ScalarTraits
00090 {
00092   typedef T magnitudeType;
00094   typedef T halfPrecision;
00096   typedef T doublePrecision;
00098   static const bool isComplex = false;
00100   static const bool isOrdinal = false;
00102   static const bool isComparable = false;
00107   static const bool hasMachineParameters = false;
00109   static inline magnitudeType eps()   { return UndefinedScalarTraits<T>::notDefined(); }
00111   static inline magnitudeType sfmin() { return UndefinedScalarTraits<T>::notDefined(); }
00113   static inline magnitudeType base()  { return UndefinedScalarTraits<T>::notDefined(); }
00115   static inline magnitudeType prec()  { return UndefinedScalarTraits<T>::notDefined(); }
00117   static inline magnitudeType t()     { return UndefinedScalarTraits<T>::notDefined(); }
00119   static inline magnitudeType rnd()   { return UndefinedScalarTraits<T>::notDefined(); }
00121   static inline magnitudeType emin()  { return UndefinedScalarTraits<T>::notDefined(); }
00123   static inline magnitudeType rmin()  { return UndefinedScalarTraits<T>::notDefined(); }
00125   static inline magnitudeType emax()  { return UndefinedScalarTraits<T>::notDefined(); }
00127   static inline magnitudeType rmax()  { return UndefinedScalarTraits<T>::notDefined(); }
00129   static inline magnitudeType magnitude(T a) { return UndefinedScalarTraits<T>::notDefined(); }
00131   static inline T zero()                     { return UndefinedScalarTraits<T>::notDefined(); }
00133   static inline T one()                      { return UndefinedScalarTraits<T>::notDefined(); }
00135   static inline magnitudeType real(T a) { return UndefinedScalarTraits<T>::notDefined(); }
00137   static inline magnitudeType imag(T a) { return UndefinedScalarTraits<T>::notDefined(); }
00139   static inline T conjugate(T a) { return UndefinedScalarTraits<T>::notDefined(); }
00141   static inline T nan()                      { return UndefinedScalarTraits<T>::notDefined(); }
00143   static inline bool isnaninf(const T& x)     { return UndefinedScalarTraits<T>::notDefined(); }
00145   static inline void seedrandom(unsigned int s) { int i; T t = &i; }
00147   static inline T random()                   { return UndefinedScalarTraits<T>::notDefined(); }
00149   static inline std::string name()           { (void)UndefinedScalarTraits<T>::notDefined(); return 0; }
00151   static inline T squareroot(T x) { return UndefinedScalarTraits<T>::notDefined(); }
00153   static inline T pow(T x, T y) { return UndefinedScalarTraits<T>::notDefined(); }
00154 };
00155 
00156   
00157 } // Teuchos namespace
00158 
00159 
00160 #endif // _TEUCHOS_SCALARTRAITS_DECL_HPP_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines