dncurrency/nano/store/reverse_iterator.hpp

48 lines
1.5 KiB
C++

#pragma once
namespace nano::store
{
/**
* @class reverse_iterator
* @brief A reverse iterator adaptor for bidirectional iterators.
*
* This class template adapts any bidirectional iterator to reverse its direction of iteration.
* It inverts the semantics of increment and decrement operations.
*
* Key characteristics:
* - Incrementing (operator++) moves to the previous element in the sequence.
* - Decrementing (operator--) moves to the next element in the sequence.
* - Dereferencing refers to the same element as the adapted iterator.
* - Compatible with any bidirectional iterator, not limited to specific container types.
*/
template <typename Iter>
class reverse_iterator
{
public:
using iterator_category = std::bidirectional_iterator_tag;
using value_type = Iter::value_type;
using pointer = value_type *;
using const_pointer = value_type const *;
using reference = value_type &;
using const_reference = value_type const &;
private:
Iter internal;
public:
reverse_iterator (Iter && other) noexcept;
reverse_iterator (reverse_iterator const &) = delete;
auto operator= (reverse_iterator const &) -> reverse_iterator & = delete;
reverse_iterator (reverse_iterator && other) noexcept;
auto operator= (reverse_iterator && other) noexcept -> reverse_iterator &;
auto operator++ () -> reverse_iterator &;
auto operator-- () -> reverse_iterator &;
auto operator->() const -> const_pointer;
auto operator* () const -> const_reference;
auto operator== (reverse_iterator const & other) const -> bool;
bool is_end () const;
};
}