Chip Hogg
e1a17ab1f0
Use variables instead of ratio members
...
This prepares us for a time when we won't _have_ the `ratio` members
(because we'll be using `Magnitude`).
2022-07-07 16:33:51 +00:00
Chip Hogg
ef9e6522ca
Merge branch 'master' into chiphogg/switch-to-mag
2022-06-15 20:50:30 +00:00
Mateusz Pusz
46b3781743
Revert "refactor: 💥 ! " ⋅ " replaced with "⋅" in derived unit symbols"
...
This reverts commit db09a065ab .
2022-05-24 14:20:17 +02:00
Mateusz Pusz
38fb9911a9
refactor: 💥 ! " ⋅ " replaced with "⋅" in derived unit symbols
2022-05-24 12:56:14 +02:00
Mateusz Pusz
db09a065ab
refactor: 💥 ! " ⋅ " replaced with "⋅" in derived unit symbols
2022-05-24 12:48:07 +02:00
Mateusz Pusz
ef7e7c4cfc
refactor: detail::same_scaled_units renamed to detail::compatible_units
2022-05-23 20:47:29 +02:00
Mateusz Pusz
43844c484c
fix: UNITS_MSVC_WORKAROUND() fixed for other compilers
2022-05-14 11:27:12 +02:00
Mateusz Pusz
6c1062e166
fix: UNITS_MSVC_WORKAROUND() added
2022-05-14 11:22:09 +02:00
Chip Hogg
5fb468697b
Merge branch 'master' into chiphogg/switch-to-mag
2022-05-12 16:12:01 +00:00
Mateusz Pusz
7737167d1d
fix: unit symbol text output unit tests fixed
2022-05-11 18:10:51 +02:00
Mateusz Pusz
5300caf17b
refactor: 💥 ! derived_deduced_unit renamed to derived_scaled_unit
...
Naming is hard ;-)
2022-05-11 12:34:52 +02:00
Mateusz Pusz
32b36fb670
refactor: 💥 ! PrefixFamily support removed
...
It doesn't have much sense to restrict prefixes usage for most units and in many places we were wrong to do so already.
2022-05-11 11:59:33 +02:00
Mateusz Pusz
725d193122
refactor: 💥 ! U::is_named removed from the unit types and replaced with NamedUnit concept
2022-05-11 11:49:14 +02:00
Mateusz Pusz
f5d21a0711
refactor: 💥 ! derived_unit renamed to derived_deduced_unit
2022-05-11 11:23:18 +02:00
Chip Hogg
78bcb3b019
Remove troublesome ::ratio members
...
For some reason, MSVC seems to want to instantiate these, even though
nobody ever asks for them (as evidenced by the fact that the builds
passed on other architectures).
2022-04-12 00:35:17 +00:00
Chip Hogg
d19b2803ce
Migrate units from ratio to Magnitude
...
This commit is huge, but hopefully the cognitive load is not too bad.
The bulk of this commit is just some fairly mechanical updates from
`ratio` to `Magnitude`. Other things to call out:
- `UnitRatio` goes away. We don't need this concept, because Magnitude
can't even _represent_ anything that doesn't satisfy it.
- I commented out some formatting test cases where the precise
expression changes, but the number is completely equivalent. We will
need to decide how we want to handle Magnitude formatting as a
separate, follow-on task. But at least Magnitude gives us all the
tools we'll need to do so!
2022-04-11 15:16:16 +00:00
Chip Hogg
5afe7766e9
Use Magnitude implementation for base_units_ratio
...
This resolves a TODO and lets us use arbitrary exponent denominators.
I also attempt to clarify the semantics. This is based on my best
effort of understanding pre-existing concepts in the library, so I hope
I got it right!
2022-04-11 15:16:16 +00:00
Chip Hogg
5c0eb0667c
Remove inverse_if_negative()
...
Fixes #332 .
2022-04-11 15:16:16 +00:00
Johel Ernesto Guerrero Peña
9b19dcf193
refactor(bits): remove unused header in prime.h
2022-03-24 16:57:12 -04:00
Johel Ernesto Guerrero Peña
8491e94c94
refactor(bits): remove unused headers in external/type_list.h
2022-03-23 18:03:44 -04:00
Mateusz Pusz
6218a709ae
refactor: first_factor_maybe() replaced with get_first_of()
2022-03-21 18:13:47 +01:00
Mateusz Pusz
ca283b94f6
refactor: find_first_factor() refactored
2022-03-21 11:16:50 +01:00
Mateusz Pusz
3729a9fe93
Merge pull request #337 from chiphogg/chiphogg/prime-wheel
...
Use wheel factorization for prime numbers
2022-03-21 10:37:05 +01:00
Chip Hogg
b589ba8d86
Omit redundant computation
...
This stems from an earlier mistake where I was using primes in the first
wheel, rather than coprimes-to-the-basis. 1 is not prime, so we used to
need to handle it separately (in an implementation which was, to be
clear, wrong). It _is_ coprime, so now we get it for free!
2022-03-19 22:10:01 +00:00
Mateusz Pusz
e1f7266b51
refactor: <algorithm.h> header added
...
Should be replaced with `<algorithm>` when C++20 modules will be used. Right now this header is too expensive to compile.
2022-03-19 20:07:55 +01:00
Chip Hogg
6872117bae
Replace reduce with bespoke implementation
...
If _this_ isn't `constexpr` compatible, I'm going to propose removing
support for the MacOS clang build.
2022-03-19 17:35:20 +00:00
Chip Hogg
f495ad9e75
Replace accumulate with reduce
...
Perhaps this will also satisfy Apple's Clang 13? Since `reduce` is
newer, it may be more likely to be `constexpr` compatible.
2022-03-19 17:27:38 +00:00
Chip Hogg
c339383873
Convert names to standard_case
2022-03-19 16:07:39 +00:00
Chip Hogg
48b6280486
Merge branch 'master' into chiphogg/prime-wheel
2022-03-19 16:01:32 +00:00
Chip Hogg
28c4fe3c08
Run clang-format-15 on changed files
2022-03-19 14:29:11 +00:00
Mateusz Pusz
144f6951c0
style: all files refromatted with clang-format
2022-03-17 23:59:48 +01:00
Chip Hogg
70640a1017
Remove constexpr-incompatible assert()
2022-03-11 03:56:57 +00:00
Chip Hogg
bfa8db6139
Use std::accumulate
2022-03-11 03:48:57 +00:00
Chip Hogg
73a56115a1
Fix wheel factorization algorithm
2022-03-11 03:42:19 +00:00
Chip Hogg
6c73947fe0
Satisfy complaint
...
This line shouldn't _actually_ ever be reachable, but I can't fault the
compiler for not figuring that out.
2022-03-10 23:50:33 +00:00
Chip Hogg
04b80f0827
Use wheel factorization for prime numbers
...
Certain existing units in the library require very large prime
numbers---so large, in fact, that our naive trial division hits the
_iteration limit_ for `constexpr` loops. We don't want to force users
to provide a compiler option override, so we'd better find another way.
The solution is to use the "wheel factorization" algorithm:
https://en.wikipedia.org/wiki/Wheel_factorization
This lets us skip most composite numbers in our trial division. The
implementation presented here is configurable in terms of the size of
the "basis" of primes we use. Bigger bases let us skip more primes, but
at the cost of storing more numbers. Fortunately, it turns out that N=3
was good enough for our purposes.
2022-03-10 23:29:02 +00:00
Mateusz Pusz
2198c8a403
Merge pull request #334 from JohelEGP/ratio_maths_unused_header
...
refactor(bits): remove unused header
2022-03-10 21:43:04 +01:00
Mateusz Pusz
6171b8ab69
docs: Outdated TODO comments removed
2022-03-10 19:05:36 +01:00
Johel Ernesto Guerrero Peña
b52da14e36
refactor(bits): remove unused header
2022-03-08 20:38:07 -04:00
Frank Dischner
ba6c378897
refactor: use libc++ version to determine range-v3 use
...
Allows using AppleClang where __clang_major__ does not match the
llvm/libc++ version.
2022-01-26 18:16:05 -06:00
Frank Dischner
684ef13d95
fix: derived_ratio calculation
...
Fixes the ratio calculation for derived units when the base unit ratio is
not one.
2022-01-18 21:54:21 -06:00
Johel Ernesto Guerrero Peña
4efed3c6d4
refactor: update Clang 14 to not require range-v3 ( #321 )
...
* Revert "refactor: update hacks for LLVM 14"
This reverts commit d142844de7 .
* refactor: update Clang 14 to not require range-v3
2021-12-13 10:01:16 +01:00
Mateusz Pusz
0ce18dc3c7
feat: std::format usage enabled for VS2022
2021-11-15 16:28:26 +01:00
Soham Roy
bf938c4fa4
Implemented correctly, included type_list
2021-10-17 12:18:11 +02:00
Mateusz Pusz
7d370eb496
refactor: forward_range replaced with input_range
2021-10-15 18:21:26 +02:00
Mateusz Pusz
342b8c9acf
fix: missing input_iterator definition for clang added
2021-10-15 18:18:04 +02:00
Mateusz Pusz
c9708fb642
refactor: safe_multiply() was incorrectly marked as static
2021-09-25 12:49:35 +02:00
Mateusz Pusz
d325a0b5b5
fix: clang compilation issues fixed
2021-09-20 17:04:35 +02:00
Johel Ernesto Guerrero Peña
8d8f73c0cf
refactor: update hacks for LLVM 14
2021-09-14 17:34:15 +02:00
Mateusz Pusz
e6cfd4e69b
build: clang-13 support added
2021-08-10 13:54:39 +02:00