From 7a26125e1614670249273975a0787c01700ce130 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Mon, 19 Dec 2022 14:55:54 +0100 Subject: [PATCH] refactor: public headers cleanup Public headers should be only the ones that a user may have a need to actually include in his/her code. --- src/core/CMakeLists.txt | 9 ---- .../include/units/bits/expression_template.h | 2 +- src/core/include/units/{ => bits}/magnitude.h | 6 +-- .../include/units/{ => bits}/quantity_cast.h | 4 +- .../{concepts.h => bits/quantity_concepts.h} | 48 +++++++++---------- src/core/include/units/{ => bits}/ratio.h | 0 .../include/units/{ => bits}/symbol_text.h | 0 .../units/bits/{external => }/text_tools.h | 2 +- src/core/include/units/dimension.h | 2 +- src/core/include/units/quantity.h | 6 +-- src/core/include/units/random.h | 2 +- src/core/include/units/reference.h | 2 +- src/core/include/units/system_reference.h | 1 - src/core/include/units/unit.h | 8 ++-- test/unit_test/static/magnitude_test.cpp | 4 +- test/unit_test/static/ratio_test.cpp | 2 +- 16 files changed, 43 insertions(+), 55 deletions(-) rename src/core/include/units/{ => bits}/magnitude.h (99%) rename src/core/include/units/{ => bits}/quantity_cast.h (99%) rename src/core/include/units/{concepts.h => bits/quantity_concepts.h} (75%) rename src/core/include/units/{ => bits}/ratio.h (100%) rename src/core/include/units/{ => bits}/symbol_text.h (100%) rename src/core/include/units/bits/{external => }/text_tools.h (98%) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index ef00b8e3..04df1b6f 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -38,26 +38,17 @@ add_library( mp-units-core INTERFACE # include/units/chrono.h - include/units/concepts.h include/units/customization_points.h include/units/dimension.h # include/units/generic/angle.h include/units/generic/dimensionless.h # include/units/generic/solid_angle.h - # include/units/kind.h - include/units/magnitude.h include/units/math.h - # include/units/point_origin.h include/units/quantity.h - include/units/quantity_cast.h - # include/units/quantity_kind.h # include/units/quantity_point.h - # include/units/quantity_point_kind.h include/units/quantity_spec.h include/units/random.h - include/units/ratio.h include/units/reference.h - include/units/symbol_text.h include/units/system_reference.h include/units/unit.h ) diff --git a/src/core/include/units/bits/expression_template.h b/src/core/include/units/bits/expression_template.h index 07c0e632..a945d757 100644 --- a/src/core/include/units/bits/expression_template.h +++ b/src/core/include/units/bits/expression_template.h @@ -25,7 +25,7 @@ #include #include #include -#include +#include namespace units { diff --git a/src/core/include/units/magnitude.h b/src/core/include/units/bits/magnitude.h similarity index 99% rename from src/core/include/units/magnitude.h rename to src/core/include/units/bits/magnitude.h index 5cb51365..9a2b027a 100644 --- a/src/core/include/units/magnitude.h +++ b/src/core/include/units/bits/magnitude.h @@ -24,14 +24,14 @@ #include #include -#include #include #include #include #include +#include +#include +#include #include -#include -#include #include #include #include diff --git a/src/core/include/units/quantity_cast.h b/src/core/include/units/bits/quantity_cast.h similarity index 99% rename from src/core/include/units/quantity_cast.h rename to src/core/include/units/bits/quantity_cast.h index d903040e..a3bbe7e3 100644 --- a/src/core/include/units/quantity_cast.h +++ b/src/core/include/units/bits/quantity_cast.h @@ -23,10 +23,10 @@ #pragma once #include -#include +#include +#include #include #include -#include #include #include diff --git a/src/core/include/units/concepts.h b/src/core/include/units/bits/quantity_concepts.h similarity index 75% rename from src/core/include/units/concepts.h rename to src/core/include/units/bits/quantity_concepts.h index 19cf418b..f6896341 100644 --- a/src/core/include/units/concepts.h +++ b/src/core/include/units/bits/quantity_concepts.h @@ -23,6 +23,7 @@ #pragma once #include +#include #include #include #include @@ -50,16 +51,6 @@ inline constexpr bool is_specialization_of_reference> = true; template concept Reference = detail::is_specialization_of_reference; -namespace detail { - -template -inline constexpr bool is_quantity = false; - -} - -template -concept Quantity = detail::is_quantity; - template concept common_type_with_ = // exposition only (std::same_as, std::common_type_t>) && @@ -80,25 +71,33 @@ concept scalable_ = // exposition only scalable_number_>); template -concept Representation = (!Quantity) && - // (!QuantityLike) && (!wrapped_quantity_) && - std::regular && scalable_; +concept Representation = (is_scalar || is_vector || is_tensor) && std::regular && scalable_; -template +template +concept RepresentationOf = Representation && ((Ch == quantity_character::scalar && is_scalar) || + (Ch == quantity_character::vector && is_vector) || + (Ch == quantity_character::tensor && is_tensor)); + +template Rep> class quantity; namespace detail { -// TODO make the below code from the comment to compile and replace it template -inline constexpr bool is_quantity> = true; +void to_base_specialization_of_quantity(const volatile quantity*); -// template -// void to_base_specialization_of_quantity(const volatile quantity*); +} // namespace detail -// template -// requires requires(T* t) { to_base_specialization_of_quantity(t); } -// inline constexpr bool is_quantity = true; +template +concept Quantity = requires(T* t) { detail::to_base_specialization_of_quantity(t); }; + +namespace detail { + +template +[[nodiscard]] consteval bool is_kind_of(Q1, Q2) +{ + return std::derived_from; +} } // namespace detail @@ -109,9 +108,10 @@ inline constexpr bool is_quantity> = true; * the provided dimension/reference type. */ template -concept quantity_of = Quantity && ((Dimension> && Q::dimension == V) || - (QuantitySpec> && Q::quantity_spec == V) || - (Reference> && Q::reference == V)); +concept quantity_of = Quantity && + ((Dimension> && Q::dimension == V) || + (QuantitySpec> && detail::is_kind_of(Q::quantity_spec, V)) || + (Reference> && Q::reference == V)); /** * @brief A concept matching all quantities with provided dimension or reference diff --git a/src/core/include/units/ratio.h b/src/core/include/units/bits/ratio.h similarity index 100% rename from src/core/include/units/ratio.h rename to src/core/include/units/bits/ratio.h diff --git a/src/core/include/units/symbol_text.h b/src/core/include/units/bits/symbol_text.h similarity index 100% rename from src/core/include/units/symbol_text.h rename to src/core/include/units/bits/symbol_text.h diff --git a/src/core/include/units/bits/external/text_tools.h b/src/core/include/units/bits/text_tools.h similarity index 98% rename from src/core/include/units/bits/external/text_tools.h rename to src/core/include/units/bits/text_tools.h index f09b28a9..036caeb7 100644 --- a/src/core/include/units/bits/external/text_tools.h +++ b/src/core/include/units/bits/text_tools.h @@ -23,7 +23,7 @@ #pragma once #include -#include +#include namespace units::detail { diff --git a/src/core/include/units/dimension.h b/src/core/include/units/dimension.h index f001d448..167294be 100644 --- a/src/core/include/units/dimension.h +++ b/src/core/include/units/dimension.h @@ -24,7 +24,7 @@ #include #include -#include +#include namespace units { diff --git a/src/core/include/units/quantity.h b/src/core/include/units/quantity.h index f8a98b5b..d8e7f379 100644 --- a/src/core/include/units/quantity.h +++ b/src/core/include/units/quantity.h @@ -23,10 +23,8 @@ #pragma once -// IWYU pragma: begin_exports -#include -// #include -#include +#include +#include #include #include #include diff --git a/src/core/include/units/random.h b/src/core/include/units/random.h index 4711695b..1a995fe5 100644 --- a/src/core/include/units/random.h +++ b/src/core/include/units/random.h @@ -22,7 +22,7 @@ #pragma once -#include +#include #include #include diff --git a/src/core/include/units/reference.h b/src/core/include/units/reference.h index 296c0191..21d5e9ca 100644 --- a/src/core/include/units/reference.h +++ b/src/core/include/units/reference.h @@ -22,7 +22,7 @@ #pragma once -#include +#include #include #include diff --git a/src/core/include/units/system_reference.h b/src/core/include/units/system_reference.h index f3605622..539b1e02 100644 --- a/src/core/include/units/system_reference.h +++ b/src/core/include/units/system_reference.h @@ -22,7 +22,6 @@ #pragma once -#include #include #include #include diff --git a/src/core/include/units/unit.h b/src/core/include/units/unit.h index edb70196..ea2a3e2d 100644 --- a/src/core/include/units/unit.h +++ b/src/core/include/units/unit.h @@ -25,13 +25,13 @@ #include #include #include -#include #include #include +#include +#include +#include +#include #include -#include -#include -#include #include #include diff --git a/test/unit_test/static/magnitude_test.cpp b/test/unit_test/static/magnitude_test.cpp index c986373e..946a1743 100644 --- a/test/unit_test/static/magnitude_test.cpp +++ b/test/unit_test/static/magnitude_test.cpp @@ -20,8 +20,8 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -#include -#include +#include +#include #include using namespace units; diff --git a/test/unit_test/static/ratio_test.cpp b/test/unit_test/static/ratio_test.cpp index 57c8f3e0..0cbd5a76 100644 --- a/test/unit_test/static/ratio_test.cpp +++ b/test/unit_test/static/ratio_test.cpp @@ -20,7 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -#include +#include namespace {