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>
|
||||
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>
|
||||
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 r2 = std::ranges::views::repeat(std::string_view(t), std::ranges::distance(first, last));
|
||||
return std::ranges::equal(r1, r2);
|
||||
}
|
||||
|
||||
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 r2 = std::ranges::views::repeat(t, std::ranges::distance(first, last));
|
||||
return std::ranges::equal(r1, r2);
|
||||
|
|
@ -534,12 +545,12 @@ constexpr auto _repeat_for_types_n(auto f) {
|
|||
} static_assert(true, "")
|
||||
|
||||
#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...>) { \
|
||||
return type { (*std::next(std::begin(args), _idx))... }; \
|
||||
}; \
|
||||
return creator(std::make_index_sequence<N>()); \
|
||||
}).operator()<len>(il)
|
||||
return creator(std::make_index_sequence<_N>()); \
|
||||
}).template operator()<len>(il)
|
||||
|
||||
#define OPERATOR_EQ_IL(obj, il, len) \
|
||||
([&]<std::size_t N, typename ArgType>(std::initializer_list<ArgType> args) { \
|
||||
|
|
|
|||
Loading…
Reference in New Issue