Commit Graph
52 Commits
Author SHA1 Message Date
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
Mateusz Pusz ed5749a52b refactor: quantity op+() and op-() reimplemented in terms of reference rather then quantity types
`common_quantity`, `common_quantity_for`, `common_quantity_point`, `common_quantity_kind`, and `common_quantity_point_kind` removed

Resolves #290
2021-07-27 14:40:05 +02:00
Johel Ernesto Guerrero Peña 8312b6e463 fix: factor out requires-expression to concept for MSVC 2021-06-30 12:26:56 +02:00
Johel Ernesto Guerrero Peña 80eefec97c fix: add quantity_point::origin, like std::chrono::time_point::clock 2021-06-29 20:44:27 +02:00
Ralph J. Steinhagen 8e1539bf22 added inheritance unit-test and made is_quantity<T> more specific 2021-06-29 20:31:06 +02:00
Mateusz Pusz 95ac869522 extended is_quantity<T> to support quantity-derived classes
N.B. inheritance is preferred to composition/delegate class to avoid duplication and also inherent the various required operators ('+','-',..., '+=', ...) for details see discussion #271
2021-06-29 20:31:06 +02:00
Mateusz Pusz 8e88f06380 refactor: *deduced_unit renamed to *derived_unit 2021-05-10 15:56:48 +02:00
Mateusz Pusz 441db47928 fix: MSVC Release build fixed + pragmas usage refactored 2021-03-30 20:00:23 +02:00
Mateusz Pusz 8a26eaf420 fix: VS build fixed 2021-03-30 14:47:05 +02:00
Mateusz Pusz 800dade31c fix: fixed_string fixed for clang 2021-03-30 14:26:24 +02:00
Mateusz Pusz 37cfc53d1d refactor: IWYU applied to the source files
`alternative_namespaces` examples left out as I consider them a subject for removal in the nearest future.
2021-03-30 13:21:05 +02:00
Mateusz Pusz 5251a8a241 fix: Unused <functional> header removed from basic_concepts.h 2021-03-23 19:42:08 +01:00
Mateusz Pusz 88e642ec74 refactor: QuantityValue concept renamed to Representation 2021-03-19 07:53:18 +01:00
Mateusz Pusz 901b09fd52 refactor: quantity::count() renamed to quantity::number()
Resolves #259
2021-03-19 06:47:37 +01:00
Johel Ernesto Guerrero Peña 9a520edfe9 refactor!: replace one_rep with reference<D, U> 2021-03-18 22:37:25 +01:00
Mateusz Pusz f2b52e9743 Merge branch 'master' of github.com:mpusz/units 2021-03-17 13:46:59 +01:00
Mateusz Pusz 37473eb8ad refactor: core-io and core-fmt separate modules added 2021-03-17 13:46:28 +01:00