-// Copyright (C) 2007
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
+// $Id$
+//
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
#include <boost/type_traits/alignment_of.hpp>
#include "../Utils/intrusive_refcount.hh"
#include "../Utils/pool_alloc_mixin.hh"
+#include "../Utils/Tags.hh"
#include "PacketData.hh"
#include "../Utils/TypeIdValue.hh"
enum Append_t { Append };
enum Prepend_t { Prepend };
- enum NoInit_t { noinit };
/** \brief Internal: Abstract packet factory
// 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 <class ForwardReadableRange>
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 <class ForwardReadableRange>
ptr createAfter(PacketInterpreterBase::ptr 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, NoInit_t) const = 0;
+ virtual ptr createBefore(PacketInterpreterBase::ptr packet, senf::NoInit_t) const = 0;
// Parse next packet in chain
///@}
+ ///\name Annotations
+ ///@{
+
+ template <class Annotation>
+ 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();
void releaseImpl();
friend class detail::PacketImpl;
- friend class intrusive_refcount_t<PacketInterpreterBase>;
+ friend class intrusive_refcount_base;
template <class PacketType> friend class PacketInterpreter;
friend class detail::packet::test::TestDriver;
friend class PacketParserBase;
// 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 <class ForwardReadableRange>
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 <class ForwardReadableRange>
static ptr createAfter(PacketInterpreterBase::ptr 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, NoInit_t);
+ static ptr createBefore(PacketInterpreterBase::ptr packet, senf::NoInit_t);
// Create a clone of the current packet
// 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
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"){} };
}
///////////////////////////////hh.e////////////////////////////////////////
#endif
-#if !defined(SENF_PACKETS_DECL_ONLY) && !defined(HH_PacketInterpreter_i_)
+#if !defined(HH_Packets__decls_) && !defined(HH_PacketInterpreter_i_)
#define HH_PacketInterpreter_i_
#include "PacketInterpreter.cci"
#include "PacketInterpreter.ct"