13#ifndef PQXX_H_RESULT_ITERATOR
14#define PQXX_H_RESULT_ITERATOR
16#include "pqxx/row.hxx"
32class PQXX_LIBEXPORT const_result_iterator :
public row
35 using iterator_category = std::random_access_iterator_tag;
37 using pointer = row
const *;
38 using reference = row;
42#include "pqxx/internal/ignore-deprecated-pre.hxx"
44 const_result_iterator() noexcept = default;
46 const_result_iterator(const_result_iterator const &) noexcept = default;
48 const_result_iterator(const_result_iterator &&) noexcept = default;
51 const_result_iterator(row const &t) noexcept : row{t} {}
52#include "pqxx/internal/ignore-deprecated-post.hxx"
69 [[nodiscard]] pointer operator->()
const {
return this; }
71#include "pqxx/internal/ignore-deprecated-pre.hxx"
73 [[nodiscard]] reference operator*()
const {
return *
this; }
74#include "pqxx/internal/ignore-deprecated-post.hxx"
83 using row::operator[];
92 const_result_iterator &operator=(const_result_iterator
const &rhs)
94#include "pqxx/internal/ignore-deprecated-pre.hxx"
96#include "pqxx/internal/ignore-deprecated-post.hxx"
100 const_result_iterator &operator=(const_result_iterator &&rhs)
102#include "pqxx/internal/ignore-deprecated-pre.hxx"
103 row::operator=(std::move(rhs));
104#include "pqxx/internal/ignore-deprecated-post.hxx"
108 const_result_iterator operator++(
int) &;
109 const_result_iterator &operator++()
114 const_result_iterator operator--(
int) &;
115 const_result_iterator &operator--()
121 const_result_iterator &operator+=(difference_type i)
126 const_result_iterator &operator-=(difference_type i)
133 void swap(const_result_iterator &other)
noexcept
135#include "pqxx/internal/ignore-deprecated-pre.hxx"
137#include "pqxx/internal/ignore-deprecated-post.hxx"
145 [[nodiscard]]
bool operator==(const_result_iterator
const &i)
const
147 return m_index == i.m_index;
149 [[nodiscard]]
bool operator!=(const_result_iterator
const &i)
const
151 return m_index != i.m_index;
153 [[nodiscard]]
bool operator<(const_result_iterator
const &i)
const
155 return m_index < i.m_index;
157 [[nodiscard]]
bool operator<=(const_result_iterator
const &i)
const
159 return m_index <= i.m_index;
161 [[nodiscard]]
bool operator>(const_result_iterator
const &i)
const
163 return m_index > i.m_index;
165 [[nodiscard]]
bool operator>=(const_result_iterator
const &i)
const
167 return m_index >= i.m_index;
175 [[nodiscard]]
inline const_result_iterator operator+(difference_type)
const;
176 friend const_result_iterator
177 operator+(difference_type, const_result_iterator
const &);
178 [[nodiscard]]
inline const_result_iterator operator-(difference_type)
const;
179 [[nodiscard]]
inline difference_type
180 operator-(const_result_iterator
const &)
const;
185 const_result_iterator(
pqxx::result const *r, result_size_type i) noexcept :
186 row{*r, i, r->columns()}
192class PQXX_LIBEXPORT const_reverse_result_iterator
193 :
private const_result_iterator
196 using super = const_result_iterator;
197 using iterator_type = const_result_iterator;
198 using iterator_type::difference_type;
199 using iterator_type::iterator_category;
200 using iterator_type::pointer;
202 using reference = iterator_type::reference;
205 const_reverse_result_iterator() =
default;
207 const_reverse_result_iterator(const_reverse_result_iterator
const &rhs) =
210 explicit const_reverse_result_iterator(const_result_iterator
const &rhs) :
211 const_result_iterator{rhs}
217 explicit const_reverse_result_iterator(const_result_iterator
const &&rhs) :
218 const_result_iterator{std::move(rhs)}
224 [[nodiscard]] PQXX_PURE const_result_iterator base() const noexcept;
231 using const_result_iterator::operator->;
233 using const_result_iterator::operator*;
240 using const_result_iterator::back;
241 using const_result_iterator::front;
242 using const_result_iterator::operator[];
243 using const_result_iterator::at;
244 using const_result_iterator::rownumber;
251 const_reverse_result_iterator &
252 operator=(const_reverse_result_iterator const &r)
254 iterator_type::operator=(r);
257 const_reverse_result_iterator &operator=(const_reverse_result_iterator &&r)
259 iterator_type::operator=(std::move(r));
262 const_reverse_result_iterator &operator++()
264 iterator_type::operator--();
267 const_reverse_result_iterator operator++(
int) &;
268 const_reverse_result_iterator &operator--()
270 iterator_type::operator++();
273 const_reverse_result_iterator operator--(
int) &;
274 const_reverse_result_iterator &operator+=(difference_type i)
276 iterator_type::operator-=(i);
279 const_reverse_result_iterator &operator-=(difference_type i)
281 iterator_type::operator+=(i);
285 void swap(const_reverse_result_iterator &other)
noexcept
287 const_result_iterator::swap(other);
295 [[nodiscard]] const_reverse_result_iterator
296 operator+(difference_type i)
const
298 return const_reverse_result_iterator(base() - i);
300 [[nodiscard]] const_reverse_result_iterator operator-(difference_type i)
302 return const_reverse_result_iterator(base() + i);
304 [[nodiscard]] difference_type
305 operator-(const_reverse_result_iterator
const &rhs)
const
307 return rhs.const_result_iterator::operator-(*this);
316 operator==(const_reverse_result_iterator
const &rhs)
const noexcept
318 return iterator_type::operator==(rhs);
321 operator!=(const_reverse_result_iterator
const &rhs)
const noexcept
323 return not operator==(rhs);
326 [[nodiscard]]
bool operator<(const_reverse_result_iterator
const &rhs)
const
328 return iterator_type::operator>(rhs);
330 [[nodiscard]]
bool operator<=(const_reverse_result_iterator
const &rhs)
const
332 return iterator_type::operator>=(rhs);
334 [[nodiscard]]
bool operator>(const_reverse_result_iterator
const &rhs)
const
336 return iterator_type::operator<(rhs);
338 [[nodiscard]]
bool operator>=(const_reverse_result_iterator
const &rhs)
const
340 return iterator_type::operator<=(rhs);
346inline const_result_iterator
347const_result_iterator::operator+(result::difference_type o)
const
349 return {&m_result, size_type(result::difference_type(m_index) + o)};
352inline const_result_iterator
353operator+(result::difference_type o, const_result_iterator
const &i)
358inline const_result_iterator
359const_result_iterator::operator-(result::difference_type o)
const
364inline result::difference_type
365const_result_iterator::operator-(
const const_result_iterator &i)
const
367 return result::difference_type(num() - i.num());
370inline const_result_iterator result::end() const noexcept
372 return {
this, size()};
376inline const_result_iterator result::cend() const noexcept
382inline const_reverse_result_iterator
383operator+(result::difference_type n, const_reverse_result_iterator
const &i)
385 return const_reverse_result_iterator{i.base() - n};
Result set containing data returned by a query or command.
Definition result.hxx:73
The home of all libpqxx classes, functions, templates, etc.
Definition array.cxx:27
int result_size_type
Number of rows in a result set.
Definition types.hxx:28
strip_t< decltype(*std::begin(std::declval< CONTAINER >()))> value_type
The type of a container's elements.
Definition types.hxx:94
int result_difference_type
Difference between result sizes.
Definition types.hxx:31