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
ConstPDUIterator(pointer pdu)
Definition pdu_iterator.cpp:60
const PDU * pointer
Definition pdu_iterator.h:183
const PDU & reference
Definition pdu_iterator.h:188
value_type operator*() const
Definition pdu_iterator.cpp:74
pointer operator->() const
Definition pdu_iterator.cpp:70
Definition pdu_iterator.h:44
Concrete operator--(int)
Definition pdu_iterator.h:84
Concrete & operator++()
Definition pdu_iterator.h:59
Concrete operator++(int)
Definition pdu_iterator.h:67
std::bidirectional_iterator_tag iterator_category
Definition pdu_iterator.h:49
std::ptrdiff_t difference_type
Definition pdu_iterator.h:54
Concrete & operator--()
Definition pdu_iterator.h:76
Definition pdu_iterator.h:229
PDUIteratorRange(Iterator start, Iterator end)
Definition pdu_iterator.h:237
Definition pdu_iterator.h:128
PDU & operator*()
Definition pdu_iterator.cpp:50
PDU * pointer
Definition pdu_iterator.h:133
PDU & value_type
Definition pdu_iterator.h:143
PDUIterator(pointer pdu)
Definition pdu_iterator.cpp:37
PDU & reference
Definition pdu_iterator.h:138
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