24#ifndef MYSQL_SETS_BOUNDARY_SET_PREDICATES_H
25#define MYSQL_SETS_BOUNDARY_SET_PREDICATES_H
44template <Is_boundary_set Boundary_set_t>
46 const Boundary_set_t &
set,
47 const typename Boundary_set_t::Element_t &element) {
48 return set.upper_bound(element).is_endpoint();
57template <Is_bounded_set_traits Set_traits_t>
61 auto ub = set2.upper_bound(interval1.
start());
62 return ub.is_endpoint() && Set_traits_t::le(interval1.
exclusive_end(), *ub);
69template <Is_bounded_set_traits Set_traits_t>
73 return set1.empty() ||
74 (Set_traits_t::le(interval2.
start(), set1.front()) &&
83template <Is_boundary_set Boundary_set1_t, Is_boundary_set Boundary_set2_t>
84 requires Is_compatible_set<Boundary_set1_t, Boundary_set2_t>
85[[nodiscard]]
constexpr bool is_subset(
const Boundary_set1_t &set1,
86 const Boundary_set2_t &set2) {
87 auto it1 = set1.begin();
88 auto end1 = set1.end();
89 auto it2 = set2.begin();
90 auto end2 = set2.end();
97 it2 = set2.upper_bound(it2, *it1);
99 if (it2 == end2)
return false;
101 if (!it2.is_endpoint())
return false;
105 it1 = set1.upper_bound(it1, *it2);
107 if (it1 == end1)
return true;
109 if (it1.is_endpoint())
return false;
120template <Is_bounded_set_traits Set_traits_t>
125 return ub.is_endpoint() ||
126 (ub !=
set.end() && Set_traits_t::lt(*ub,
interval.exclusive_end()));
133template <Is_bounded_set_traits Set_traits_t>
144template <Is_boundary_set Boundary_set1_t, Is_boundary_set Boundary_set2_t>
145 requires Is_compatible_set<Boundary_set1_t, Boundary_set2_t>
147 const Boundary_set2_t &set2) {
148 auto it1 = set1.begin();
149 auto end1 = set1.end();
150 auto it2 = set2.begin();
151 auto end2 = set2.end();
152 if (it1 == end1)
return false;
159 it2 = set2.upper_bound(it2, *it1);
161 if (it2 == end2)
return false;
163 if (it2.is_endpoint())
return true;
167 it1 = set1.upper_bound(it1, *it2);
169 if (it1 == end1)
return false;
171 if (it1.is_endpoint())
return true;
Holds the start boundary and endpoint boundary of an interval.
Definition: interval.h:178
constexpr const Element_t & exclusive_end() const
Return const reference to the exclusive endpoint of the interval.
Definition: interval.h:110
constexpr const Element_t & start() const
Return const reference to the starting point of the interval (inclusive).
Definition: interval.h:107
True if Test is an interval set over the given Set traits.
Definition: boundary_set_meta.h:217
static int interval
Definition: mysqladmin.cc:72
Definition: gtid_set.h:183
constexpr bool is_subset(const Interval< Set_traits_t > &interval1, const Is_boundary_set_over_traits< Set_traits_t > auto &set2)
Return true if the left Interval is a subset of or equal to the right Boundary_set.
Definition: boundary_set_predicates.h:58
bool contains_element(const mysql::gtids::Is_gtid_set auto >id_set, const mysql::gtids::Is_gtid auto >id) noexcept
contains_element for Gtid_sets, accepting a Gtid for the element.
Definition: gtid_set.h:186
constexpr bool is_intersecting(const Interval< Set_traits_t > &interval, const Is_boundary_set_over_traits< Set_traits_t > auto &set)
Return true if the left Interval and the right Boundary set intersect (overlap).
Definition: boundary_set_predicates.h:121
std::set< Key, Compare, ut::allocator< Key > > set
Specialization of set which uses ut_allocator.
Definition: ut0new.h:2888