13 #ifndef PQXX_H_RESULT_ITERATOR
14 #define PQXX_H_RESULT_ITERATOR
16 #include "pqxx/row.hxx"
36 using iterator_category = std::bidirectional_iterator_tag;
37 using value_type =
row const;
38 using pointer =
row const *;
43 #include "pqxx/internal/ignore-deprecated-pre.hxx"
53 #include "pqxx/internal/ignore-deprecated-post.hxx"
69 [[nodiscard]] pointer operator->()
const {
return this; }
72 #include "pqxx/internal/ignore-deprecated-pre.hxx"
75 #include "pqxx/internal/ignore-deprecated-post.hxx"
85 using row::operator[];
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)
137 #include "pqxx/internal/ignore-deprecated-pre.hxx"
139 #include "pqxx/internal/ignore-deprecated-post.hxx"
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;
200 using iterator_type::difference_type;
201 using iterator_type::iterator_category;
202 using iterator_type::pointer;
203 using value_type = iterator_type::value_type;
226 [[nodiscard]] PQXX_PURE const_result_iterator base() const noexcept;
232 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
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);
349 inline const_result_iterator
350 const_result_iterator::operator+(result::difference_type o)
const
355 inline const_result_iterator
356 operator+(result::difference_type o, const_result_iterator
const &i)
361 inline const_result_iterator
362 const_result_iterator::operator-(result::difference_type o)
const
367 inline result::difference_type
368 const_result_iterator::operator-(
const const_result_iterator &i)
const
370 return result::difference_type(num() - i.num());
373 inline const_result_iterator result::end() const noexcept
375 return {
this, size()};
379 inline const_result_iterator result::cend() const noexcept
385 inline const_reverse_result_iterator
386 operator+(result::difference_type n, const_reverse_result_iterator
const &i)
388 return const_reverse_result_iterator{i.base() - n};
Reference to one row in a result.
Definition: row.hxx:46
constexpr result::size_type rownumber() const noexcept
Row number, assuming this is a real row and not end()/rend().
Definition: row.hxx:112
Result set containing data returned by a query or command.
Definition: result.hxx:91
int result_size_type
Number of rows in a result set.
Definition: types.hxx:28
reference operator*() const
Dereference the iterator.
Definition: result_iterator.hxx:74
int result_difference_type
Difference between result sizes.
Definition: types.hxx:31
const_reverse_result_iterator(const_result_iterator const &&rhs)
Move a regular iterator into a reverse iterator.
Definition: result_iterator.hxx:219
result m_result
Result set of which this is one row.
Definition: row.hxx:253
The home of all libpqxx classes, functions, templates, etc.
Definition: array.cxx:26
const_reverse_result_iterator(const_result_iterator const &rhs)
Copy a reverse iterator from a regular iterator.
Definition: result_iterator.hxx:212
Iterator for rows in a result. Use as result::const_iterator.
Definition: result_iterator.hxx:32
Reverse iterator for result. Use as result::const_reverse_iterator.
Definition: result_iterator.hxx:194
void swap(const_result_iterator &other) noexcept
Interchange two iterators in an exception-safe manner.
Definition: result_iterator.hxx:135
const_result_iterator(row const &t) noexcept
Begin iterating a row.
Definition: result_iterator.hxx:52
result::size_type m_index
Row number.
Definition: row.hxx:260
PQXX_PURE row_size_type columns() const noexcept
Number of columns in result.
Definition: result.cxx:513