mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-02 03:44:27 +02:00
Additional type list sorting added to make_dimension
This commit is contained in:
@@ -59,13 +59,19 @@ namespace units {
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
concept bool Exponent = detail::is_exp<T>;
|
concept bool Exponent = detail::is_exp<T>;
|
||||||
|
|
||||||
// exp_less
|
// exp_dim_id_less
|
||||||
|
|
||||||
template<Exponent E1, Exponent E2>
|
template<Exponent E1, Exponent E2>
|
||||||
struct exp_less : dim_id_less<typename E1::dimension, typename E2::dimension> {
|
struct exp_dim_id_less : dim_id_less<typename E1::dimension, typename E2::dimension> {
|
||||||
};
|
};
|
||||||
|
|
||||||
// exp_invert
|
// exp_dim_id_less
|
||||||
|
|
||||||
|
template<Exponent E1, Exponent E2>
|
||||||
|
struct exp_greater_equal : std::bool_constant<(E1::value >= E2::value)> {
|
||||||
|
};
|
||||||
|
|
||||||
|
// exp_invert
|
||||||
|
|
||||||
template<Exponent E>
|
template<Exponent E>
|
||||||
struct exp_invert;
|
struct exp_invert;
|
||||||
@@ -158,7 +164,7 @@ namespace units {
|
|||||||
|
|
||||||
template<Exponent... Es>
|
template<Exponent... Es>
|
||||||
struct make_dimension {
|
struct make_dimension {
|
||||||
using type = detail::dim_consolidate_t<mp::type_list_sort_t<dimension<Es...>, exp_less>>;
|
using type = mp::type_list_sort_t<detail::dim_consolidate_t<mp::type_list_sort_t<dimension<Es...>, exp_dim_id_less>>, exp_greater_equal>;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<Exponent... Es>
|
template<Exponent... Es>
|
||||||
|
@@ -59,7 +59,7 @@ namespace {
|
|||||||
static_assert(std::is_same_v<dimension_multiply_t<dimension<e<0, 1>, e<1, 1>, e<2, 1>>, dimension<e<3, 1>>>,
|
static_assert(std::is_same_v<dimension_multiply_t<dimension<e<0, 1>, e<1, 1>, e<2, 1>>, dimension<e<3, 1>>>,
|
||||||
dimension<e<0, 1>, e<1, 1>, e<2, 1>, e<3, 1>>>);
|
dimension<e<0, 1>, e<1, 1>, e<2, 1>, e<3, 1>>>);
|
||||||
static_assert(std::is_same_v<dimension_multiply_t<dimension<e<0, 1>, e<1, 1>, e<2, 1>>, dimension<e<1, 1>>>,
|
static_assert(std::is_same_v<dimension_multiply_t<dimension<e<0, 1>, e<1, 1>, e<2, 1>>, dimension<e<1, 1>>>,
|
||||||
dimension<e<0, 1>, e<1, 2>, e<2, 1>>>);
|
dimension<e<1, 2>, e<0, 1>, e<2, 1>>>);
|
||||||
static_assert(std::is_same_v<dimension_multiply_t<dimension<e<0, 1>, e<1, 1>, e<2, 1>>, dimension<e<1, -1>>>,
|
static_assert(std::is_same_v<dimension_multiply_t<dimension<e<0, 1>, e<1, 1>, e<2, 1>>, dimension<e<1, -1>>>,
|
||||||
dimension<e<0, 1>, e<2, 1>>>);
|
dimension<e<0, 1>, e<2, 1>>>);
|
||||||
|
|
||||||
|
@@ -108,13 +108,13 @@ namespace {
|
|||||||
dim_sort_t<type_list<dim_id<38>, dim_id<27>, dim_id<43>, dim_id<3>, dim_id<9>, dim_id<82>, dim_id<10>>>,
|
dim_sort_t<type_list<dim_id<38>, dim_id<27>, dim_id<43>, dim_id<3>, dim_id<9>, dim_id<82>, dim_id<10>>>,
|
||||||
type_list<dim_id<3>, dim_id<9>, dim_id<10>, dim_id<27>, dim_id<38>, dim_id<43>, dim_id<82>>>);
|
type_list<dim_id<3>, dim_id<9>, dim_id<10>, dim_id<27>, dim_id<38>, dim_id<43>, dim_id<82>>>);
|
||||||
|
|
||||||
// exp_less
|
// exp_dim_id_less
|
||||||
|
|
||||||
template<int Id, int Value>
|
template<int Id, int Value>
|
||||||
using e = exp<dim_id<Id>, Value>;
|
using e = exp<dim_id<Id>, Value>;
|
||||||
|
|
||||||
template<TypeList List>
|
template<TypeList List>
|
||||||
using exp_sort_t = type_list_sort_t<List, exp_less>;
|
using exp_sort_t = type_list_sort_t<List, exp_dim_id_less>;
|
||||||
|
|
||||||
static_assert(std::is_same_v<exp_sort_t<dimension<e<0, 1>>>, dimension<e<0, 1>>>);
|
static_assert(std::is_same_v<exp_sort_t<dimension<e<0, 1>>>, dimension<e<0, 1>>>);
|
||||||
static_assert(std::is_same_v<exp_sort_t<dimension<e<0, 1>, e<1, -1>>>, dimension<e<0, 1>, e<1, -1>>>);
|
static_assert(std::is_same_v<exp_sort_t<dimension<e<0, 1>, e<1, -1>>>, dimension<e<0, 1>, e<1, -1>>>);
|
||||||
|
Reference in New Issue
Block a user