rename all_eq_to to all_equal and added version for ranges

This commit is contained in:
Patrick 2024-07-28 23:33:47 +02:00
parent 0fdff1e1c3
commit 0c51825033
1 changed files with 16 additions and 5 deletions

View File

@ -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) { \