13#ifndef PQXX_H_RESULT_ITERATOR
14#define PQXX_H_RESULT_ITERATOR
36 using iterator_category = std::bidirectional_iterator_tag;
38 using pointer = row
const *;
39 using reference = row;
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} {}
70 [[nodiscard]] pointer operator->()
const {
return this; }
74 [[nodiscard]] reference operator*()
const {
return *
this; }
85 using row::operator[];
94 const_result_iterator &operator=(const_result_iterator
const &rhs)
102 const_result_iterator &operator=(const_result_iterator &&rhs)
105 row::operator=(std::move(rhs));
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
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;
186 friend class pqxx::result;
187 const_result_iterator(pqxx::result
const *r, result_size_type i) noexcept :
188 row{*r, i, r->columns()}
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
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
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
355inline const_result_iterator
361inline const_result_iterator
368const_result_iterator::operator-(
const const_result_iterator &i)
const
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
388 return const_reverse_result_iterator{i.base() - n};
const_iterator end() const noexcept
Definition result_iterator.hxx:598
result_difference_type difference_type
Definition result.hxx:96
PQXX_PURE size_type size() const noexcept
Definition result.cxx:115
const_iterator cend() const noexcept
Definition result_iterator.hxx:604
bool operator!=(stream_query_end_iterator, stream_query_input_iterator< TYPE... > const &i)
Definition stream_query_impl.hxx:143
bool operator==(stream_query_end_iterator, stream_query_input_iterator< TYPE... > const &i)
Definition stream_query_impl.hxx:135
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
const_result_iterator operator+(result::difference_type o, const_result_iterator const &i)
Definition result_iterator.hxx:581
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