24#ifndef MYSQL_SETS_BOUNDARY_SET_META_H
25#define MYSQL_SETS_BOUNDARY_SET_META_H
84 std::forward_iterator<Test> &&
85 requires(
const Test iterator) {
86 { iterator.is_endpoint() } -> std::convertible_to<bool>;
98template <
class Test,
class Value_t>
101 std::same_as<mysql::ranges::Iterator_value_type<Test>, Value_t>;
124template <
class Test,
class Iterator_t,
class Const_iterator_t,
class Element_t>
127 requires(
const Test &ct, Test &t,
const Iterator_t &i,
128 const Const_iterator_t &ci,
const Element_t &e) {
129 { t.upper_bound(e) } -> std::same_as<Iterator_t>;
130 { t.upper_bound(i, e) } -> std::same_as<Iterator_t>;
131 { t.lower_bound(e) } -> std::same_as<Iterator_t>;
132 { t.lower_bound(i, e) } -> std::same_as<Iterator_t>;
133 { ct.upper_bound(e) } -> std::same_as<Const_iterator_t>;
134 { ct.upper_bound(ci, e) } -> std::same_as<Const_iterator_t>;
135 { ct.lower_bound(e) } -> std::same_as<Const_iterator_t>;
136 { ct.lower_bound(ci, e) } -> std::same_as<Const_iterator_t>;
159template <
class Test,
class Iterator_t,
class Const_iterator_t,
class Element_t>
164 typename Test::Set_traits_t::Element_t,
168 Const_iterator_t, Element_t>;
216template <
class Test,
class Set_traits_t>
231template <
class Test,
class Set_traits_t>
234 std::is_reference_v<Test>;
238template <
class Test,
class Set_traits_t>
253template <
class Test,
class Iterator_t,
class Const_iterator_t,
class Element_t>
257 typename Test::Element_t, Element_t> &&
269template <
class Test,
class Iterator_t,
class Const_iterator_t,
class Element_t>
273 requires(Test t,
const Test ct,
const Iterator_t i1,
const Iterator_t i2,
274 const Element_t e1,
const Element_t e2) {
277 { t.update_point(i1, e1) } -> std::same_as<Iterator_t>;
278 { t.insert(i1, e1, e2) } -> std::same_as<Iterator_t>;
279 { t.erase(i1, i2) } -> std::same_as<Iterator_t>;
280 { Test::has_fast_insertion } -> std::convertible_to<bool>;
307 typename Test::Element_t>;
312template <
class Test,
class Set_traits_t>
349template <
class Test,
class Set_traits_t>
362template <
class Container_t>
366template <
class Container_t>
367 requires requires {
typename Container_t::Storage_t; }
369 using Type =
typename Container_t::Storage_t;
377template <
class Container_t>
394template <
class Test,
class Element_t,
class... Interval_t>
396 std::is_nothrow_move_assignable_v<Test> &&
397 std::is_nothrow_move_constructible_v<Test> &&
398 requires(Test t, Test other, Element_t
value, Interval_t...
interval) {
403 t.inplace_union(other);
405 t.inplace_subtract(other);
407 t.inplace_intersect(other);
438 Test,
typename Test::Set_traits_t::Element_t,
439 typename Test::Set_traits_t::Element_t,
440 typename Test::Set_traits_t::Element_t> &&
441 requires(Test t,
typename Test::Set_traits_t::Element_t
start,
442 typename Test::Set_traits_t::Element_t exclusive_end,
444 t.inplace_union(it,
start, exclusive_end);
445 t.inplace_subtract(it,
start, exclusive_end);
452 std::is_reference_v<Test>;
460template <
class Source_t,
class Target_t>
463 requires(Source_t
source, Target_t target,
468 target.steal_and_insert(it, e1, e2,
source)
470 -> std::same_as<mysql::ranges::Range_iterator_type<Target_t>>;
475template <
class Source_t,
class Target_t>
479 typename Target_t::Storage_t>;
486template <
class Source_t,
class Target_t>
495template <
class Source_t,
class Target_t>
True if Test models Is_collection, with Value_t as its value type.
Definition: meta.h:131
True if move-semantics has been declared as enabled for inplace_union/inplace_intersect/inplace_subtr...
Definition: meta.h:107
True if Test has a member Set_category_t satisfying Is_set_category.
Definition: set_categories.h:55
True if Test has a member Set_traits_t.
Definition: set_traits.h:59
True if Test is a boundary point iterator and a bidirectional iterator.
Definition: boundary_set_meta.h:105
True if Test is a reference to a Boundary_container.
Definition: boundary_set_meta.h:450
True if Test is a Boundary container.
Definition: boundary_set_meta.h:435
True if Test is a boundary point iterator over values of type Value_t.
Definition: boundary_set_meta.h:99
True if Test is a boundary point iterator, i.e.
Definition: boundary_set_meta.h:83
Definition: boundary_set_meta.h:239
True if Test is an interval set over the given Set traits.
Definition: boundary_set_meta.h:217
True if Test is a reference to a boundary set.
Definition: boundary_set_meta.h:232
True if Test is a reference to a boundary set.
Definition: boundary_set_meta.h:225
True if Test is an interval set, i.e., provides a view over intervals sorted by their endpoints,...
Definition: boundary_set_meta.h:209
True if Test is a boundary storage over the given Set traits.
Definition: boundary_set_meta.h:350
True if Test is a readable boundary storage, i.e., an object that can be used as the back-end storage...
Definition: boundary_set_meta.h:342
True if Test is a "bounded" Set traits class.
Definition: set_traits.h:105
True if Test is a boundary point iterator and a contiguous iterator.
Definition: boundary_set_meta.h:115
True if Test is a boundary point iterator and a random access iterator.
Definition: boundary_set_meta.h:110
True if Test is a boundary storage over the given Set traits.
Definition: boundary_set_meta.h:313
True if Test is a readable boundary storage, i.e., an object that can be used as the back-end storage...
Definition: boundary_set_meta.h:303
True if Test is a set.
Definition: set_categories_and_traits.h:62
True if Test satisfies the requirements for being a subclass of Upper_lower_bound_interface.
Definition: upper_lower_bound_interface.h:158
Helper to implement Is_boundary_container and Is_interval_container.
Definition: boundary_set_meta.h:395
True if Test is an interval set with Element_t as its element type, assuming that Iterator_t is its i...
Definition: boundary_set_meta.h:160
True if Test satisfiesIs_boundary_storagewithElement_tas its element type, assuming thatIterator_tand...
Definition: boundary_set_meta.h:270
Definition: boundary_set_meta.h:125
True if Test satisfiesIs_readable_boundary_storagewithElement_tas its element type,...
Definition: boundary_set_meta.h:254
Helper concept to define the condition when Enable_donate_set_elements shall be defined for Boundary ...
Definition: boundary_set_meta.h:476
Helper concept to define the condition when Enable_donate_set_elements shall be defined for Boundary ...
Definition: boundary_set_meta.h:461
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:180
static int interval
Definition: mysqladmin.cc:72
Definition: fts0fts.cc:236
ValueType value(const std::optional< ValueType > &v)
Definition: gtid.h:83
std::remove_cvref_t< decltype(std::declval< const Range_t >().begin())> Range_const_iterator_type
Gives the const_iterator type, deduced from the begin() const member.
Definition: meta.h:47
std::remove_cvref_t< decltype(std::declval< Range_t >().begin())> Range_iterator_type
Gives the iterator type, deduced from the begin() member.
Definition: meta.h:42
Iterator_value_type< Range_iterator_type< Range_t > > Range_value_type
Gives the value type for any collection, deduced from *begin().
Definition: meta.h:67
Definition: gtid_set.h:183
detail::Storage_or_void_helper< Container_t >::Type Storage_or_void
Type alias for Container_t::Storage_t if that exists, or void otherwise.
Definition: boundary_set_meta.h:378
repeated Source source
Definition: replication_asynchronous_connection_failover.proto:42
Customization point that set container types can use to indicate that they support noexcept move-sema...
Definition: meta.h:101
typename Container_t::Storage_t Type
Definition: boundary_set_meta.h:369
Helper to define Storage_or_void.
Definition: boundary_set_meta.h:363
void Type
Definition: boundary_set_meta.h:364