24#ifndef MYSQL_SETS_ORDERED_SET_TRAITS_INTERFACE_H
25#define MYSQL_SETS_ORDERED_SET_TRAITS_INTERFACE_H
46template <
class Impl_tp,
class Element_tp>
50 const Element_tp &
right)
const {
59template <
class Test,
class Element_t>
61 requires(Element_t e1, Element_t e2) {
62 { Test::lt_impl(e1, e2) } -> std::convertible_to<bool>;
64 requires(Element_t e1, Element_t e2) {
65 { Test::cmp_impl(e1, e2) } -> std::convertible_to<std::strong_ordering>;
89template <
class Self_tp,
class Element_tp,
class Difference_tp =
void>
101 std::conditional_t<std::same_as<Difference_tp, void>, int, Difference_tp>;
110 return ge(element, Self_t::min()) &&
111 Self_t::lt(element, Self_t::max_exclusive());
114 [[nodiscard]]
static constexpr std::strong_ordering
cmp(
116 if constexpr (
requires { Self_t::cmp_impl(
left,
right); }) {
119 if (Self_t::lt(
left,
right))
return std::strong_ordering::less;
121 return std::strong_ordering::greater;
127 if constexpr (
requires { Self_t::lt_impl(
left,
right); }) {
130 return Self_t::cmp_impl(
left,
right) < 0;
159 requires(!std::same_as<Difference_t, void>)
170 requires(!std::same_as<Difference_t, void>)
178 requires(!std::same_as<Difference_t, void> &&
179 !std::same_as<Element_t, Difference_t>)
187 requires(!std::same_as<Difference_t, void> &&
188 !std::same_as<Element_t, Difference_t> &&
Definition: ordered_set_traits_interface.h:60
static bool equal(const Item *i1, const Item *i2, const Field *f2)
Definition: sql_select.cc:3935
void right(std::string *to_trim)
Definition: trim.h:41
void left(std::string *to_trim)
Definition: trim.h:35
Definition: gtid_set.h:183
Base class for all Set_traits classes.
Definition: set_traits.h:46
Helper CRTP base class to define Ordered Set traits classes, which are optionally Bounded and/or Metr...
Definition: ordered_set_traits_interface.h:90
static constexpr bool gt(const Element_t &left, const Element_t &right)
Definition: ordered_set_traits_interface.h:143
static constexpr bool ge(const Element_t &left, const Element_t &right)
Definition: ordered_set_traits_interface.h:151
static constexpr Difference_t add(const Difference_proxy_t &left, const Difference_proxy_t &right)
Definition: ordered_set_traits_interface.h:168
static constexpr Element_t add(const Difference_proxy_t &left, const Element_t &right)
Definition: ordered_set_traits_interface.h:185
Element_tp Element_t
Definition: ordered_set_traits_interface.h:104
static constexpr Difference_t sub(const Element_t &left, const Element_t &right)
Definition: ordered_set_traits_interface.h:157
Difference_tp Difference_t
Definition: ordered_set_traits_interface.h:105
static constexpr Element_t add(const Element_t &left, const Difference_proxy_t &right)
Definition: ordered_set_traits_interface.h:176
static constexpr bool in_range(const Element_t &element)
Definition: ordered_set_traits_interface.h:109
Self_tp Self_t
Definition: ordered_set_traits_interface.h:92
static constexpr bool lt(const Element_t &left, const Element_t &right)
Definition: ordered_set_traits_interface.h:125
std::conditional_t< std::same_as< Difference_tp, void >, int, Difference_tp > Difference_proxy_t
Definition: ordered_set_traits_interface.h:101
static constexpr std::strong_ordering cmp(const Element_t &left, const Element_t &right)
Definition: ordered_set_traits_interface.h:114
static constexpr bool le(const Element_t &left, const Element_t &right)
Definition: ordered_set_traits_interface.h:135
Helper class to define the Ordered_set_traits_interface::Less_t member.
Definition: ordered_set_traits_interface.h:47
constexpr bool operator()(const Element_tp &left, const Element_tp &right) const
Return Impl_tp::lt(left, right).
Definition: ordered_set_traits_interface.h:49