X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacketInterpreter.hh;h=790c600cd24c980f18db3138a686a25f2ab23621;hb=a4ebeef29f8eb69dc2dad10668d762540002b924;hp=707e4b4db1f7987a710f526958aee8a0fce7ac7a;hpb=f73fa16ed5abdce272ac77f8b8b9ef2b9922c266;p=senf.git diff --git a/Packets/PacketInterpreter.hh b/Packets/PacketInterpreter.hh index 707e4b4..790c600 100644 --- a/Packets/PacketInterpreter.hh +++ b/Packets/PacketInterpreter.hh @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -34,6 +34,7 @@ #include #include "../Utils/intrusive_refcount.hh" #include "../Utils/pool_alloc_mixin.hh" +#include "../Utils/Tags.hh" #include "PacketData.hh" #include "../Utils/TypeIdValue.hh" @@ -75,7 +76,6 @@ namespace senf { enum Append_t { Append }; enum Prepend_t { Prepend }; - enum NoInit_t { noinit }; /** \brief Internal: Abstract packet factory @@ -91,19 +91,19 @@ namespace senf { // Create completely new packet virtual ptr create() const = 0; - virtual ptr create(NoInit_t) const = 0; + virtual ptr create(senf::NoInit_t) const = 0; virtual ptr create(size_type size) const = 0; - virtual ptr create(size_type size, NoInit_t) const = 0; + virtual ptr create(size_type size, senf::NoInit_t) const = 0; template ptr create(ForwardReadableRange const & range) const; // Create packet as new packet after a given packet virtual ptr createAfter(PacketInterpreterBase::ptr packet) const = 0; - virtual ptr createAfter(PacketInterpreterBase::ptr packet, NoInit_t) 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, - NoInit_t) const = 0; + senf::NoInit_t) const = 0; template ptr createAfter(PacketInterpreterBase::ptr packet, ForwardReadableRange const & range) const; @@ -111,7 +111,7 @@ namespace senf { // 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, NoInit_t) const = 0; + virtual ptr createBefore(PacketInterpreterBase::ptr packet, senf::NoInit_t) const = 0; // Parse next packet in chain @@ -162,11 +162,20 @@ namespace senf { ///@} + ///\name Annotations + ///@{ + + template + Annotation & annotation(); + + ///@} + ///\name Access to the abstract interface ///@{ optional_range nextPacketRange(); - void finalize(); + void finalizeThis(); + void finalizeTo(ptr other); void dump(std::ostream & os); TypeIdValue typeId(); factory_t factory(); @@ -211,7 +220,7 @@ namespace senf { void releaseImpl(); friend class detail::PacketImpl; - friend class intrusive_refcount_t; + friend class intrusive_refcount_base; template friend class PacketInterpreter; friend class detail::packet::test::TestDriver; friend class PacketParserBase; @@ -256,18 +265,18 @@ namespace senf { // Create completely new packet static ptr create(); - static ptr create(NoInit_t); + static ptr create(senf::NoInit_t); static ptr create(size_type size); - static ptr create(size_type size, NoInit_t); + static ptr create(size_type size, senf::NoInit_t); template static ptr create(ForwardReadableRange const & range); // Create packet as new packet after a given packet static ptr createAfter(PacketInterpreterBase::ptr packet); - static ptr createAfter(PacketInterpreterBase::ptr packet, NoInit_t); + 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, NoInit_t); + static ptr createAfter(PacketInterpreterBase::ptr packet, size_type size, senf::NoInit_t); template static ptr createAfter(PacketInterpreterBase::ptr packet, ForwardReadableRange const & range); @@ -275,7 +284,7 @@ namespace senf { // Create packet as new packet (header) before a given packet static ptr createBefore(PacketInterpreterBase::ptr packet); - static ptr createBefore(PacketInterpreterBase::ptr packet, NoInit_t); + static ptr createBefore(PacketInterpreterBase::ptr packet, senf::NoInit_t); // Create a clone of the current packet @@ -333,27 +342,27 @@ namespace senf { // Create completely new packet virtual PacketInterpreterBase::ptr create() const; - virtual PacketInterpreterBase::ptr create(NoInit_t) const; + virtual PacketInterpreterBase::ptr create(senf::NoInit_t) const; virtual PacketInterpreterBase::ptr create(size_type size) const; - virtual PacketInterpreterBase::ptr create(size_type size,NoInit_t) const; + virtual PacketInterpreterBase::ptr create(size_type size,senf::NoInit_t) const; // Create packet as new packet after a given packet virtual PacketInterpreterBase::ptr createAfter(PacketInterpreterBase::ptr packet) const; virtual PacketInterpreterBase::ptr createAfter(PacketInterpreterBase::ptr packet, - NoInit_t) const; + senf::NoInit_t) const; virtual PacketInterpreterBase::ptr createAfter(PacketInterpreterBase::ptr packet, size_type size) const; virtual PacketInterpreterBase::ptr createAfter(PacketInterpreterBase::ptr packet, - size_type size, NoInit_t) const; + size_type size, senf::NoInit_t) const; // Create packet as new packet (header) before a given packet virtual PacketInterpreterBase::ptr createBefore(PacketInterpreterBase::ptr packet) const; virtual PacketInterpreterBase::ptr createBefore(PacketInterpreterBase::ptr packet, - NoInit_t) + senf::NoInit_t) const; // Parse next packet in chain @@ -379,8 +388,8 @@ namespace senf { This exception signals an invalid operation on the chain like trying to find a non-existent chain member and other similar error conditions. */ - struct InvalidPacketChainException : public std::exception - { virtual char const * what() const throw() { return "invalid packet chain"; } }; + struct InvalidPacketChainException : public senf::Exception + { InvalidPacketChainException() : senf::Exception("invalid packet chain"){} }; }