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
36 using iterator_category = std::bidirectional_iterator_tag;
38 using pointer = row
const *;
39 using reference = row;
43#include "pqxx/internal/ignore-deprecated-pre.hxx"
45 const_result_iterator() noexcept = default;
47 const_result_iterator(const_result_iterator const &) noexcept = default;
49 const_result_iterator(const_result_iterator &&) noexcept = default;
52 const_result_iterator(row const &t) noexcept : row{t} {}
53#include "pqxx/internal/ignore-deprecated-post.hxx"
70 [[nodiscard]] pointer operator->()
const {
return this; }
72#include "pqxx/internal/ignore-deprecated-pre.hxx"
74 [[nodiscard]] reference operator*()
const {
return *
this; }
75#include "pqxx/internal/ignore-deprecated-post.hxx"
85 using row::operator[];
94 const_result_iterator &operator=(const_result_iterator
const &rhs)
96#include "pqxx/internal/ignore-deprecated-pre.hxx"
98#include "pqxx/internal/ignore-deprecated-post.hxx"
102 const_result_iterator &operator=(const_result_iterator &&rhs)
104#include "pqxx/internal/ignore-deprecated-pre.hxx"
105 row::operator=(std::move(rhs));
106#include "pqxx/internal/ignore-deprecated-post.hxx"
110 const_result_iterator operator++(
int) &;
111 const_result_iterator &operator++()
116 const_result_iterator operator--(
int) &;
117 const_result_iterator &operator--()
123 const_result_iterator &operator+=(difference_type i)
128 const_result_iterator &operator-=(difference_type i)
135 void swap(const_result_iterator &other)
noexcept
137#include "pqxx/internal/ignore-deprecated-pre.hxx"
139#include "pqxx/internal/ignore-deprecated-post.hxx"
147 [[nodiscard]]
bool operator==(const_result_iterator
const &i)
const
149 return m_index == i.m_index;
151 [[nodiscard]]
bool operator!=(const_result_iterator
const &i)
const
153 return m_index != i.m_index;
155 [[nodiscard]]
bool operator<(const_result_iterator
const &i)
const
157 return m_index < i.m_index;
159 [[nodiscard]]
bool operator<=(const_result_iterator
const &i)
const
161 return m_index <= i.m_index;
163 [[nodiscard]]
bool operator>(const_result_iterator
const &i)
const
165 return m_index > i.m_index;
167 [[nodiscard]]
bool operator>=(const_result_iterator
const &i)
const
169 return m_index >= i.m_index;
177 [[nodiscard]]
inline const_result_iterator operator+(difference_type)
const;
178 friend const_result_iterator
179 operator+(difference_type, const_result_iterator
const &);
180 [[nodiscard]]
inline const_result_iterator operator-(difference_type)
const;
181 [[nodiscard]]
inline difference_type
182 operator-(const_result_iterator
const &)
const;
187 const_result_iterator(
pqxx::result const *r, result_size_type i) noexcept :
188 row{*r, i, r->columns()}
194class PQXX_LIBEXPORT const_reverse_result_iterator
195 :
private const_result_iterator
198 using super = const_result_iterator;
199 using iterator_type = const_result_iterator;
200 using iterator_type::difference_type;
201 using iterator_type::iterator_category;
202 using iterator_type::pointer;
204 using reference = iterator_type::reference;
207 const_reverse_result_iterator() =
default;
209 const_reverse_result_iterator(const_reverse_result_iterator
const &rhs) =
212 explicit const_reverse_result_iterator(const_result_iterator
const &rhs) :
213 const_result_iterator{rhs}
219 explicit const_reverse_result_iterator(const_result_iterator
const &&rhs) :
220 const_result_iterator{std::move(rhs)}
226 [[nodiscard]] PQXX_PURE const_result_iterator base() const noexcept;
233 using const_result_iterator::operator->;
235 using const_result_iterator::operator*;
242 using const_result_iterator::back;
243 using const_result_iterator::front;
245 using const_result_iterator::operator[];
246 using const_result_iterator::at;
247 using const_result_iterator::rownumber;
254 const_reverse_result_iterator &
255 operator=(const_reverse_result_iterator const &r)
257 iterator_type::operator=(r);
260 const_reverse_result_iterator &operator=(const_reverse_result_iterator &&r)
262 iterator_type::operator=(std::move(r));
265 const_reverse_result_iterator &operator++()
267 iterator_type::operator--();
270 const_reverse_result_iterator operator++(
int) &;
271 const_reverse_result_iterator &operator--()
273 iterator_type::operator++();
276 const_reverse_result_iterator operator--(
int) &;
277 const_reverse_result_iterator &operator+=(difference_type i)
279 iterator_type::operator-=(i);
282 const_reverse_result_iterator &operator-=(difference_type i)
284 iterator_type::operator+=(i);
288 void swap(const_reverse_result_iterator &other)
noexcept
290 const_result_iterator::swap(other);
298 [[nodiscard]] const_reverse_result_iterator
299 operator+(difference_type i)
const
301 return const_reverse_result_iterator(base() - i);
303 [[nodiscard]] const_reverse_result_iterator operator-(difference_type i)
305 return const_reverse_result_iterator(base() + i);
307 [[nodiscard]] difference_type
308 operator-(const_reverse_result_iterator
const &rhs)
const
310 return rhs.const_result_iterator::operator-(*this);
319 operator==(const_reverse_result_iterator
const &rhs)
const noexcept
321 return iterator_type::operator==(rhs);
324 operator!=(const_reverse_result_iterator
const &rhs)
const noexcept
326 return not operator==(rhs);
329 [[nodiscard]]
bool operator<(const_reverse_result_iterator
const &rhs)
const
331 return iterator_type::operator>(rhs);
333 [[nodiscard]]
bool operator<=(const_reverse_result_iterator
const &rhs)
const
335 return iterator_type::operator>=(rhs);
337 [[nodiscard]]
bool operator>(const_reverse_result_iterator
const &rhs)
const
339 return iterator_type::operator<(rhs);
341 [[nodiscard]]
bool operator>=(const_reverse_result_iterator
const &rhs)
const
343 return iterator_type::operator<=(rhs);
349inline const_result_iterator
350const_result_iterator::operator+(result::difference_type o)
const
352 return {&m_result, size_type(result::difference_type(m_index) + o)};
355inline const_result_iterator
356operator+(result::difference_type o, const_result_iterator
const &i)
361inline const_result_iterator
362const_result_iterator::operator-(result::difference_type o)
const
367inline result::difference_type
368const_result_iterator::operator-(
const const_result_iterator &i)
const
370 return result::difference_type(num() - i.num());
373inline const_result_iterator result::end() const noexcept
375 return {
this, size()};
379inline const_result_iterator result::cend() const noexcept
385inline const_reverse_result_iterator
386operator+(result::difference_type n, const_reverse_result_iterator
const &i)
388 return const_reverse_result_iterator{i.base() - n};
Result set containing data returned by a query or command.
Definition result.hxx:92
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:96
int result_difference_type
Difference between result sizes.
Definition types.hxx:31