mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-02 03:44:27 +02:00
feat: type_list_unique
added
This commit is contained in:
@@ -235,6 +235,28 @@ struct type_list_sort_impl<List<Types...>, Pred> {
|
|||||||
template<TypeList List, template<typename, typename> typename Pred>
|
template<TypeList List, template<typename, typename> typename Pred>
|
||||||
using type_list_sort = type_list_sort_impl<List, Pred>::type;
|
using type_list_sort = type_list_sort_impl<List, Pred>::type;
|
||||||
|
|
||||||
|
// sort
|
||||||
|
template<typename List>
|
||||||
|
struct type_list_unique_impl;
|
||||||
|
|
||||||
|
template<template<typename...> typename List>
|
||||||
|
struct type_list_unique_impl<List<>> {
|
||||||
|
using type = List<>;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<template<typename...> typename List, typename T, typename... Rest>
|
||||||
|
struct type_list_unique_impl<List<T, Rest...>> {
|
||||||
|
using type = type_list_push_front<typename type_list_unique_impl<List<Rest...>>::type, T>;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<template<typename...> typename List, typename T, typename... Rest>
|
||||||
|
struct type_list_unique_impl<List<T, T, Rest...>> {
|
||||||
|
using type = type_list_unique_impl<List<T, Rest...>>::type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<TypeList List>
|
||||||
|
using type_list_unique = type_list_unique_impl<List>::type;
|
||||||
|
|
||||||
} // namespace mp_units::detail
|
} // namespace mp_units::detail
|
||||||
|
|
||||||
MP_UNITS_DIAGNOSTIC_POP
|
MP_UNITS_DIAGNOSTIC_POP
|
||||||
|
@@ -189,4 +189,16 @@ static_assert(is_same_v<type_list_sort<type_list<v2, v1>, constant_less>, type_l
|
|||||||
static_assert(is_same_v<type_list_sort<type_list<v2, v1, v3>, constant_less>, type_list<v1, v2, v3>>);
|
static_assert(is_same_v<type_list_sort<type_list<v2, v1, v3>, constant_less>, type_list<v1, v2, v3>>);
|
||||||
static_assert(is_same_v<type_list_sort<type_list<v4, v3, v2, v1>, constant_less>, type_list<v1, v2, v3, v4>>);
|
static_assert(is_same_v<type_list_sort<type_list<v4, v3, v2, v1>, constant_less>, type_list<v1, v2, v3, v4>>);
|
||||||
|
|
||||||
|
// type_list_unique
|
||||||
|
|
||||||
|
static_assert(is_same_v<type_list_unique<type_list<v1>>, type_list<v1>>);
|
||||||
|
static_assert(is_same_v<type_list_unique<type_list<v1, v1>>, type_list<v1>>);
|
||||||
|
static_assert(is_same_v<type_list_unique<type_list<v1, v1, v1>>, type_list<v1>>);
|
||||||
|
static_assert(is_same_v<type_list_unique<type_list<v1, v2>>, type_list<v1, v2>>);
|
||||||
|
static_assert(is_same_v<type_list_unique<type_list<v1, v1, v2>>, type_list<v1, v2>>);
|
||||||
|
static_assert(is_same_v<type_list_unique<type_list<v1, v2, v2>>, type_list<v1, v2>>);
|
||||||
|
static_assert(is_same_v<type_list_unique<type_list<v1, v2, v3>>, type_list<v1, v2, v3>>);
|
||||||
|
static_assert(is_same_v<type_list_unique<type_list<v1, v2, v2, v3>>, type_list<v1, v2, v3>>);
|
||||||
|
static_assert(is_same_v<type_list_unique<type_list<v1, v1, v2, v3, v3>>, type_list<v1, v2, v3>>);
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
Reference in New Issue
Block a user