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.
This commit is contained in:
Mateusz Pusz
2022-12-19 14:55:54 +01:00
parent f1f1009c3f
commit 7a26125e16
16 changed files with 43 additions and 55 deletions

View File

@@ -38,26 +38,17 @@ add_library(
mp-units-core mp-units-core
INTERFACE INTERFACE
# include/units/chrono.h # include/units/chrono.h
include/units/concepts.h
include/units/customization_points.h include/units/customization_points.h
include/units/dimension.h include/units/dimension.h
# include/units/generic/angle.h # include/units/generic/angle.h
include/units/generic/dimensionless.h include/units/generic/dimensionless.h
# include/units/generic/solid_angle.h # include/units/generic/solid_angle.h
# include/units/kind.h
include/units/magnitude.h
include/units/math.h include/units/math.h
# include/units/point_origin.h
include/units/quantity.h include/units/quantity.h
include/units/quantity_cast.h
# include/units/quantity_kind.h
# include/units/quantity_point.h # include/units/quantity_point.h
# include/units/quantity_point_kind.h
include/units/quantity_spec.h include/units/quantity_spec.h
include/units/random.h include/units/random.h
include/units/ratio.h
include/units/reference.h include/units/reference.h
include/units/symbol_text.h
include/units/system_reference.h include/units/system_reference.h
include/units/unit.h include/units/unit.h
) )

View File

@@ -25,7 +25,7 @@
#include <units/bits/external/type_list.h> #include <units/bits/external/type_list.h>
#include <units/bits/external/type_traits.h> #include <units/bits/external/type_traits.h>
#include <units/bits/math_concepts.h> #include <units/bits/math_concepts.h>
#include <units/ratio.h> #include <units/bits/ratio.h>
namespace units { namespace units {

View File

@@ -24,14 +24,14 @@
#include <units/bits/expression_template.h> #include <units/bits/expression_template.h>
#include <units/bits/external/hacks.h> #include <units/bits/external/hacks.h>
#include <units/bits/external/text_tools.h>
#include <units/bits/external/type_name.h> #include <units/bits/external/type_name.h>
#include <units/bits/external/type_traits.h> #include <units/bits/external/type_traits.h>
#include <units/bits/math_concepts.h> #include <units/bits/math_concepts.h>
#include <units/bits/prime.h> #include <units/bits/prime.h>
#include <units/bits/ratio.h>
#include <units/bits/symbol_text.h>
#include <units/bits/text_tools.h>
#include <units/customization_points.h> #include <units/customization_points.h>
#include <units/ratio.h>
#include <units/symbol_text.h>
#include <concepts> #include <concepts>
#include <cstdint> #include <cstdint>
#include <numbers> #include <numbers>

View File

@@ -23,10 +23,10 @@
#pragma once #pragma once
#include <units/bits/external/type_traits.h> #include <units/bits/external/type_traits.h>
#include <units/concepts.h> #include <units/bits/magnitude.h>
#include <units/bits/quantity_concepts.h>
#include <units/customization_points.h> #include <units/customization_points.h>
#include <units/dimension.h> #include <units/dimension.h>
#include <units/magnitude.h>
#include <units/reference.h> #include <units/reference.h>
#include <units/unit.h> #include <units/unit.h>

View File

@@ -23,6 +23,7 @@
#pragma once #pragma once
#include <units/bits/external/type_traits.h> #include <units/bits/external/type_traits.h>
#include <units/customization_points.h>
#include <units/dimension.h> #include <units/dimension.h>
#include <units/quantity_spec.h> #include <units/quantity_spec.h>
#include <units/unit.h> #include <units/unit.h>
@@ -50,16 +51,6 @@ inline constexpr bool is_specialization_of_reference<reference<Q, U>> = true;
template<typename T> template<typename T>
concept Reference = detail::is_specialization_of_reference<T>; concept Reference = detail::is_specialization_of_reference<T>;
namespace detail {
template<typename T>
inline constexpr bool is_quantity = false;
}
template<typename T>
concept Quantity = detail::is_quantity<T>;
template<typename T, typename U> template<typename T, typename U>
concept common_type_with_ = // exposition only concept common_type_with_ = // exposition only
(std::same_as<std::common_type_t<T, U>, std::common_type_t<U, T>>) && (std::same_as<std::common_type_t<T, U>, std::common_type_t<U, T>>) &&
@@ -80,25 +71,33 @@ concept scalable_ = // exposition only
scalable_number_<T, std::common_type_t<typename T::value_type, std::intmax_t>>); scalable_number_<T, std::common_type_t<typename T::value_type, std::intmax_t>>);
template<typename T> template<typename T>
concept Representation = (!Quantity<T>) && concept Representation = (is_scalar<T> || is_vector<T> || is_tensor<T>) && std::regular<T> && scalable_<T>;
// (!QuantityLike<T>) && (!wrapped_quantity_<T>) &&
std::regular<T> && scalable_<T>;
template<Reference auto R, Representation Rep> template<typename T, quantity_character Ch>
concept RepresentationOf = Representation<T> && ((Ch == quantity_character::scalar && is_scalar<T>) ||
(Ch == quantity_character::vector && is_vector<T>) ||
(Ch == quantity_character::tensor && is_tensor<T>));
template<Reference auto R, RepresentationOf<R.quantity_spec.character> Rep>
class quantity; class quantity;
namespace detail { namespace detail {
// TODO make the below code from the comment to compile and replace it
template<auto R, typename Rep> template<auto R, typename Rep>
inline constexpr bool is_quantity<quantity<R, Rep>> = true; void to_base_specialization_of_quantity(const volatile quantity<R, Rep>*);
// template<auto R, typename Rep> } // namespace detail
// void to_base_specialization_of_quantity(const volatile quantity<R, Rep>*);
// template<typename T> template<typename T>
// requires requires(T* t) { to_base_specialization_of_quantity(t); } concept Quantity = requires(T* t) { detail::to_base_specialization_of_quantity(t); };
// inline constexpr bool is_quantity<T> = true;
namespace detail {
template<QuantitySpec Q1, QuantitySpec Q2>
[[nodiscard]] consteval bool is_kind_of(Q1, Q2)
{
return std::derived_from<Q1, Q2>;
}
} // namespace detail } // namespace detail
@@ -109,9 +108,10 @@ inline constexpr bool is_quantity<quantity<R, Rep>> = true;
* the provided dimension/reference type. * the provided dimension/reference type.
*/ */
template<typename Q, auto V> template<typename Q, auto V>
concept quantity_of = Quantity<Q> && ((Dimension<std::remove_const_t<decltype(V)>> && Q::dimension == V) || concept quantity_of = Quantity<Q> &&
(QuantitySpec<std::remove_const_t<decltype(V)>> && Q::quantity_spec == V) || ((Dimension<std::remove_const_t<decltype(V)>> && Q::dimension == V) ||
(Reference<std::remove_const_t<decltype(V)>> && Q::reference == V)); (QuantitySpec<std::remove_const_t<decltype(V)>> && detail::is_kind_of(Q::quantity_spec, V)) ||
(Reference<std::remove_const_t<decltype(V)>> && Q::reference == V));
/** /**
* @brief A concept matching all quantities with provided dimension or reference * @brief A concept matching all quantities with provided dimension or reference

View File

@@ -23,7 +23,7 @@
#pragma once #pragma once
#include <units/bits/external/fixed_string.h> #include <units/bits/external/fixed_string.h>
#include <units/symbol_text.h> #include <units/bits/symbol_text.h>
namespace units::detail { namespace units::detail {

View File

@@ -24,7 +24,7 @@
#include <units/bits/expression_template.h> #include <units/bits/expression_template.h>
#include <units/bits/external/type_traits.h> #include <units/bits/external/type_traits.h>
#include <units/symbol_text.h> #include <units/bits/symbol_text.h>
namespace units { namespace units {

View File

@@ -23,10 +23,8 @@
#pragma once #pragma once
// IWYU pragma: begin_exports #include <units/bits/quantity_cast.h>
#include <units/quantity_cast.h> #include <units/bits/quantity_concepts.h>
// #include <units/ratio.h>
#include <units/concepts.h>
#include <units/customization_points.h> #include <units/customization_points.h>
#include <units/dimension.h> #include <units/dimension.h>
#include <units/quantity_spec.h> #include <units/quantity_spec.h>

View File

@@ -22,7 +22,7 @@
#pragma once #pragma once
#include <units/concepts.h> #include <units/quantity.h>
#include <functional> #include <functional>
#include <random> #include <random>

View File

@@ -22,7 +22,7 @@
#pragma once #pragma once
#include <units/concepts.h> #include <units/bits/quantity_concepts.h>
#include <units/quantity_spec.h> #include <units/quantity_spec.h>
#include <units/unit.h> #include <units/unit.h>

View File

@@ -22,7 +22,6 @@
#pragma once #pragma once
#include <units/concepts.h>
#include <units/quantity_spec.h> #include <units/quantity_spec.h>
#include <units/reference.h> #include <units/reference.h>
#include <units/unit.h> #include <units/unit.h>

View File

@@ -25,13 +25,13 @@
#include <units/bits/algorithm.h> #include <units/bits/algorithm.h>
#include <units/bits/expression_template.h> #include <units/bits/expression_template.h>
#include <units/bits/external/fixed_string.h> #include <units/bits/external/fixed_string.h>
#include <units/bits/external/text_tools.h>
#include <units/bits/external/type_name.h> #include <units/bits/external/type_name.h>
#include <units/bits/external/type_traits.h> #include <units/bits/external/type_traits.h>
#include <units/bits/magnitude.h>
#include <units/bits/ratio.h>
#include <units/bits/symbol_text.h>
#include <units/bits/text_tools.h>
#include <units/dimension.h> #include <units/dimension.h>
#include <units/magnitude.h>
#include <units/ratio.h>
#include <units/symbol_text.h>
#include <iterator> #include <iterator>
#include <string> #include <string>

View File

@@ -20,8 +20,8 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
#include <units/magnitude.h> #include <units/bits/magnitude.h>
#include <units/ratio.h> #include <units/bits/ratio.h>
#include <type_traits> #include <type_traits>
using namespace units; using namespace units;

View File

@@ -20,7 +20,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
#include <units/ratio.h> #include <units/bits/ratio.h>
namespace { namespace {