00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef TEUCHOS_PRIMITIVE_TYPE_TRAITS_H
00033 #define TEUCHOS_PRIMITIVE_TYPE_TRAITS_H
00034
00035 #include "Teuchos_TestForException.hpp"
00036
00042 namespace Teuchos {
00043
00045
00055 template <class T> class PrimitiveTypeTraits {
00056 public:
00058 typedef T primitiveType;
00060 static int numPrimitiveObjs() { return 1; }
00062 static void extractPrimitiveObjs(
00063 const T &obj
00064 ,const int numPrimitiveObjs
00065 ,primitiveType primitiveObjs[]
00066 )
00067 {
00068 #ifdef _DEBUG
00069 TEST_FOR_EXCEPTION( numPrimitiveObjs!=1 || primitiveObjs==NULL, std::invalid_argument, "Error!" );
00070 #endif
00071 primitiveObjs[0] = obj;
00072 }
00074 static void loadPrimitiveObjs(
00075 const int numPrimitiveObjs
00076 ,const primitiveType primitiveObjs[]
00077 ,T *obj
00078 )
00079 {
00080 #ifdef _DEBUG
00081 TEST_FOR_EXCEPTION( numPrimitiveObjs!=1 || primitiveObjs==NULL, std::invalid_argument, "Error!" );
00082 #endif
00083 *obj = primitiveObjs[0];
00084 }
00085 };
00086
00087 #ifdef HAVE_COMPLEX
00088
00090
00092 template <class T> class PrimitiveTypeTraits< std::complex<T> > {
00093 public:
00095 typedef T primitiveType;
00097 static int numPrimitiveObjs() { return 2; }
00099 static void extractPrimitiveObjs(
00100 const std::complex<T> &obj
00101 ,const int numPrimitiveObjs
00102 ,primitiveType primitiveObjs[]
00103 )
00104 {
00105 #ifdef _DEBUG
00106 TEST_FOR_EXCEPTION( numPrimitiveObjs!=2 || primitiveObjs==NULL, std::invalid_argument, "Error!" );
00107 #endif
00108 primitiveObjs[0] = obj.real();
00109 primitiveObjs[1] = obj.imag();
00110 }
00112 static void loadPrimitiveObjs(
00113 const int numPrimitiveObjs
00114 ,const primitiveType primitiveObjs[]
00115 ,std::complex<T> *obj
00116 )
00117 {
00118 #ifdef _DEBUG
00119 TEST_FOR_EXCEPTION( numPrimitiveObjs!=2 || primitiveObjs==NULL, std::invalid_argument, "Error!" );
00120 #endif
00121 *obj = std::complex<T>( primitiveObjs[0], primitiveObjs[1] );
00122 }
00123 };
00124
00125 #endif // HAVE_COMPLEX
00126
00127 }
00128
00129 #endif // TEUCHOS_PRIMITIVE_TYPE_TRAITS_H