13#ifndef PQXX_H_RESULT_ITERATOR
14#define PQXX_H_RESULT_ITERATOR
16#include "pqxx/row.hxx"
35 using iterator_category = std::random_access_iterator_tag;
36 using value_type =
row const;
37 using pointer =
row const *;
42#include "pqxx/internal/ignore-deprecated-pre.hxx"
52#include "pqxx/internal/ignore-deprecated-post.hxx"
69 [[nodiscard]] pointer
operator->()
const {
return this; }
71#include "pqxx/internal/ignore-deprecated-pre.hxx"
74#include "pqxx/internal/ignore-deprecated-post.hxx"
83 using row::operator[];
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)
135#include "pqxx/internal/ignore-deprecated-pre.hxx"
137#include "pqxx/internal/ignore-deprecated-post.hxx"
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 &);
179 [[nodiscard]]
inline difference_type
186 row{*r, i, r->columns()}
198 using iterator_type::difference_type;
199 using iterator_type::iterator_category;
200 using iterator_type::pointer;
201 using value_type = iterator_type::value_type;
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
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
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};
Iterator for rows in a result. Use as result::const_iterator.
Definition: result_iterator.hxx:33
void swap(const_result_iterator &other) noexcept
Interchange two iterators in an exception-safe manner.
Definition: result_iterator.hxx:133
pointer operator->() const
Dereference the iterator.
Definition: result_iterator.hxx:69
const_result_iterator() noexcept=default
Create an iterator, but in an unusable state.
reference operator*() const
Dereference the iterator.
Definition: result_iterator.hxx:73
Reverse iterator for result. Use as result::const_reverse_iterator.
Definition: result_iterator.hxx:194
const_reverse_result_iterator(const_reverse_result_iterator const &rhs)=default
Copy an iterator.
const_reverse_result_iterator(const_result_iterator const &rhs)
Copy a reverse iterator from a regular iterator.
Definition: result_iterator.hxx:210
const_reverse_result_iterator(const_result_iterator const &&rhs)
Move a regular iterator into a reverse iterator.
Definition: result_iterator.hxx:217
const_reverse_result_iterator()=default
Create an iterator, but in an unusable state.
Result set containing data returned by a query or command.
Definition: result.hxx:73
Reference to one row in a result.
Definition: row.hxx:47
result m_result
Result set of which this is one row.
Definition: row.hxx:249
result::size_type m_index
Row number.
Definition: row.hxx:256
constexpr result::size_type rownumber() const noexcept
Row number, assuming this is a real row and not end()/rend().
Definition: row.hxx:112
The home of all libpqxx classes, functions, templates, etc.
Definition: array.cxx:27
int result_difference_type
Difference between result sizes.
Definition: types.hxx:31
int result_size_type
Number of rows in a result set.
Definition: types.hxx:28