X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacketImpl.cci;h=5e2a672d1698c3d2f961c83651185b12690bd80a;hb=ddb2132be4265f8a0d7d4c954c7c9401e59d027c;hp=63c330c0a977d72248395f5f3f2c58be278c2891;hpb=20c3dbf64b3beed10655dceaee5791680fb25383;p=senf.git diff --git a/senf/Packets/PacketImpl.cci b/senf/Packets/PacketImpl.cci index 63c330c..5e2a672 100644 --- a/senf/Packets/PacketImpl.cci +++ b/senf/Packets/PacketImpl.cci @@ -2,49 +2,40 @@ // // Copyright (C) 2007 // Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY -// Stefan Bund // -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. +// The contents of this file are subject to the Fraunhofer FOKUS Public License +// Version 1.0 (the "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// http://senf.berlios.de/license.html // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// The Fraunhofer FOKUS Public License Version 1.0 is based on, +// but modifies the Mozilla Public License Version 1.1. +// See the full license text for the amendments. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the License. +// +// The Original Code is Fraunhofer FOKUS code. +// +// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. +// (registered association), Hansastraße 27 c, 80686 Munich, Germany. +// All Rights Reserved. +// +// Contributor(s): +// Stefan Bund /** \file \brief PacketImpl inline non-template implementation */ // Custom includes -#include -// #include "PacketInterpreter.hh" #define prefix_ inline -///////////////////////////////cci.p/////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // 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_ std::string senf::detail::AnnotationRegistry::name(key_type key) const { @@ -84,7 +75,7 @@ prefix_ senf::detail::AnnotationRegistry::AnnotationRegistry() : simpleAnnotationCount_ (0), complexAnnotationCount_ (0) {} -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // Memory management: // @@ -109,7 +100,7 @@ prefix_ senf::detail::AnnotationRegistry::AnnotationRegistry() // The last three also modify the impl_ member accordingly by calling // PacketInterpreterBase::assign/release -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::detail::PacketImpl prefix_ senf::detail::PacketImpl::PacketImpl() @@ -126,9 +117,9 @@ prefix_ senf::detail::PacketImpl::PacketImpl(size_type size, byte initValue) // reference/memory management -prefix_ void senf::detail::PacketImpl::add_ref(refcount_t n) +prefix_ void senf::detail::PacketImpl::add_ref() { - refcount_ += n; + ++ refcount_; } prefix_ senf::detail::PacketImpl::refcount_t senf::detail::PacketImpl::refcount() @@ -231,21 +222,6 @@ prefix_ senf::detail::PacketImpl::size_type senf::detail::PacketImpl::capacity() return data_.capacity(); } -// 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, "Internal failure: Releasing dead PacketImpl ??"); - // 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 decrement refcount_ when *not* calling delete - if (refcount_ == n) - delete this; - else - refcount_ -= n; -} - // Annotations prefix_ void * senf::detail::PacketImpl::annotation(AnnotationRegistry::key_type key) @@ -253,7 +229,7 @@ prefix_ void * senf::detail::PacketImpl::annotation(AnnotationRegistry::key_type return key >= 0 ? & simpleAnnotations_[key] : complexAnnotation(key); } -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::detail::PacketImpl::Guard prefix_ senf::detail::PacketImpl::Guard::Guard(PacketImpl * impl) @@ -267,7 +243,7 @@ prefix_ senf::detail::PacketImpl::Guard::~Guard() p->release(); } -///////////////////////////////cci.e/////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_