/** \file
\brief Packet public header */
-#ifndef HH_Packet_
-#define HH_Packet_ 1
+#ifndef HH_SENF_Packets_Packet_
+#define HH_SENF_Packets_Packet_ 1
// Custom includes
#include <boost/operators.hpp>
If an annotation is \e not a POD type (more
specifically, if it's constructor or destructor is not
- trivial), the \a Annotation type \e must inherit from
+ trivial including base classes and members), the \a
+ Annotation type \e must inherit from
senf::ComplexAnnotation. Failing to follow this rule
will result in undefined behavior and will probably
lead to a program crash.
std::string value;
};
\endcode
+ (This type is not POD since \c std::string is not POD)
+
+ \see \ref packet_usage_annotation
\implementation The annotation system is implemented
quite efficiently since annotations are stored
used). Additionally, non-complex small annotations
require no additional memory management (\c new /
\c delete).
+
+ \idea Pool the annotation vectors: In the destructor
+ swap the vector into a vector graveyard (swapping
+ two vectors is an O(1) no allocation operation). In
+ the constructor, if there is a vector in the
+ graveyard, swap it in from there. Of course, it
+ would be better to do away with the vector and just
+ allocate the space together with the packet but
+ that looks quite complicated to do ... especially
+ considering that the packetimpl itself uses a pool.
*/
///@}
///////////////////////////////hh.e////////////////////////////////////////
#endif
-#if !defined(HH_Packets__decls_) && !defined(HH_Packet_i_)
-#define HH_Packet_i_
+#if !defined(HH_SENF_Packets_Packets__decls_) && !defined(HH_SENF_Packets_Packet_i_)
+#define HH_SENF_Packets_Packet_i_
#include "Packet.cci"
#include "Packet.ct"
#include "Packet.cti"