Additional type list sorting added to make_dimension

This commit is contained in:
Mateusz Pusz
2018-11-17 12:36:27 +01:00
parent 58e1eefd3b
commit 467d548ae5
3 changed files with 13 additions and 7 deletions

View File

@@ -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>

View File

@@ -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>>>);

View File

@@ -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>>>);