Teuchos - Trilinos Tools Package Version of the Day
Loading...
Searching...
No Matches
Teuchos_OrdinalTraits.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// Kris
11// 07.08.03 -- Move into Teuchos package/namespace
12
13#ifndef _TEUCHOS_ORDINALTRAITS_HPP_
14#define _TEUCHOS_ORDINALTRAITS_HPP_
15
21#include <limits>
22
36/* This is the default structure used by OrdinalTraits<T> to produce a compile time
37 error when the specialization does not exist for type <tt>T</tt>.
38*/
39namespace Teuchos {
40
41template<class T>
42struct UndefinedOrdinalTraits
43{
45 static inline T notDefined() { return T::this_type_is_missing_a_specialization(); }
46};
47
48template<class T>
50
52 static const bool hasMachineParameters = false;
53
55 static inline T zero() { return UndefinedOrdinalTraits<T>::notDefined(); }
56
58 static inline T one() { return UndefinedOrdinalTraits<T>::notDefined(); }
59
61
64 static inline T max() { return UndefinedOrdinalTraits<T>::notDefined(); }
65
67 static inline T invalid() { return UndefinedOrdinalTraits<T>::notDefined(); }
68
70 static inline std::string name() { return UndefinedOrdinalTraits<T>::notDefined(); }
71};
72
73#ifndef DOXYGEN_SHOULD_SKIP_THIS
74
75template<>
76struct OrdinalTraits<char> {
77 static const bool hasMachineParameters = false;
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");}
83};
84
85template<>
86struct OrdinalTraits<short int> {
87 static const bool hasMachineParameters = false;
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");}
93};
94
95template<>
96struct OrdinalTraits<int> {
97 static const bool hasMachineParameters = false;
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");}
103};
104
105template<>
106struct OrdinalTraits<unsigned int> {
107 static const bool hasMachineParameters = false;
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");}
113};
114
115template<>
116struct OrdinalTraits<long int> {
117 static const bool hasMachineParameters = false;
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");}
123};
124
125template<>
126struct OrdinalTraits<long unsigned int> {
127 static const bool hasMachineParameters = false;
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");}
133};
134
135template<>
136struct OrdinalTraits<long long int> {
137 static const bool hasMachineParameters = false;
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");}
143};
144
145template<>
146struct OrdinalTraits<unsigned long long int> {
147 static const bool hasMachineParameters = false;
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");}
153};
154
155#ifdef HAVE_TEUCHOS___INT64
156
157template<>
158struct OrdinalTraits<__int64> {
159 static const bool hasMachineParameters = false;
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");}
165};
166
167template<>
168struct OrdinalTraits<unsigned __int64> {
169 static const bool hasMachineParameters = false;
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");}
175};
176
177#endif // HAVE_TEUCHOS___INT64
178
179#endif // DOXYGEN_SHOULD_SKIP_THIS
180
181} // namespace Teuchos
182
183#endif // _TEUCHOS_ORDINALTRAITS_HPP_
Teuchos header file which uses auto-configuration information to include necessary C++ headers.
Smart reference counting pointer class for automatic garbage collection.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
This structure defines some basic traits for the ordinal field type.
static const bool hasMachineParameters
Allows testing to see if ordinal traits machine parameters are defined.
static std::string name()
Returns name of this ordinal type.
static T invalid()
Returns a value designating an invalid number. For signed types, this is typically negative one; for ...
static T one()
Returns representation of one for this ordinal type.
static T max()
Returns a value designating the maximum value accessible by code using OrdinalTraits.
static T zero()
Returns representation of zero for this ordinal type.