30#ifndef TINS_PDU_ITERATOR_H
31#define TINS_PDU_ITERATOR_H
43template <
typename Concrete>
61 return static_cast<Concrete&
>(*this);
68 Concrete output =
static_cast<Concrete&
>(*this);
78 return static_cast<Concrete&
>(*this);
85 Concrete output =
static_cast<Concrete&
>(*this);
91 Concrete& self =
static_cast<Concrete&
>(*this);
92 self = Concrete(self->inner_pdu());
96 Concrete& self =
static_cast<Concrete&
>(*this);
97 self = Concrete(self->parent_pdu());
107template <
typename Concrete>
109 const PDU* lhs_pdu =
static_cast<const Concrete&
>(lhs).operator->();
110 const PDU* rhs_pdu =
static_cast<const Concrete&
>(rhs).operator->();
111 return lhs_pdu == rhs_pdu;
120template <
typename Concrete>
122 return !(lhs == rhs);
228template <
typename Iterator>
238 : start_(start), end_(end) {
242 template <
typename OtherIterator>
244 : start_(other.begin().operator->()), end_(other.end().operator->()) {
258 Iterator begin()
const {
272 Iterator end()
const {
293PDUIteratorRange<PDUIterator>
iterate_pdus(Packet& packet);
298PDUIteratorRange<ConstPDUIterator>
iterate_pdus(
const PDU* pdu);
303PDUIteratorRange<ConstPDUIterator>
iterate_pdus(
const PDU& pdu);
308PDUIteratorRange<ConstPDUIterator>
iterate_pdus(
const Packet& packet);
Definition: pdu_iterator.h:178
const PDU & value_type
Definition: pdu_iterator.h:193
const PDU & reference
Definition: pdu_iterator.h:188
value_type operator*() const
Definition: pdu_iterator.cpp:74
const PDU * pointer
Definition: pdu_iterator.h:183
pointer operator->() const
Definition: pdu_iterator.cpp:70
Definition: pdu_iterator.h:44
Concrete operator--(int)
Definition: pdu_iterator.h:84
std::ptrdiff_t difference_type
Definition: pdu_iterator.h:54
Concrete & operator++()
Definition: pdu_iterator.h:59
Concrete operator++(int)
Definition: pdu_iterator.h:67
Concrete & operator--()
Definition: pdu_iterator.h:76
std::bidirectional_iterator_tag iterator_category
Definition: pdu_iterator.h:49
Definition: pdu_iterator.h:229
PDUIteratorRange(Iterator start, Iterator end)
Definition: pdu_iterator.h:237
Definition: pdu_iterator.h:128
PDU & value_type
Definition: pdu_iterator.h:143
PDU & operator*()
Definition: pdu_iterator.cpp:50
PDU & reference
Definition: pdu_iterator.h:138
PDU * pointer
Definition: pdu_iterator.h:133
pointer operator->()
Definition: pdu_iterator.cpp:42
Base class for protocol data units.
Definition: pdu.h:107
The Tins namespace.
Definition: address_range.h:38
bool operator==(const PDUIteratorBase< Concrete > &lhs, const PDUIteratorBase< Concrete > &rhs)
Definition: pdu_iterator.h:108
PDUIteratorRange< PDUIterator > iterate_pdus(PDU *pdu)
Definition: pdu_iterator.cpp:80
bool operator!=(const PDUIteratorBase< Concrete > &lhs, const PDUIteratorBase< Concrete > &rhs)
Definition: pdu_iterator.h:121