//#include "PacketImpl.mpp"
#define prefix_
-///////////////////////////////cc.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::detail::PacketImpl
prefix_ senf::detail::PacketImpl::~PacketImpl()
eraseInterpreters(interpreters_.begin(), interpreters_.end());
}
+prefix_ void senf::detail::PacketImpl::release()
+{
+ SENF_ASSERT(refcount_ >= 1, "Internal failure: Releasing dead PacketImpl ??");
+ // uah ... we need to be extremely careful here. If refcount_ is 1, we want to commit suicide,
+ // however the destructor will remove all PacketInterpreters from the list and will thereby
+ // decrement refcount -> only decrement refcount_ when *not* calling delete (otherwise
+ // the assert above will fail)
+ if (refcount_ == 1)
+ delete this;
+ else
+ -- refcount_;
+}
+
// interpreter chain
prefix_ void senf::detail::PacketImpl::appendInterpreter(PacketInterpreterBase * p)
}
}
+prefix_ void senf::detail::PacketImpl::clearAnnotations()
+{
+ ::memset(simpleAnnotations_, 0, sizeof(simpleAnnotations_));
+ complexAnnotations_.clear();
+}
+
+prefix_ void senf::detail::PacketImpl::assignAnnotations(PacketImpl const & other)
+{
+ std::copy(&other.simpleAnnotations_[0], &other.simpleAnnotations_[0] +
+ sizeof(simpleAnnotations_)/sizeof(simpleAnnotations_[0]), simpleAnnotations_);
+ complexAnnotations_.assign(
+ other.complexAnnotations_.begin(), other.complexAnnotations_.end());
+}
+
prefix_ void * senf::detail::PacketImpl::complexAnnotation(AnnotationRegistry::key_type key)
{
SENF_ASSERT( key < 0, "complexAnnotation called with invalid key");
? 0 : complexAnnotations_[-key-1].get();
}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::detail::AnnotationRegistry
+prefix_ void senf::detail::AnnotationRegistry::dump(key_type key, std::ostream & os,
+ void * annotation)
+ const
+{
+ Registry::const_iterator i (registry_.find(key));
+ if (i != registry_.end()) {
+ os << fieldName(i->second->v_name());
+ i->second->v_dump(os, annotation);
+ os << "\n";
+ }
+}
+
prefix_ void senf::detail::AnnotationRegistry::dumpRegistrations(std::ostream & os)
{
boost::format fmt ("%-56.56s %-4.4s %-7.7s %5d\n");
senf::detail::AnnotationRegistry::instance().dumpRegistrations(os);
}
-/////////////////////////////cc.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
#undef prefix_
//#include "PacketImpl.mpp"