OpenMesh

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
NumLimitsT.hh
Go to the documentation of this file.
1 /*===========================================================================*\
2 * *
3 * OpenMesh *
4 * Copyright (C) 2001-2012 by Computer Graphics Group, RWTH Aachen *
5 * www.openmesh.org *
6 * *
7 *---------------------------------------------------------------------------*
8 * This file is part of OpenMesh. *
9 * *
10 * OpenMesh is free software: you can redistribute it and/or modify *
11 * it under the terms of the GNU Lesser General Public License as *
12 * published by the Free Software Foundation, either version 3 of *
13 * the License, or (at your option) any later version with the *
14 * following exceptions: *
15 * *
16 * If other files instantiate templates or use macros *
17 * or inline functions from this file, or you compile this file and *
18 * link it with other files to produce an executable, this file does *
19 * not by itself cause the resulting executable to be covered by the *
20 * GNU Lesser General Public License. This exception does not however *
21 * invalidate any other reasons why the executable file might be *
22 * covered by the GNU Lesser General Public License. *
23 * *
24 * OpenMesh is distributed in the hope that it will be useful, *
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
27 * GNU Lesser General Public License for more details. *
28 * *
29 * You should have received a copy of the GNU LesserGeneral Public *
30 * License along with OpenMesh. If not, *
31 * see <http://www.gnu.org/licenses/>. *
32 * *
33 \*===========================================================================*/
34
35 /*===========================================================================*\
36 * *
37 * $Revision: 736 $ *
38 * $Date: 2012-10-08 09:30:49 +0200 (Mo, 08. Okt 2012) $ *
39 * *
40 \*===========================================================================*/
41
46 //=============================================================================
47 //
48 // CLASS NumLimitsT
49 //
50 //=============================================================================
51
52 #ifndef OPENMESH_UTILS_NUMLIMITS_HH
53 #define OPENMESH_UTILS_NUMLIMITS_HH
54
55
56 //== INCLUDES =================================================================
57
58 #include "Config.hh"
59 #include <limits.h>
60 #include <float.h>
61
62
63 //== NAMESPEACES ==============================================================
64
65 namespace OpenMesh { // BEGIN_NS_OPENMESH
66 namespace Utils { // BEGIN_NS_UTILS
67
68
69 //== CLASS DEFINITION =========================================================
70
71
88 template <typename Scalar>
89 class NumLimitsT
90 {
91 public:
93 static inline Scalar min() { return 0; }
95 static inline Scalar max() { return 0; }
96
97 static inline bool is_float() { return false; }
98 static inline bool is_integer() { return !NumLimitsT<Scalar>::is_float(); }
99 static inline bool is_signed() { return true; }
100 };
101
102 // is_float
103
104 template<>
105 inline bool NumLimitsT<float>::is_float() { return true; }
106
107 template<>
108 inline bool NumLimitsT<double>::is_float() { return true; }
109
110 template<>
111 inline bool NumLimitsT<long double>::is_float() { return true; }
112
113 // is_signed
114
115 template<>
116 inline bool NumLimitsT<unsigned char>::is_signed() { return false; }
117
118 template<>
119 inline bool NumLimitsT<unsigned short>::is_signed() { return false; }
120
121 template<>
122 inline bool NumLimitsT<unsigned int>::is_signed() { return false; }
123
124 template<>
125 inline bool NumLimitsT<unsigned long>::is_signed() { return false; }
126
127 template<>
128 inline bool NumLimitsT<unsigned long long>::is_signed() { return false; }
129
130 // min/max
131 template<> inline int NumLimitsT<int>::min() { return INT_MIN; }
132 template<> inline int NumLimitsT<int>::max() { return INT_MAX; }
133
134 template<> inline float NumLimitsT<float>::min() { return FLT_MIN; }
135 template<> inline float NumLimitsT<float>::max() { return FLT_MAX; }
136
137 template<> inline double NumLimitsT<double>::min() { return DBL_MIN; }
138 template<> inline double NumLimitsT<double>::max() { return DBL_MAX; }
139
140
141 //=============================================================================
142 } // END_NS_UTILS
143 } // END_NS_OPENMESH
144 //=============================================================================
145 #endif // OPENMESH_NUMLIMITS_HH defined
146 //=============================================================================
147