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)
\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.
*/
///@}