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//
4// Teuchos: Common Tools Package
5// Copyright (2004) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38//
39// ***********************************************************************
40// @HEADER
41
42// Kris
43// 07.08.03 -- Move into Teuchos package/namespace
44
45#ifndef _TEUCHOS_ORDINALTRAITS_HPP_
46#define _TEUCHOS_ORDINALTRAITS_HPP_
47
53#include <limits>
54
68/* This is the default structure used by OrdinalTraits<T> to produce a compile time
69 error when the specialization does not exist for type <tt>T</tt>.
70*/
71namespace Teuchos {
72
73template<class T>
74struct UndefinedOrdinalTraits
75{
77 static inline T notDefined() { return T::this_type_is_missing_a_specialization(); }
78};
79
80template<class T>
82
84 static const bool hasMachineParameters = false;
85
87 static inline T zero() { return UndefinedOrdinalTraits<T>::notDefined(); }
88
90 static inline T one() { return UndefinedOrdinalTraits<T>::notDefined(); }
91
93
96 static inline T max() { return UndefinedOrdinalTraits<T>::notDefined(); }
97
99 static inline T invalid() { return UndefinedOrdinalTraits<T>::notDefined(); }
100
102 static inline std::string name() { return UndefinedOrdinalTraits<T>::notDefined(); }
103};
104
105#ifndef DOXYGEN_SHOULD_SKIP_THIS
106
107template<>
108struct OrdinalTraits<char> {
109 static const bool hasMachineParameters = false;
110 static inline char zero() {return(0);}
111 static inline char one() {return(1);}
112 static inline char invalid() {return(std::numeric_limits<char>::max());}
113 static inline char max() {return(std::numeric_limits<char>::max()-one());}
114 static inline std::string name() {return("char");}
115};
116
117template<>
118struct OrdinalTraits<short int> {
119 static const bool hasMachineParameters = false;
120 static inline short int zero() {return(0);}
121 static inline short int one() {return(1);}
122 static inline short int invalid() {return(-1);}
123 static inline short int max() {return(std::numeric_limits<short int>::max());}
124 static inline std::string name() {return("short int");}
125};
126
127template<>
128struct OrdinalTraits<int> {
129 static const bool hasMachineParameters = false;
130 static inline int zero() {return(0);}
131 static inline int one() {return(1);}
132 static inline int invalid() {return(-1);}
133 static inline int max() {return(std::numeric_limits<int>::max());}
134 static inline std::string name() {return("int");}
135};
136
137template<>
138struct OrdinalTraits<unsigned int> {
139 static const bool hasMachineParameters = false;
140 static inline unsigned int zero() {return(0);}
141 static inline unsigned int one() {return(1);}
142 static inline unsigned int invalid() {return(std::numeric_limits<unsigned int>::max());}
143 static inline unsigned int max() {return(std::numeric_limits<unsigned int>::max()-1);}
144 static inline std::string name() {return("unsigned int");}
145};
146
147template<>
148struct OrdinalTraits<long int> {
149 static const bool hasMachineParameters = false;
150 static inline long int zero() {return(static_cast<long int>(0));}
151 static inline long int one() {return(static_cast<long int>(1));}
152 static inline long int invalid() {return(static_cast<long int>(-1));}
153 static inline long int max() {return(std::numeric_limits<long int>::max());}
154 static inline std::string name() {return("long int");}
155};
156
157template<>
158struct OrdinalTraits<long unsigned int> {
159 static const bool hasMachineParameters = false;
160 static inline long unsigned int zero() {return(static_cast<long unsigned int>(0));}
161 static inline long unsigned int one() {return(static_cast<long unsigned int>(1));}
162 static inline long unsigned int invalid() {return(std::numeric_limits<long unsigned int>::max());}
163 static inline long unsigned int max() {return(std::numeric_limits<long unsigned int>::max()-1);}
164 static inline std::string name() {return("long unsigned int");}
165};
166
167template<>
168struct OrdinalTraits<long long int> {
169 static const bool hasMachineParameters = false;
170 static inline long long int zero() {return(static_cast<long long int>(0));}
171 static inline long long int one() {return(static_cast<long long int>(1));}
172 static inline long long int invalid() {return(static_cast<long long int>(-1));}
173 static inline long long int max() {return(std::numeric_limits<long long int>::max());}
174 static inline std::string name() {return("long long int");}
175};
176
177template<>
178struct OrdinalTraits<unsigned long long int> {
179 static const bool hasMachineParameters = false;
180 static inline unsigned long long int zero() {return(static_cast<unsigned long long int>(0));}
181 static inline unsigned long long int one() {return(static_cast<unsigned long long int>(1));}
182 static inline unsigned long long int invalid() {return(std::numeric_limits<unsigned long long int>::max());}
183 static inline unsigned long long int max() {return(std::numeric_limits<unsigned long long int>::max()-1);}
184 static inline std::string name() {return("unsigned long long int");}
185};
186
187#ifdef HAVE_TEUCHOS___INT64
188
189template<>
190struct OrdinalTraits<__int64> {
191 static const bool hasMachineParameters = false;
192 static inline __int64 zero() {return(static_cast<__int64>(0));}
193 static inline __int64 one() {return(static_cast<__int64>(1));}
194 static inline __int64 invalid() {return(std::numeric_limits<__int64>::max());}
195 static inline __int64 max() {return(std::numeric_limits<__int64>::max()-1);}
196 static inline std::string name() {return("__int64");}
197};
198
199template<>
200struct OrdinalTraits<unsigned __int64> {
201 static const bool hasMachineParameters = false;
202 static inline unsigned __int64 zero() {return(static_cast<unsigned __int64>(0));}
203 static inline unsigned __int64 one() {return(static_cast<unsigned __int64>(1));}
204 static inline unsigned __int64 invalid() {return(std::numeric_limits<unsigned __int64>::max());}
205 static inline unsigned __int64 max() {return(std::numeric_limits<unsigned __int64>::max()-1);}
206 static inline std::string name() {return("unsigned __int64");}
207};
208
209#endif // HAVE_TEUCHOS___INT64
210
211#endif // DOXYGEN_SHOULD_SKIP_THIS
212
213} // namespace Teuchos
214
215#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.