13 #ifndef _TEUCHOS_ORDINALTRAITS_HPP_
14 #define _TEUCHOS_ORDINALTRAITS_HPP_
45 static inline T
notDefined() {
return T::this_type_is_missing_a_specialization(); }
73 #ifndef DOXYGEN_SHOULD_SKIP_THIS
76 struct OrdinalTraits<char> {
78 static inline char zero() {
return(0);}
79 static inline char one() {
return(1);}
80 static inline char invalid() {
return(std::numeric_limits<char>::max());}
81 static inline char max() {
return(std::numeric_limits<char>::max()-
one());}
82 static inline std::string
name() {
return(
"char");}
86 struct OrdinalTraits<short int> {
88 static inline short int zero() {
return(0);}
89 static inline short int one() {
return(1);}
90 static inline short int invalid() {
return(-1);}
91 static inline short int max() {
return(std::numeric_limits<short int>::max());}
92 static inline std::string
name() {
return(
"short int");}
96 struct OrdinalTraits<int> {
98 static inline int zero() {
return(0);}
99 static inline int one() {
return(1);}
100 static inline int invalid() {
return(-1);}
101 static inline int max() {
return(std::numeric_limits<int>::max());}
102 static inline std::string
name() {
return(
"int");}
106 struct OrdinalTraits<unsigned int> {
108 static inline unsigned int zero() {
return(0);}
109 static inline unsigned int one() {
return(1);}
110 static inline unsigned int invalid() {
return(std::numeric_limits<unsigned int>::max());}
111 static inline unsigned int max() {
return(std::numeric_limits<unsigned int>::max()-1);}
112 static inline std::string
name() {
return(
"unsigned int");}
116 struct OrdinalTraits<long int> {
118 static inline long int zero() {
return(static_cast<long int>(0));}
119 static inline long int one() {
return(static_cast<long int>(1));}
120 static inline long int invalid() {
return(static_cast<long int>(-1));}
121 static inline long int max() {
return(std::numeric_limits<long int>::max());}
122 static inline std::string
name() {
return(
"long int");}
126 struct OrdinalTraits<long unsigned int> {
128 static inline long unsigned int zero() {
return(static_cast<long unsigned int>(0));}
129 static inline long unsigned int one() {
return(static_cast<long unsigned int>(1));}
130 static inline long unsigned int invalid() {
return(std::numeric_limits<long unsigned int>::max());}
131 static inline long unsigned int max() {
return(std::numeric_limits<long unsigned int>::max()-1);}
132 static inline std::string
name() {
return(
"long unsigned int");}
136 struct OrdinalTraits<long long int> {
138 static inline long long int zero() {
return(static_cast<long long int>(0));}
139 static inline long long int one() {
return(static_cast<long long int>(1));}
140 static inline long long int invalid() {
return(static_cast<long long int>(-1));}
141 static inline long long int max() {
return(std::numeric_limits<long long int>::max());}
142 static inline std::string
name() {
return(
"long long int");}
146 struct OrdinalTraits<unsigned long long int> {
148 static inline unsigned long long int zero() {
return(static_cast<unsigned long long int>(0));}
149 static inline unsigned long long int one() {
return(static_cast<unsigned long long int>(1));}
150 static inline unsigned long long int invalid() {
return(std::numeric_limits<unsigned long long int>::max());}
151 static inline unsigned long long int max() {
return(std::numeric_limits<unsigned long long int>::max()-1);}
152 static inline std::string
name() {
return(
"unsigned long long int");}
155 #ifdef HAVE_TEUCHOS___INT64
158 struct OrdinalTraits<__int64> {
160 static inline __int64
zero() {
return(static_cast<__int64>(0));}
161 static inline __int64
one() {
return(static_cast<__int64>(1));}
162 static inline __int64
invalid() {
return(std::numeric_limits<__int64>::max());}
163 static inline __int64
max() {
return(std::numeric_limits<__int64>::max()-1);}
164 static inline std::string
name() {
return(
"__int64");}
168 struct OrdinalTraits<unsigned __int64> {
170 static inline unsigned __int64
zero() {
return(static_cast<unsigned __int64>(0));}
171 static inline unsigned __int64
one() {
return(static_cast<unsigned __int64>(1));}
172 static inline unsigned __int64
invalid() {
return(std::numeric_limits<unsigned __int64>::max());}
173 static inline unsigned __int64
max() {
return(std::numeric_limits<unsigned __int64>::max()-1);}
174 static inline std::string
name() {
return(
"unsigned __int64");}
177 #endif // HAVE_TEUCHOS___INT64
179 #endif // DOXYGEN_SHOULD_SKIP_THIS
183 #endif // _TEUCHOS_ORDINALTRAITS_HPP_
static T one()
Returns representation of one for this ordinal type.
static T zero()
Returns representation of zero for this ordinal type.
static T invalid()
Returns a value designating an invalid number. For signed types, this is typically negative one; for ...
static const bool hasMachineParameters
Allows testing to see if ordinal traits machine parameters are defined.
Teuchos header file which uses auto-configuration information to include necessary C++ headers...
static T max()
Returns a value designating the maximum value accessible by code using OrdinalTraits.
This structure defines some basic traits for the ordinal field type.
static T notDefined()
This function should not compile if there is an attempt to instantiate!
static std::string name()
Returns name of this ordinal type.