X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacketImpl.hh;h=0ad1e77f847caa6ddc5c7d8585c565af6afaa311;hb=931569b3c9783a06e432471515980d1d02aa0b54;hp=1933949a3a9c06692e6544464c7c08e6db0c2b09;hpb=412024ed31a4ab4eaea7a4165a434f8efebee325;p=senf.git diff --git a/Packets/PacketImpl.hh b/Packets/PacketImpl.hh index 1933949..0ad1e77 100644 --- a/Packets/PacketImpl.hh +++ b/Packets/PacketImpl.hh @@ -82,8 +82,13 @@ namespace detail { struct AnnotationIndexerBase { + virtual ~AnnotationIndexerBase(); + virtual void v_dump(PacketImpl * p, std::ostream & os) = 0; + static unsigned maxAnnotations; static std::vector & small(); + static std::vector & registry(); + static void dump(PacketImpl * p, std::ostream & os); }; template @@ -92,11 +97,13 @@ namespace detail { public AnnotationIndexerBase { AnnotationIndexer(); + virtual void v_dump(PacketImpl * p, std::ostream & os); unsigned index_; static unsigned index(); static bool const Complex = boost::is_base_of::value; static bool const Small = (sizeof(Annotation) <= sizeof(AnnotationEntry) && ! Complex); +# if 0 // The test is difficult since it does not work with user-defined trivial constructors # ifdef BOOST_HAS_TYPE_TRAITS_INTRINSICS BOOST_STATIC_ASSERT(( (boost::has_trivial_constructor::value @@ -104,18 +111,21 @@ namespace detail { || Complex )); # endif +# endif }; template ::Small> struct GetAnnotation { static Annotation & get(AnnotationEntry & e); + static void dump(AnnotationEntry & e, std::ostream & os); }; template struct GetAnnotation { static Annotation & get(AnnotationEntry & e); + static void dump(AnnotationEntry & e, std::ostream & os); }; /** \brief Internal: Packet data storage @@ -183,9 +193,15 @@ namespace detail { void erase(PacketData * self, iterator first, iterator last); void clear(PacketData * self); + void reserve(size_type n); + size_type capacity() const; + // Annotations template Annotation & annotation(); + void dumpAnnotations(std::ostream & os); + template + void dumpAnnotation(std::ostream & os); /** \brief Internal: Keep PacketImpl instance alive