Packets/DefaultBundle: moved MPLSPacket to NetEmu/Carmen project
[senf.git] / Packets / PacketImpl.cci
index 1e0cad0..3c6cce0 100644 (file)
 ///////////////////////////////////////////////////////////////////////////
 // senf::detail::AnnotationIndexerBase
 
+prefix_ senf::detail::AnnotationIndexerBase::~AnnotationIndexerBase()
+{}
+
 prefix_ std::vector<bool> & senf::detail::AnnotationIndexerBase::small()
 {
     static std::vector<bool> smalls;
     return smalls;
 }
 
+prefix_ std::vector<senf::detail::AnnotationIndexerBase*> &
+senf::detail::AnnotationIndexerBase::registry()
+{
+    static std::vector<AnnotationIndexerBase*> reg;
+    return reg;
+}
+
 ///////////////////////////////////////////////////////////////////////////
 // senf::detail::AnnotationP
 
@@ -175,6 +185,38 @@ prefix_ void senf::detail::PacketImpl::erase(PacketData * self, iterator first,
     updateIterators(self,ix,-delta);
 }
 
+prefix_ void senf::detail::PacketImpl::reserve(size_type n)
+{
+    data_.reserve(n);
+}
+
+prefix_ senf::detail::PacketImpl::size_type senf::detail::PacketImpl::capacity()
+    const
+{
+    return data_.capacity();
+}
+
+prefix_ void senf::detail::PacketImpl::dumpAnnotations(std::ostream & os)
+{
+    AnnotationIndexerBase::dump(this, os);
+}
+
+// This function has a problem being inlined. Somehow, often when calling this, the size of the 
+// resulting inlined code would be huge?
+
+prefix_ void senf::detail::PacketImpl::release(refcount_t n)
+{
+    SENF_ASSERT(refcount_ >= n);
+    // uah ... we need to be extremely careful here. If refcount_ is n, we want to commit suicide,
+    // however the destructor will remove all PacketInterpreters from the list and will thereby
+    // decrement refcount -> only decrenebt refcount_ when *not* caling delete
+    if (refcount_ == n)
+        delete this;
+    else
+        refcount_ -= n;
+}
+
+
 ///////////////////////////////////////////////////////////////////////////
 // senf::detail::PacketImpl::Guard