30 #ifndef TINS_PDU_ITERATOR_H
31 #define TINS_PDU_ITERATOR_H
43 template <
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());
107 template <
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;
120 template <
typename Concrete>
122 return !(lhs == rhs);
228 template <
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 {
293 PDUIteratorRange<PDUIterator>
iterate_pdus(Packet& packet);
298 PDUIteratorRange<ConstPDUIterator>
iterate_pdus(
const PDU* pdu);
303 PDUIteratorRange<ConstPDUIterator>
iterate_pdus(
const PDU& pdu);
308 PDUIteratorRange<ConstPDUIterator>
iterate_pdus(
const Packet& packet);
Definition: pdu_iterator.h:178
ConstPDUIterator(pointer pdu)
Definition: pdu_iterator.cpp:60
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++(int)
Definition: pdu_iterator.h:67
Concrete & operator--()
Definition: pdu_iterator.h:76
std::bidirectional_iterator_tag iterator_category
Definition: pdu_iterator.h:49
Concrete & operator++()
Definition: pdu_iterator.h:59
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
PDUIterator(pointer pdu)
Definition: pdu_iterator.cpp:37
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