X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacketInterpreter.cci;h=b5e84bbab32ca01cbd222984d43ddf731d2afb8e;hb=84f14a42f9993e186c7897ce0db021300e0a2d48;hp=fef80497e0ebfdcd1673fd77d131d0440d7bb745;hpb=26610f603ebdd465307b9621f532c1fe19fd5571;p=senf.git diff --git a/senf/Packets/PacketInterpreter.cci b/senf/Packets/PacketInterpreter.cci index fef8049..b5e84bb 100644 --- a/senf/Packets/PacketInterpreter.cci +++ b/senf/Packets/PacketInterpreter.cci @@ -116,7 +116,15 @@ prefix_ senf::PacketInterpreterBase::PacketInterpreterBase(detail::PacketImpl * : 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 @@ -146,7 +154,7 @@ prefix_ void senf::PacketInterpreterBase::add_ref() 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::release() && !impl_; @@ -156,14 +164,14 @@ prefix_ bool senf::PacketInterpreterBase::release() 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);