X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacketInterpreter.hh;h=d7fb09b8ceae60f1e80558f59c4697c7cbe21183;hb=74febc7a9abc84c4939269b3443d15fc27f4e960;hp=deae9d32c7524cc89dccb4072d52ed4812e6e61d;hpb=f08685d9795a3be20ce5c7a337087358ccd77eb5;p=senf.git diff --git a/senf/Packets/PacketInterpreter.hh b/senf/Packets/PacketInterpreter.hh index deae9d3..d7fb09b 100644 --- a/senf/Packets/PacketInterpreter.hh +++ b/senf/Packets/PacketInterpreter.hh @@ -47,7 +47,11 @@ namespace senf { template class PacketInterpreter; + + void intrusive_ptr_add_ref(PacketInterpreterBase const * p); + void intrusive_ptr_release(PacketInterpreterBase const * p); + /** \brief Internal: Base packet interpreter class \internal @@ -74,7 +78,7 @@ namespace senf { typedef senf::detail::packet::byte byte; typedef boost::iterator_range range; - typedef boost::optional< boost::iterator_range > optional_range; + typedef boost::optional optional_range; typedef optional_range no_range; enum Append_t { Append }; @@ -102,26 +106,26 @@ namespace senf { // 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 - 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) const = 0; + virtual ptr parseNext(ptr const & packet, PacketInterpreterBase::optional_range const & range) const = 0; }; typedef Factory const * factory_t; @@ -136,7 +140,7 @@ namespace senf { virtual ~PacketInterpreterBase(); - static factory_t no_factory(); + static factory_t no_factory(); ptr clone(); @@ -152,8 +156,7 @@ namespace senf { ptr last(); template typename PacketInterpreter::ptr parseNextAs(); - ptr parseNextAs(factory_t factory); - template bool is(); + ptr parseNextAs(factory_t factory, PacketInterpreterBase::optional_range const & range); template typename PacketInterpreter::ptr as(); ptr append(ptr packet); @@ -233,16 +236,13 @@ namespace senf { friend class detail::PacketImpl; friend class intrusive_refcount_base; template 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 @@ -288,21 +288,21 @@ namespace senf { // 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 - 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 @@ -328,12 +328,12 @@ namespace senf { 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 @@ -371,40 +371,40 @@ namespace senf { // 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) + 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