|
1 | 1 | #pragma once |
2 | 2 |
|
| 3 | + |
3 | 4 | #include <algorithm> |
4 | 5 | #include <chrono> |
5 | 6 | #include <cmath> |
|
11 | 12 | #define UNIT_SYSTEM_EXPORT_MACRO |
12 | 13 | #endif |
13 | 14 |
|
| 15 | + |
14 | 16 | namespace sakurajin { |
15 | 17 | namespace unit_system { |
16 | 18 | // forward declare all units |
@@ -45,9 +47,11 @@ namespace sakurajin { |
45 | 47 | time_si(long double v, long double mult); |
46 | 48 | time_si(long double v, long double mult, long double off); |
47 | 49 |
|
| 50 | + |
48 | 51 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
49 | 52 | time_si(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
50 | 53 |
|
| 54 | + |
51 | 55 | time_si operator*(long double scalar) const; |
52 | 56 | void operator*=(long double scalar); |
53 | 57 |
|
@@ -147,9 +151,11 @@ namespace sakurajin { |
147 | 151 | length(long double v, long double mult); |
148 | 152 | length(long double v, long double mult, long double off); |
149 | 153 |
|
| 154 | + |
150 | 155 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
151 | 156 | length(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
152 | 157 |
|
| 158 | + |
153 | 159 | length operator*(long double scalar) const; |
154 | 160 | void operator*=(long double scalar); |
155 | 161 |
|
@@ -251,9 +257,11 @@ namespace sakurajin { |
251 | 257 | mass(long double v, long double mult); |
252 | 258 | mass(long double v, long double mult, long double off); |
253 | 259 |
|
| 260 | + |
254 | 261 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
255 | 262 | mass(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
256 | 263 |
|
| 264 | + |
257 | 265 | mass operator*(long double scalar) const; |
258 | 266 | void operator*=(long double scalar); |
259 | 267 |
|
@@ -345,9 +353,11 @@ namespace sakurajin { |
345 | 353 | temperature(long double v, long double mult); |
346 | 354 | temperature(long double v, long double mult, long double off); |
347 | 355 |
|
| 356 | + |
348 | 357 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
349 | 358 | temperature(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
350 | 359 |
|
| 360 | + |
351 | 361 | temperature operator*(long double scalar) const; |
352 | 362 | void operator*=(long double scalar); |
353 | 363 |
|
@@ -414,9 +424,11 @@ namespace sakurajin { |
414 | 424 | amount(long double v, long double mult); |
415 | 425 | amount(long double v, long double mult, long double off); |
416 | 426 |
|
| 427 | + |
417 | 428 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
418 | 429 | amount(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
419 | 430 |
|
| 431 | + |
420 | 432 | amount operator*(long double scalar) const; |
421 | 433 | void operator*=(long double scalar); |
422 | 434 |
|
@@ -483,9 +495,11 @@ namespace sakurajin { |
483 | 495 | electric_current(long double v, long double mult); |
484 | 496 | electric_current(long double v, long double mult, long double off); |
485 | 497 |
|
| 498 | + |
486 | 499 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
487 | 500 | electric_current(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
488 | 501 |
|
| 502 | + |
489 | 503 | electric_current operator*(long double scalar) const; |
490 | 504 | void operator*=(long double scalar); |
491 | 505 |
|
@@ -586,9 +600,11 @@ namespace sakurajin { |
586 | 600 | luminous_intensity(long double v, long double mult); |
587 | 601 | luminous_intensity(long double v, long double mult, long double off); |
588 | 602 |
|
| 603 | + |
589 | 604 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
590 | 605 | luminous_intensity(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
591 | 606 |
|
| 607 | + |
592 | 608 | luminous_intensity operator*(long double scalar) const; |
593 | 609 | void operator*=(long double scalar); |
594 | 610 |
|
@@ -656,9 +672,11 @@ namespace sakurajin { |
656 | 672 | energy(long double v, long double mult); |
657 | 673 | energy(long double v, long double mult, long double off); |
658 | 674 |
|
| 675 | + |
659 | 676 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
660 | 677 | energy(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
661 | 678 |
|
| 679 | + |
662 | 680 | energy operator*(long double scalar) const; |
663 | 681 | void operator*=(long double scalar); |
664 | 682 |
|
@@ -826,9 +844,11 @@ namespace sakurajin { |
826 | 844 | power(long double v, long double mult); |
827 | 845 | power(long double v, long double mult, long double off); |
828 | 846 |
|
| 847 | + |
829 | 848 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
830 | 849 | power(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
831 | 850 |
|
| 851 | + |
832 | 852 | power operator*(long double scalar) const; |
833 | 853 | void operator*=(long double scalar); |
834 | 854 |
|
@@ -932,9 +952,11 @@ namespace sakurajin { |
932 | 952 | speed(long double v, long double mult); |
933 | 953 | speed(long double v, long double mult, long double off); |
934 | 954 |
|
| 955 | + |
935 | 956 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
936 | 957 | speed(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
937 | 958 |
|
| 959 | + |
938 | 960 | speed operator*(long double scalar) const; |
939 | 961 | void operator*=(long double scalar); |
940 | 962 |
|
@@ -1011,9 +1033,11 @@ namespace sakurajin { |
1011 | 1033 | acceleration(long double v, long double mult); |
1012 | 1034 | acceleration(long double v, long double mult, long double off); |
1013 | 1035 |
|
| 1036 | + |
1014 | 1037 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
1015 | 1038 | acceleration(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
1016 | 1039 |
|
| 1040 | + |
1017 | 1041 | acceleration operator*(long double scalar) const; |
1018 | 1042 | void operator*=(long double scalar); |
1019 | 1043 |
|
@@ -1086,9 +1110,11 @@ namespace sakurajin { |
1086 | 1110 | area(long double v, long double mult); |
1087 | 1111 | area(long double v, long double mult, long double off); |
1088 | 1112 |
|
| 1113 | + |
1089 | 1114 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
1090 | 1115 | area(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
1091 | 1116 |
|
| 1117 | + |
1092 | 1118 | area operator*(long double scalar) const; |
1093 | 1119 | void operator*=(long double scalar); |
1094 | 1120 |
|
@@ -1177,9 +1203,11 @@ namespace sakurajin { |
1177 | 1203 | force(long double v, long double mult); |
1178 | 1204 | force(long double v, long double mult, long double off); |
1179 | 1205 |
|
| 1206 | + |
1180 | 1207 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
1181 | 1208 | force(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
1182 | 1209 |
|
| 1210 | + |
1183 | 1211 | force operator*(long double scalar) const; |
1184 | 1212 | void operator*=(long double scalar); |
1185 | 1213 |
|
@@ -1285,9 +1313,11 @@ namespace sakurajin { |
1285 | 1313 | momentum(long double v, long double mult); |
1286 | 1314 | momentum(long double v, long double mult, long double off); |
1287 | 1315 |
|
| 1316 | + |
1288 | 1317 | template <std::intmax_t numerator, std::intmax_t denumerator = 1> |
1289 | 1318 | momentum(long double v, std::ratio<numerator, denumerator> mult, long double off = 0); |
1290 | 1319 |
|
| 1320 | + |
1291 | 1321 | momentum operator*(long double scalar) const; |
1292 | 1322 | void operator*=(long double scalar); |
1293 | 1323 |
|
@@ -1438,6 +1468,7 @@ namespace sakurajin { |
1438 | 1468 | } // namespace unit_system |
1439 | 1469 | } // namespace sakurajin |
1440 | 1470 |
|
| 1471 | + |
1441 | 1472 | // add all constants |
1442 | 1473 | namespace sakurajin { |
1443 | 1474 | namespace unit_system { |
|
0 commit comments