rename all_eq_to to all_equal and added version for ranges
This commit is contained in:
parent
0fdff1e1c3
commit
0c51825033
|
|
@ -40,16 +40,27 @@ concept StringLike = std::is_convertible_v<T, std::string_view>;
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
concept not_base_type_same_as = !std::is_same_v<std::remove_cvref_t<T>, std::remove_cvref_t<U>>;
|
concept not_base_type_same_as = !std::is_same_v<std::remove_cvref_t<T>, std::remove_cvref_t<U>>;
|
||||||
|
|
||||||
|
template<std::ranges::range R, StringLike T>
|
||||||
|
constexpr bool all_equal_to(R r, T t) {
|
||||||
|
auto rt = std::ranges::views::repeat(std::string_view(t), std::ranges::size(r));
|
||||||
|
return std::ranges::equal(r, rt);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<std::ranges::range R, typename T>
|
||||||
|
constexpr bool all_equal_to(R r, T t) {
|
||||||
|
auto rt = std::ranges::views::repeat(t, std::ranges::size(r));
|
||||||
|
return std::ranges::equal(r, rt);
|
||||||
|
}
|
||||||
|
|
||||||
template<std::input_iterator I, std::sentinel_for<I> S, StringLike T>
|
template<std::input_iterator I, std::sentinel_for<I> S, StringLike T>
|
||||||
constexpr bool all_eq_to(I first, S last, T t) {
|
constexpr bool all_equal_to(I first, S last, T t) {
|
||||||
auto r1 = std::ranges::subrange(first, last);
|
auto r1 = std::ranges::subrange(first, last);
|
||||||
auto r2 = std::ranges::views::repeat(std::string_view(t), std::ranges::distance(first, last));
|
auto r2 = std::ranges::views::repeat(std::string_view(t), std::ranges::distance(first, last));
|
||||||
return std::ranges::equal(r1, r2);
|
return std::ranges::equal(r1, r2);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<std::input_iterator I, std::sentinel_for<I> S, typename T>
|
template<std::input_iterator I, std::sentinel_for<I> S, typename T>
|
||||||
constexpr bool all_eq_to(I first, S last, T t) {
|
constexpr bool all_equal_to(I first, S last, T t) {
|
||||||
auto r1 = std::ranges::subrange(first, last);
|
auto r1 = std::ranges::subrange(first, last);
|
||||||
auto r2 = std::ranges::views::repeat(t, std::ranges::distance(first, last));
|
auto r2 = std::ranges::views::repeat(t, std::ranges::distance(first, last));
|
||||||
return std::ranges::equal(r1, r2);
|
return std::ranges::equal(r1, r2);
|
||||||
|
|
@ -534,12 +545,12 @@ constexpr auto _repeat_for_types_n(auto f) {
|
||||||
} static_assert(true, "")
|
} static_assert(true, "")
|
||||||
|
|
||||||
#define CREATE_FROM_IL(type, il, len) \
|
#define CREATE_FROM_IL(type, il, len) \
|
||||||
([]<std::size_t N, typename ArgType>(std::initializer_list<ArgType> args) { \
|
([]<std::size_t _N, typename ArgType>(std::initializer_list<ArgType> args) { \
|
||||||
auto creator = [&args] <std::size_t ..._idx> (std::index_sequence<_idx...>) { \
|
auto creator = [&args] <std::size_t ..._idx> (std::index_sequence<_idx...>) { \
|
||||||
return type { (*std::next(std::begin(args), _idx))... }; \
|
return type { (*std::next(std::begin(args), _idx))... }; \
|
||||||
}; \
|
}; \
|
||||||
return creator(std::make_index_sequence<N>()); \
|
return creator(std::make_index_sequence<_N>()); \
|
||||||
}).operator()<len>(il)
|
}).template operator()<len>(il)
|
||||||
|
|
||||||
#define OPERATOR_EQ_IL(obj, il, len) \
|
#define OPERATOR_EQ_IL(obj, il, len) \
|
||||||
([&]<std::size_t N, typename ArgType>(std::initializer_list<ArgType> args) { \
|
([&]<std::size_t N, typename ArgType>(std::initializer_list<ArgType> args) { \
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue