Jet  v1.3.3
constants.h
Go to the documentation of this file.
1 // Copyright (c) 2019 Doyub Kim
2 //
3 // I am making my contributions/submissions to this project solely in my
4 // personal capacity and am not conveying any rights to any intellectual
5 // property of any third parties.
6 
7 #ifndef INCLUDE_JET_CONSTANTS_H_
8 #define INCLUDE_JET_CONSTANTS_H_
9 
10 #include <jet/macros.h>
11 #include <cmath>
12 #include <limits>
13 
14 namespace jet {
15 
16 // MARK: Zero
17 
19 constexpr size_t kZeroSize = 0;
20 
22 constexpr ssize_t kZeroSSize = 0;
23 
25 template <typename T>
26 constexpr T zero() {
27  return 0;
28 }
29 
31 template <>
32 constexpr float zero<float>() {
33  return 0.f;
34 }
35 
37 template <>
38 constexpr double zero<double>() {
39  return 0.0;
40 }
41 
42 // MARK: One
43 
45 constexpr size_t kOneSize = 1;
46 
48 constexpr ssize_t kOneSSize = 1;
49 
51 template <typename T>
52 constexpr T one() {
53  return 1;
54 }
55 
57 template <>
58 constexpr float one<float>() {
59  return 1.f;
60 }
61 
63 template <>
64 constexpr double one<double>() {
65  return 1.0;
66 }
67 
68 // MARK: Epsilon
69 
71 constexpr float kEpsilonF = std::numeric_limits<float>::epsilon();
72 
74 constexpr double kEpsilonD = std::numeric_limits<double>::epsilon();
75 
76 // MARK: Max
77 
80 
83 
86 
89 
90 // MARK: Pi
91 
93 constexpr float kPiF = 3.14159265358979323846264338327950288f;
94 
96 constexpr double kPiD = 3.14159265358979323846264338327950288;
97 
99 template <typename T>
100 constexpr T pi() {
101  return static_cast<T>(kPiD);
102 }
103 
105 template <>
106 constexpr float pi<float>() {
107  return kPiF;
108 }
109 
111 template <>
112 constexpr double pi<double>() {
113  return kPiD;
114 }
115 
116 // MARK: Pi/2
117 
119 constexpr float kHalfPiF = 1.57079632679489661923132169163975144f;
120 
122 constexpr double kHalfPiD = 1.57079632679489661923132169163975144;
123 
125 template <typename T>
126 constexpr T halfPi() {
127  return static_cast<T>(kHalfPiD);
128 }
129 
131 template <>
132 constexpr float halfPi<float>() {
133  return kHalfPiF;
134 }
135 
137 template <>
138 constexpr double halfPi<double>() {
139  return kHalfPiD;
140 }
141 
142 // MARK: Pi/4
143 
145 constexpr float kQuarterPiF = 0.785398163397448309615660845819875721f;
146 
148 constexpr double kQuarterPiD = 0.785398163397448309615660845819875721;
149 
151 template <typename T>
152 constexpr T quarterPi() {
153  return static_cast<T>(kQuarterPiD);
154 }
155 
157 template <>
158 constexpr float quarterPi<float>() {
159  return kQuarterPiF;
160 }
161 
163 template <>
164 constexpr double quarterPi<double>() {
165  return kQuarterPiD;
166 }
167 
168 // MARK: 2*Pi
169 
171 constexpr float kTwoPiF = static_cast<float>(2.0 * kPiD);
172 
174 constexpr double kTwoPiD = 2.0 * kPiD;
175 
177 template <typename T>
178 constexpr T twoPi() {
179  return static_cast<T>(kTwoPiD);
180 }
181 
183 template <>
184 constexpr float twoPi<float>() {
185  return kTwoPiF;
186 }
187 
189 template <>
190 constexpr double twoPi<double>() {
191  return kTwoPiD;
192 }
193 
194 // MARK: 4*Pi
195 
197 constexpr float kFourPiF = static_cast<float>(4.0 * kPiD);
198 
200 constexpr double kFourPiD = 4.0 * kPiD;
201 
203 template <typename T>
204 constexpr T fourPi() {
205  return static_cast<T>(kFourPiD);
206 }
207 
209 template <>
210 constexpr float fourPi<float>() {
211  return kFourPiF;
212 }
213 
215 template <>
216 constexpr double fourPi<double>() {
217  return kFourPiD;
218 }
219 
220 // MARK: 1/Pi
221 
223 constexpr float kInvPiF = static_cast<float>(1.0 / kPiD);
224 
226 constexpr double kInvPiD = 1.0 / kPiD;
227 
229 template <typename T>
230 constexpr T invPi() {
231  return static_cast<T>(kInvPiD);
232 }
233 
235 template <>
236 constexpr float invPi<float>() {
237  return kInvPiF;
238 }
239 
241 template <>
242 constexpr double invPi<double>() {
243  return kInvPiD;
244 }
245 
246 // MARK: 1/2*Pi
247 
249 constexpr float kInvTwoPiF = static_cast<float>(0.5 / kPiD);
250 
252 constexpr double kInvTwoPiD = 0.5 / kPiD;
253 
255 template <typename T>
256 constexpr T invTwoPi() {
257  return static_cast<T>(kInvTwoPiD);
258 }
259 
261 template <>
262 constexpr float invTwoPi<float>() {
263  return kInvTwoPiF;
264 }
265 
267 template <>
268 constexpr double invTwoPi<double>() {
269  return kInvTwoPiD;
270 }
271 
272 // MARK: 1/4*Pi
273 
275 constexpr float kInvFourPiF = static_cast<float>(0.25 / kPiD);
276 
278 constexpr double kInvFourPiD = 0.25 / kPiD;
279 
281 template <typename T>
282 constexpr T invFourPi() {
283  return static_cast<T>(kInvFourPiD);
284 }
285 
287 template <>
288 constexpr float invFourPi<float>() {
289  return kInvFourPiF;
290 }
291 
293 template <>
294 constexpr double invFourPi<double>() {
295  return kInvFourPiD;
296 }
297 
298 // MARK: Physics
299 
301 constexpr double kGravity = -9.8;
302 
304 constexpr double kWaterDensity = 1000.0;
305 
307 constexpr double kSpeedOfSoundInWater = 1482.0;
308 
309 // MARK: Common enums
310 
312 constexpr int kDirectionNone = 0;
313 
315 constexpr int kDirectionLeft = 1 << 0;
316 
318 constexpr int kDirectionRight = 1 << 1;
319 
321 constexpr int kDirectionDown = 1 << 2;
322 
324 constexpr int kDirectionUp = 1 << 3;
325 
327 constexpr int kDirectionBack = 1 << 4;
328 
330 constexpr int kDirectionFront = 1 << 5;
331 
336 
337 } // namespace jet
338 
339 #endif // INCLUDE_JET_CONSTANTS_H_
jet::kPiD
constexpr double kPiD
Double-type pi.
Definition: constants.h:96
jet::invPi< float >
constexpr float invPi< float >()
1/pi for float.
Definition: constants.h:236
jet::invFourPi
constexpr T invFourPi()
1/4*pi for type T.
Definition: constants.h:282
jet::halfPi< float >
constexpr float halfPi< float >()
Pi/2 for float.
Definition: constants.h:132
jet::kTwoPiD
constexpr double kTwoPiD
Double-type 2*pi.
Definition: constants.h:174
jet::kInvFourPiD
constexpr double kInvFourPiD
Double-type 1/4*pi.
Definition: constants.h:278
jet::kInvTwoPiF
constexpr float kInvTwoPiF
Float-type 1/2*pi.
Definition: constants.h:249
jet::kDirectionNone
constexpr int kDirectionNone
No direction.
Definition: constants.h:312
jet::kHalfPiF
constexpr float kHalfPiF
Float-type pi/2.
Definition: constants.h:119
jet::max
Point2< T > max(const Point2< T > &a, const Point2< T > &b)
Returns element-wise max point: (max(a.x, b.x), max(a.y, b.y)).
jet::pi
constexpr T pi()
Pi for type T.
Definition: constants.h:100
jet::one< double >
constexpr double one< double >()
One for double.
Definition: constants.h:64
jet::kOneSSize
constexpr ssize_t kOneSSize
One ssize_t.
Definition: constants.h:48
jet::quarterPi
constexpr T quarterPi()
Pi/4 for type T.
Definition: constants.h:152
jet::quarterPi< double >
constexpr double quarterPi< double >()
Pi/2 for double.
Definition: constants.h:164
macros.h
jet::kEpsilonF
constexpr float kEpsilonF
Float-type epsilon.
Definition: constants.h:71
jet::kDirectionDown
constexpr int kDirectionDown
Down direction.
Definition: constants.h:321
jet::twoPi< double >
constexpr double twoPi< double >()
2*pi for double.
Definition: constants.h:190
jet::kSpeedOfSoundInWater
constexpr double kSpeedOfSoundInWater
Speed of sound in water at 20 degrees celcius.
Definition: constants.h:307
jet::kInvTwoPiD
constexpr double kInvTwoPiD
Double-type 1/2*pi.
Definition: constants.h:252
jet::invFourPi< double >
constexpr double invFourPi< double >()
1/4*pi for double.
Definition: constants.h:294
jet::kEpsilonD
constexpr double kEpsilonD
Double-type epsilon.
Definition: constants.h:74
jet::kInvPiF
constexpr float kInvPiF
Float-type 1/pi.
Definition: constants.h:223
jet::fourPi
constexpr T fourPi()
4*pi for type T.
Definition: constants.h:204
jet::kDirectionAll
constexpr int kDirectionAll
All direction.
Definition: constants.h:333
jet::invTwoPi< double >
constexpr double invTwoPi< double >()
1/2*pi for double.
Definition: constants.h:268
jet::kMaxSize
constexpr size_t kMaxSize
Max size_t.
Definition: constants.h:79
jet
Definition: advection_solver2.h:18
jet::one< float >
constexpr float one< float >()
One for float.
Definition: constants.h:58
jet::kDirectionLeft
constexpr int kDirectionLeft
Left direction.
Definition: constants.h:315
jet::invPi
constexpr T invPi()
1/pi for type T.
Definition: constants.h:230
jet::kOneSize
constexpr size_t kOneSize
One size_t.
Definition: constants.h:45
jet::kZeroSSize
constexpr ssize_t kZeroSSize
Zero ssize_t.
Definition: constants.h:22
jet::twoPi< float >
constexpr float twoPi< float >()
2*pi for float.
Definition: constants.h:184
jet::pi< double >
constexpr double pi< double >()
Pi for double.
Definition: constants.h:112
jet::kPiF
constexpr float kPiF
Float-type pi.
Definition: constants.h:93
jet::kDirectionBack
constexpr int kDirectionBack
Back direction.
Definition: constants.h:327
jet::kFourPiD
constexpr double kFourPiD
Double-type 4*pi.
Definition: constants.h:200
jet::invFourPi< float >
constexpr float invFourPi< float >()
1/4*pi for float.
Definition: constants.h:288
jet::kMaxF
constexpr float kMaxF
Max float.
Definition: constants.h:85
jet::kTwoPiF
constexpr float kTwoPiF
Float-type 2*pi.
Definition: constants.h:171
jet::zero< float >
constexpr float zero< float >()
Zero for float.
Definition: constants.h:32
jet::kGravity
constexpr double kGravity
Gravity.
Definition: constants.h:301
jet::invTwoPi
constexpr T invTwoPi()
1/2*pi for type T.
Definition: constants.h:256
jet::kZeroSize
constexpr size_t kZeroSize
Zero size_t.
Definition: constants.h:19
jet::zero< double >
constexpr double zero< double >()
Zero for double.
Definition: constants.h:38
jet::kInvPiD
constexpr double kInvPiD
Double-type 1/pi.
Definition: constants.h:226
jet::kInvFourPiF
constexpr float kInvFourPiF
Float-type 1/4*pi.
Definition: constants.h:275
jet::kMaxD
constexpr double kMaxD
Max double.
Definition: constants.h:88
jet::halfPi
constexpr T halfPi()
Pi/2 for type T.
Definition: constants.h:126
jet::kDirectionFront
constexpr int kDirectionFront
Front direction.
Definition: constants.h:330
jet::twoPi
constexpr T twoPi()
2*pi for type T.
Definition: constants.h:178
jet::kMaxSSize
constexpr ssize_t kMaxSSize
Max ssize_t.
Definition: constants.h:82
jet::kHalfPiD
constexpr double kHalfPiD
Double-type pi/2.
Definition: constants.h:122
jet::zero
constexpr T zero()
Zero for type T.
Definition: constants.h:26
jet::kQuarterPiF
constexpr float kQuarterPiF
Float-type pi/4.
Definition: constants.h:145
jet::one
constexpr T one()
One for type T.
Definition: constants.h:52
jet::halfPi< double >
constexpr double halfPi< double >()
Pi/2 for double.
Definition: constants.h:138
jet::kDirectionRight
constexpr int kDirectionRight
RIght direction.
Definition: constants.h:318
jet::invPi< double >
constexpr double invPi< double >()
1/pi for double.
Definition: constants.h:242
jet::quarterPi< float >
constexpr float quarterPi< float >()
Pi/2 for float.
Definition: constants.h:158
jet::fourPi< double >
constexpr double fourPi< double >()
4*pi for double.
Definition: constants.h:216
jet::invTwoPi< float >
constexpr float invTwoPi< float >()
1/2*pi for float.
Definition: constants.h:262
jet::kDirectionUp
constexpr int kDirectionUp
Up direction.
Definition: constants.h:324
jet::kWaterDensity
constexpr double kWaterDensity
Water density.
Definition: constants.h:304
jet::kQuarterPiD
constexpr double kQuarterPiD
Double-type pi/4.
Definition: constants.h:148
jet::fourPi< float >
constexpr float fourPi< float >()
4*pi for float.
Definition: constants.h:210
jet::kFourPiF
constexpr float kFourPiF
Float-type 4*pi.
Definition: constants.h:197
jet::pi< float >
constexpr float pi< float >()
Pi for float.
Definition: constants.h:106