Atoms Crowd  7.0.0
Limits.h
1 #pragma once
2 // ===========================================================================
3 // Copyright (c) 2015-2024 Toolchefs Ltd. All rights reserved.
4 //
5 // Use of this software is subject to the terms of the Toolchefs license
6 // agreement provided at the time of installation or download, or which
7 // otherwise accompanies this software in either electronic or hard copy form.
8 // ===========================================================================
9 #include <stdint.h>
10 
11 namespace ToolchefsSTL
12 {
13 
14  template <typename NumericType>
15  struct NumericLimits;
16 
17  template<>
18  struct NumericLimits<uint8_t>
19  {
20  typedef uint8_t NumericType;
21 
22  static constexpr NumericType min()
23  {
24 #ifndef _WIN32
25  return 0;
26 #else
27  return 0ui8;
28 #endif
29  }
30 
31  static constexpr NumericType max()
32  {
33  return UINT8_MAX;
34  }
35  };
36 
37 
38  template<>
39  struct NumericLimits<uint16_t>
40  {
41  typedef uint16_t NumericType;
42 
43  static constexpr NumericType min()
44  {
45 #ifndef _WIN32
46  return 0;
47 #else
48  return 0ui16;
49 #endif
50  }
51 
52  static constexpr NumericType max()
53  {
54  return UINT16_MAX;
55  }
56  };
57 
58 
59  template<>
60  struct NumericLimits<uint32_t>
61  {
62  typedef uint32_t NumericType;
63 
64  static constexpr NumericType min()
65  {
66 #ifndef _WIN32
67  return 0;
68 #else
69  return 0ui32;
70 #endif
71  }
72 
73  static constexpr NumericType max()
74  {
75  return UINT32_MAX;
76  }
77  };
78 
79 
80  template<>
81  struct NumericLimits<uint64_t>
82  {
83  typedef uint64_t NumericType;
84 
85  static constexpr NumericType min()
86  {
87 #ifndef _WIN32
88  return 0;
89 #else
90  return 0ui64;
91 #endif
92  }
93 
94  static constexpr NumericType max()
95  {
96  return UINT64_MAX;
97  }
98  };
99 
100 
101  template<>
102  struct NumericLimits<int8_t>
103  {
104  typedef int8_t NumericType;
105 
106  static constexpr NumericType min()
107  {
108  return INT8_MIN;
109  }
110 
111  static constexpr NumericType max()
112  {
113  return INT8_MAX;
114  }
115  };
116 
117 
118  template<>
119  struct NumericLimits<int16_t>
120  {
121  typedef int16_t NumericType;
122 
123  static constexpr NumericType min()
124  {
125  return INT16_MIN;
126  }
127 
128  static constexpr NumericType max()
129  {
130  return INT16_MAX;
131  }
132  };
133 
134 
135  template<>
136  struct NumericLimits<int32_t>
137  {
138  typedef int32_t NumericType;
139 
140  static constexpr NumericType min()
141  {
142  return INT32_MIN;
143  }
144 
145  static constexpr NumericType max()
146  {
147  return INT32_MAX;
148  }
149  };
150 
151 
152  template<>
153  struct NumericLimits<int64_t>
154  {
155  typedef int64_t NumericType;
156 
157  static constexpr NumericType min()
158  {
159  return INT64_MIN;
160  }
161 
162  static constexpr NumericType max()
163  {
164  return INT64_MAX;
165  }
166  };
167 
168 
169  template<>
170  struct NumericLimits<float>
171  {
172  typedef float NumericType;
173 
174  static constexpr NumericType min()
175  {
176  return 1.175494351e-38F;
177  }
178 
179  static constexpr NumericType max()
180  {
181  return 3.402823466e+38F;
182  }
183  };
184 
185 
186  template<>
187  struct NumericLimits<double>
188  {
189  typedef double NumericType;
190 
191  static constexpr NumericType min()
192  {
193  return 2.2250738585072014e-308;
194  }
195 
196  static constexpr NumericType max()
197  {
198  return 1.7976931348623158e+308;
199  }
200  };
201 
202 }
Definition: Limits.h:15