namespace senf {
template <class PacketType> class PacketInterpreter;
+
+ void intrusive_ptr_add_ref(PacketInterpreterBase const * p);
+ void intrusive_ptr_release(PacketInterpreterBase const * p);
+
/** \brief Internal: Base packet interpreter class
\internal
// Create packet as new packet after a given packet
- virtual ptr createAfter(PacketInterpreterBase::ptr packet) const = 0;
- virtual ptr createAfter(PacketInterpreterBase::ptr packet, senf::NoInit_t) const = 0;
- virtual ptr createAfter(PacketInterpreterBase::ptr packet, size_type size) const = 0;
- virtual ptr createAfter(PacketInterpreterBase::ptr packet, size_type size,
+ virtual ptr createAfter(PacketInterpreterBase::ptr const & packet) const = 0;
+ virtual ptr createAfter(PacketInterpreterBase::ptr const & packet, senf::NoInit_t) const = 0;
+ virtual ptr createAfter(PacketInterpreterBase::ptr const & packet, size_type size) const = 0;
+ virtual ptr createAfter(PacketInterpreterBase::ptr const & packet, size_type size,
senf::NoInit_t) const = 0;
template <class ForwardReadableRange>
- ptr createAfter(PacketInterpreterBase::ptr packet,
+ ptr createAfter(PacketInterpreterBase::ptr const & packet,
ForwardReadableRange const & range) const;
// Create packet as new packet (header) const before a given packet
- virtual ptr createBefore(PacketInterpreterBase::ptr packet) const = 0;
- virtual ptr createBefore(PacketInterpreterBase::ptr packet, senf::NoInit_t) const = 0;
+ virtual ptr createBefore(PacketInterpreterBase::ptr const & packet) const = 0;
+ virtual ptr createBefore(PacketInterpreterBase::ptr const & packet, senf::NoInit_t) const = 0;
- virtual ptr createInsertBefore(PacketInterpreterBase::ptr packet) const = 0;
- virtual ptr createInsertBefore(PacketInterpreterBase::ptr packet, senf::NoInit_t) const = 0;
+ virtual ptr createInsertBefore(PacketInterpreterBase::ptr const & packet) const = 0;
+ virtual ptr createInsertBefore(PacketInterpreterBase::ptr const & packet, senf::NoInit_t) const = 0;
// Parse next packet in chain
- virtual ptr parseNext(ptr packet, PacketInterpreterBase::optional_range const & range) const = 0;
+ virtual ptr parseNext(ptr const & packet, PacketInterpreterBase::optional_range const & range) const = 0;
};
typedef Factory const * factory_t;
virtual ~PacketInterpreterBase();
- static factory_t no_factory();
+ static factory_t no_factory();
ptr clone();
template <class Type> typename PacketInterpreter<Type>::ptr parseNextAs();
ptr parseNextAs(factory_t factory, PacketInterpreterBase::optional_range const & range);
- template <class Type> bool is();
template <class Type> typename PacketInterpreter<Type>::ptr as();
ptr append(ptr packet);
friend class detail::PacketImpl;
friend class intrusive_refcount_base;
template <class PacketType> friend class PacketInterpreter;
- friend class detail::packet::test::TestDriver;
+ friend struct detail::packet::test::TestDriver;
friend class PacketParserBase;
friend void senf::intrusive_ptr_add_ref(PacketInterpreterBase const *);
friend void senf::intrusive_ptr_release(PacketInterpreterBase const *);
};
- void intrusive_ptr_add_ref(PacketInterpreterBase const * p);
- void intrusive_ptr_release(PacketInterpreterBase const * p);
-
/** \brief Internal: Concrete packet interpreter
\internal
// Create packet as new packet after a given packet
- static ptr createAfter(PacketInterpreterBase::ptr packet);
- static ptr createAfter(PacketInterpreterBase::ptr packet, senf::NoInit_t);
- static ptr createAfter(PacketInterpreterBase::ptr packet, size_type size);
- static ptr createAfter(PacketInterpreterBase::ptr packet, size_type size, senf::NoInit_t);
+ static ptr createAfter(PacketInterpreterBase::ptr const & packet);
+ static ptr createAfter(PacketInterpreterBase::ptr const & packet, senf::NoInit_t);
+ static ptr createAfter(PacketInterpreterBase::ptr const & packet, size_type size);
+ static ptr createAfter(PacketInterpreterBase::ptr const & packet, size_type size, senf::NoInit_t);
template <class ForwardReadableRange>
- static ptr createAfter(PacketInterpreterBase::ptr packet,
+ static ptr createAfter(PacketInterpreterBase::ptr const & packet,
ForwardReadableRange const & range);
// Create packet as new packet (header) before a given packet
- static ptr createBefore(PacketInterpreterBase::ptr packet);
- static ptr createBefore(PacketInterpreterBase::ptr packet, senf::NoInit_t);
+ static ptr createBefore(PacketInterpreterBase::ptr const & spacket);
+ static ptr createBefore(PacketInterpreterBase::ptr const & packet, senf::NoInit_t);
- static ptr createInsertBefore(PacketInterpreterBase::ptr packet);
- static ptr createInsertBefore(PacketInterpreterBase::ptr packet, senf::NoInit_t);
+ static ptr createInsertBefore(PacketInterpreterBase::ptr const & packet);
+ static ptr createInsertBefore(PacketInterpreterBase::ptr const & packet, senf::NoInit_t);
// Create a clone of the current packet
PacketInterpreter(detail::PacketImpl * impl, iterator b, iterator e, Append_t);
PacketInterpreter(detail::PacketImpl * impl, iterator b, iterator e, Prepend_t);
PacketInterpreter(detail::PacketImpl * impl, iterator b, iterator e,
- PacketInterpreterBase::ptr before);
+ PacketInterpreterBase::ptr const & before);
static ptr create(detail::PacketImpl * impl, iterator b, iterator e, Append_t);
static ptr create(detail::PacketImpl * impl, iterator b, iterator e, Prepend_t);
static ptr create(detail::PacketImpl * impl, iterator b, iterator e,
- PacketInterpreterBase::ptr before);
+ PacketInterpreterBase::ptr const & before);
// PacketType access
// Create packet as new packet after a given packet
- virtual PacketInterpreterBase::ptr createAfter(PacketInterpreterBase::ptr packet)
+ virtual PacketInterpreterBase::ptr createAfter(PacketInterpreterBase::ptr const & packet)
const;
- virtual PacketInterpreterBase::ptr createAfter(PacketInterpreterBase::ptr packet,
+ virtual PacketInterpreterBase::ptr createAfter(PacketInterpreterBase::ptr const & packet,
senf::NoInit_t) const;
- virtual PacketInterpreterBase::ptr createAfter(PacketInterpreterBase::ptr packet,
+ virtual PacketInterpreterBase::ptr createAfter(PacketInterpreterBase::ptr const & packet,
size_type size) const;
- virtual PacketInterpreterBase::ptr createAfter(PacketInterpreterBase::ptr packet,
+ virtual PacketInterpreterBase::ptr createAfter(PacketInterpreterBase::ptr const & packet,
size_type size, senf::NoInit_t) const;
// Create packet as new packet (header) before a given packet
- virtual PacketInterpreterBase::ptr createBefore(PacketInterpreterBase::ptr packet)
+ virtual PacketInterpreterBase::ptr createBefore(PacketInterpreterBase::ptr const & packet)
const;
- virtual PacketInterpreterBase::ptr createBefore(PacketInterpreterBase::ptr packet,
+ virtual PacketInterpreterBase::ptr createBefore(PacketInterpreterBase::ptr const & packet,
senf::NoInit_t)
const;
- virtual PacketInterpreterBase::ptr createInsertBefore(PacketInterpreterBase::ptr packet)
+ virtual PacketInterpreterBase::ptr createInsertBefore(PacketInterpreterBase::ptr const & packet)
const;
- virtual PacketInterpreterBase::ptr createInsertBefore(PacketInterpreterBase::ptr packet,
+ virtual PacketInterpreterBase::ptr createInsertBefore(PacketInterpreterBase::ptr const & packet,
senf::NoInit_t)
const;
// Parse next packet in chain
- virtual PacketInterpreterBase::ptr parseNext(PacketInterpreterBase::ptr packet, PacketInterpreterBase::optional_range const & range)
+ virtual PacketInterpreterBase::ptr parseNext(PacketInterpreterBase::ptr const & packet, PacketInterpreterBase::optional_range const & range)
const;
};
static const FactoryImpl factory_;
- friend class detail::packet::test::TestDriver;
+ friend struct detail::packet::test::TestDriver;
friend class PacketInterpreterBase;
- friend class FactoryImpl;
+ friend struct FactoryImpl;
};
/** \brief Invalid packet chain operation