Commit Graph
37 Commits
Author SHA1 Message Date
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
Johel Ernesto Guerrero Peña 229d303319 refactor: add portable diagnostic pragmas 2021-03-17 08:46:05 +01:00
Mateusz Pusz 221883bb25 build: core library and each system separated to dedicated CMake targets
Refers to #249
2021-03-16 23:05:45 +01:00