24#ifndef MYSQL_SETS_SET_TRAITS_H
25#define MYSQL_SETS_SET_TRAITS_H
58template <
class Test,
class Set_traits_t =
void>
64template <
class Test1,
class Test2>
67 std::same_as<typename Test1::Set_traits_t, typename Test2::Set_traits_t>;
76template <
class Test,
class Element_t =
void>
90 requires(
typename Test::Element_t v1,
typename Test::Element_t v2) {
91 { Test::lt(v1, v2) } -> std::same_as<bool>;
92 { Test::le(v1, v2) } -> std::same_as<bool>;
93 { Test::gt(v1, v2) } -> std::same_as<bool>;
94 { Test::ge(v1, v2) } -> std::same_as<bool>;
95 {
typename Test::Less_t()(v1, v2) } -> std::same_as<bool>;
107 requires(
typename Test::Element_t
value) {
108 { Test::min() } -> std::same_as<typename Test::Element_t>;
109 { Test::max_exclusive() } -> std::same_as<typename Test::Element_t>;
110 { Test::in_range(
value) } -> std::same_as<bool>;
121 requires(
typename Test::Element_t v1,
typename Test::Element_t v2) {
122 { Test::next(v1) } -> std::same_as<typename Test::Element_t>;
123 { Test::prev(v1) } -> std::same_as<typename Test::Element_t>;
138 std::same_as<typename Test::Difference_t, typename Test::Difference_t> &&
139 (!std::same_as<typename Test::Difference_t, void>) &&
140 requires(Test t,
typename Test::Element_t v1,
typename Test::Element_t v2,
141 typename Test::Difference_t
d1,
typename Test::Difference_t d2) {
142 {
Test::sub(v1, v2) } -> std::same_as<typename Test::Difference_t>;
143 {
Test::add(v1,
d1) } -> std::same_as<typename Test::Element_t>;
144 {
Test::add(
d1, v1) } -> std::same_as<typename Test::Element_t>;
145 {
Test::add(
d1, d2) } -> std::same_as<typename Test::Difference_t>;
True if Test1 and Test2 have the same Set_traits_t.
Definition: set_traits.h:65
True if Test has a member Set_traits_t.
Definition: set_traits.h:59
True if Test is a "bounded" Set traits class.
Definition: set_traits.h:105
True if Test satisfies both Is_discrete_set_traits and Is_metric_set_traits.
Definition: set_traits.h:151
True if Test is a "discrete" Set traits class, i.e., it bounded, and it is possible to compute succes...
Definition: set_traits.h:119
True if Test is a Set traits class with an element type member, Element_t.
Definition: set_traits.h:77
True if Test is a "metric" Set traits class, i.e., it is bounded, and it is possible to compute diffe...
Definition: set_traits.h:136
True if Test is an "ordered" Set traits class.
Definition: set_traits.h:88
True if Test is a Set_traits class, i.e., is derived from Base_set_traits.
Definition: set_traits.h:50
Type sub(Shards< COUNT > &shards, size_t id, size_t n)
Decrement the counter for a shard by n.
Definition: ut0counter.h:280
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
Definition: gtid_set.h:183
static mysql_service_status_t add(reference_caching_channel channel, const char *implementation_name) noexcept
Definition: component.cc:127
Base class for all Set_traits classes.
Definition: set_traits.h:46