21 Internet protocol [internet]

21.9 Class template ip::basic_address_iterator specializations [internet.address.iter]

The class template basic_address_iterator enables iteration over IP addresses in network byte order. This clause defines two specializations of the class template basic_address_iterator: basic_address_iterator<address_v4> and basic_address_iterator<address_v6>. The members and operational semantics of these specializations are defined below.

namespace std {
namespace experimental {
namespace net {
inline namespace v1 {
namespace ip {

  template<> class basic_address_iterator<Address>
  {
  public:
    // types:
    using value_type = Address;
    using difference_type = ptrdiff_t;
    using pointer = const Address*;
    using reference = const Address&;
    using iterator_category = input_iterator_tag;

    // constructors:
    basic_address_iterator(const Address& a) noexcept;

    // members:
    reference operator*() const noexcept;
    pointer operator->() const noexcept;
    basic_address_iterator& operator++() noexcept;
    basic_address_iterator operator++(int) noexcept;
    basic_address_iterator& operator--() noexcept;
    basic_address_iterator operator--(int) noexcept;

    // other members as required by C++ 2014 [input.iterators]

  private:
    Address address_; // exposition only
  };

} // namespace ip
} // inline namespace v1
} // namespace net
} // namespace experimental
} // namespace std

Specializations of basic_address_iterator satisfy the requirements for input iterators (C++ 2014 [input.iterators]).

basic_address_iterator(const Address& a) noexcept;

Effects: Initializes address_ with a.

reference operator*() const noexcept;

Returns: address_.

pointer operator->() const noexcept;

Returns: addressof(address_).

basic_address_iterator& operator++() noexcept;

Effects: Sets address_ to the next unique address in network byte order.

Returns: *this.

basic_address_iterator operator++(int) noexcept;

Effects: Sets address_ to the next unique address in network byte order.

Returns: The prior value of *this.

basic_address_iterator& operator--() noexcept;

Effects: Sets address_ to the prior unique address in network byte order.

Returns: *this.

basic_address_iterator operator--(int) noexcept;

Effects: Sets address_ to the prior unique address in network byte order.

Returns: The prior value of *this.