X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacketInterpreter.cci;h=b5e84bbab32ca01cbd222984d43ddf731d2afb8e;hb=a0b6f53e5c464c6b84fed30a67fcce32da81012d;hp=c5c75d367b6fc56ef4d73f45a6fb8504b3e729ce;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/Packets/PacketInterpreter.cci b/senf/Packets/PacketInterpreter.cci index c5c75d3..b5e84bb 100644 --- a/senf/Packets/PacketInterpreter.cci +++ b/senf/Packets/PacketInterpreter.cci @@ -24,7 +24,7 @@ \brief PacketInterpreter inline non-template implementation */ // Custom includes -#include "../Utils/senfassert.hh" +#include #include #define prefix_ inline @@ -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);