13#ifndef _TEUCHOS_ORDINALTRAITS_HPP_ 
   14#define _TEUCHOS_ORDINALTRAITS_HPP_ 
   42struct UndefinedOrdinalTraits
 
   45  static inline T notDefined() { 
return T::this_type_is_missing_a_specialization(); }
 
   55  static inline T zero()                     { 
return UndefinedOrdinalTraits<T>::notDefined(); }
 
   58  static inline T one()                      { 
return UndefinedOrdinalTraits<T>::notDefined(); }
 
   64  static inline T max()                  { 
return UndefinedOrdinalTraits<T>::notDefined(); }
 
   67  static inline T invalid()                  { 
return UndefinedOrdinalTraits<T>::notDefined(); }
 
   70  static inline std::string 
name()           { 
return UndefinedOrdinalTraits<T>::notDefined(); }
 
 
   73#ifndef DOXYGEN_SHOULD_SKIP_THIS 
   76struct 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");}
 
   86struct 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");}
 
   96struct 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");}
 
  106struct 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");}
 
  116struct 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");}
 
  126struct 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");}
 
  136struct 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");}
 
  146struct 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 
  158struct 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");}
 
  168struct 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");}
 
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.