24#ifndef MYSQL_RANGES_COLLECTION_INTERFACE_H
25#define MYSQL_RANGES_COLLECTION_INTERFACE_H
89template <
class Self_tp>
92 template <
class Range_t>
97 [[nodiscard]]
constexpr auto cbegin()
const {
return self().
begin(); }
100 [[nodiscard]]
constexpr auto cend()
const {
return self().end(); }
104 return std::make_reverse_iterator(
self().end());
108 [[nodiscard]]
constexpr auto rend() {
109 return std::make_reverse_iterator(
self().
begin());
113 [[nodiscard]]
constexpr auto rbegin()
const {
114 return std::make_reverse_iterator(
self().end());
118 [[nodiscard]]
constexpr auto rend()
const {
119 return std::make_reverse_iterator(
self().
begin());
123 [[nodiscard]]
constexpr auto crbegin()
const {
124 return std::make_reverse_iterator(
self().end());
128 [[nodiscard]]
constexpr auto crend()
const {
129 return std::make_reverse_iterator(
self().
begin());
133 [[nodiscard]]
constexpr bool empty()
const {
134 return self().
begin() ==
self().end();
138 [[nodiscard]]
constexpr explicit operator bool()
const {
return !
empty(); }
145 [[nodiscard]]
constexpr auto size()
const {
153 [[nodiscard]]
constexpr auto ssize()
const {
return std::ptrdiff_t(
size()); }
156 [[nodiscard]]
constexpr decltype(
auto)
front()
const {
157 return *
self().
begin();
161 [[nodiscard]]
constexpr decltype(
auto)
back()
const
162 requires(std::bidirectional_iterator<Iterator_for<Self_t>> &&
163 std::same_as<Iterator_for<Self_t>,
164 decltype(std::declval<Self_t>().end())>)
168 return *std::ranges::prev(
self().end());
173 [[nodiscard]]
constexpr decltype(
auto)
operator[](std::ptrdiff_t
n)
174 requires std::random_access_iterator<Iterator_for<Self_t>>
181 [[nodiscard]]
constexpr decltype(
auto)
operator[](std::ptrdiff_t
n)
const
182 requires std::random_access_iterator<Iterator_for<Self_t>>
189 [[nodiscard]]
constexpr auto *
data()
192 return &*
self().
begin();
197 [[nodiscard]]
constexpr auto *
data() const
200 return &*
self().
begin();
208 [[nodiscard]]
const Self_t &
self()
const {
209 return static_cast<const Self_t &
>(*this);
CRTP base class to provide members of a collection based on an implementation that provides begin/end...
Definition: collection_interface.h:90
constexpr auto * data()
Return pointer to underlying contiguous memory.
Definition: collection_interface.h:189
constexpr auto * data() const
Return const pointer to underlying contiguous memory.
Definition: collection_interface.h:197
mysql::ranges::Range_iterator_type< Range_t > Iterator_for
Definition: collection_interface.h:93
constexpr auto rbegin() const
Return const reverse iterator to the beginning.
Definition: collection_interface.h:113
constexpr auto crend() const
Return const reverse iterator to the end.
Definition: collection_interface.h:128
constexpr auto cend() const
Return constant iterator to the end.
Definition: collection_interface.h:100
constexpr auto rend()
Return reverse iterator to the end.
Definition: collection_interface.h:108
constexpr bool operator!() const
Return true if the range is empty, i.e., begin() == end().
Definition: collection_interface.h:141
constexpr auto ssize() const
Return the number of elements in this view, signed (ptrdiff_t).
Definition: collection_interface.h:153
constexpr auto rend() const
Return const reverse iterator to the end.
Definition: collection_interface.h:118
constexpr auto size() const
Return the number of elements in this view, unsigned (size_t), by computing std::ranges::distance(beg...
Definition: collection_interface.h:145
constexpr decltype(auto) back() const
Return the last element. Enabled if we have bidirectional iterators.
Definition: collection_interface.h:161
constexpr decltype(auto) front() const
Return the first element.
Definition: collection_interface.h:156
constexpr auto cbegin() const
Return constant iterator to the beginning.
Definition: collection_interface.h:97
constexpr bool empty() const
Return true if the range is empty, i.e., begin() == end().
Definition: collection_interface.h:133
constexpr auto rbegin()
Return reverse iterator to the beginning.
Definition: collection_interface.h:103
Self_tp Self_t
Definition: collection_interface.h:91
constexpr auto crbegin() const
Return const reverse iterator to the beginning.
Definition: collection_interface.h:123
bool distance(const dd::Spatial_reference_system *srs, const Geometry *g1, const Geometry *g2, double *distance, bool *is_null) noexcept
Computes the distance between two geometries.
Definition: distance.cc:40
Definition: buffer_interface.h:40
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
const char * begin(const char *const c)
Definition: base64.h:44
Define std::hash<Gtid>.
Definition: gtid.h:355
int n
Definition: xcom_base.cc:509