\brief PacketInterpreter inline non-template implementation */
// Custom includes
-#include "../Utils/senfassert.hh"
+#include <senf/Utils/senfassert.hh>
#include <boost/utility.hpp>
#define prefix_ inline
: PacketData(std::distance(impl->begin(),b),
std::distance(impl->begin(),e))
{
- impl->prependInterpreter(this);
+ impl->prependInterpreter(this);
+}
+
+prefix_ senf::PacketInterpreterBase::PacketInterpreterBase(detail::PacketImpl * impl,
+ iterator b, iterator e, ptr before)
+ : PacketData(std::distance(impl->begin(),b),
+ std::distance(impl->begin(),e))
+{
+ impl->prependInterpreter(this, before.get());
}
prefix_ senf::PacketInterpreterBase::ptr
prefix_ bool senf::PacketInterpreterBase::release()
{
- if (impl_)
+ if (impl_)
// This call will set impl_ to 0 if we just removed the last reference ...
impl_->release();
return intrusive_refcount_t<PacketInterpreterBase>::release() && !impl_;
prefix_ void senf::PacketInterpreterBase::assignImpl(detail::PacketImpl * impl)
{
- SENF_ASSERT(!impl_);
+ SENF_ASSERT(!impl_, "Internal failure: PacketInterpreter added to two Packets");
impl_ = impl;
impl_->add_ref(refcount());
}
prefix_ void senf::PacketInterpreterBase::releaseImpl()
{
- SENF_ASSERT(impl_);
+ SENF_ASSERT(impl_, "Internal failure: release of lone PacketInterpreter");
refcount_t refc (refcount());
if (refc) {
impl_->release(refc);