X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacketImpl.cti;h=563c65c0c1a38c859ecc4eadfc7309709395f3c1;hb=8a6697d11e9a6557d9a5c42b4052666fce32bc10;hp=308e7b392ac538d0998264de9be64781981631b6;hpb=943a6b0973f66bc699c6e7b404da256145e93acf;p=senf.git diff --git a/senf/Packets/PacketImpl.cti b/senf/Packets/PacketImpl.cti index 308e7b3..563c65c 100644 --- a/senf/Packets/PacketImpl.cti +++ b/senf/Packets/PacketImpl.cti @@ -2,23 +2,28 @@ // // 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 template implementation */ @@ -28,55 +33,44 @@ // Custom includes #define prefix_ inline -///////////////////////////////cti.p/////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::detail::AnnotationRegistry template -prefix_ key_t senf::detail::AnnotationRegistry::registerAnnotation() +prefix_ senf::detail::AnnotationRegistry::key_type +senf::detail::AnnotationRegistry::registerAnnotation() { - key_t key (simpleAnnotationCount_ >= SENF_PACKET_ANNOTATION_SLOTS + key_type key (simpleAnnotationCount_ >= SENF_PACKET_ANNOTATION_SLOTS || IsComplexAnnotation::value ? - ++complexAnnotationCount_ : simpleAnnotationCount_ ++); - registry_.insert(key, new Registration()); - std::cerr << ">> allocated key " << key - << " for " << prettyName(typeid(Annotation)) - << "(complex: " << IsComplexAnnotation::value - << ", convertible: " << boost::is_convertible::value - << ", size: " << sizeof(Annotation) - << ", max: " << SENF_PACKET_ANNOTATION_SLOTSIZE << ")" << std::endl; + std::pair reg ( + registry_.insert(key, new Registration())); + SENF_ASSERT(reg.second, "internal error: duplicate annotation key"); + index_.insert(std::make_pair(reg.first->second->v_name(), key)); return key; } template -prefix_ key_t senf::detail::AnnotationRegistry::lookup() +prefix_ senf::detail::AnnotationRegistry::key_type senf::detail::AnnotationRegistry::lookup() { - SENF_ASSERT( instance().keyBegin() <= AnnotationRegistry::Entry::key() - && AnnotationRegistry::Entry::key() < instance().keyEnd(), - "internal error: annotation key not registered" ); - SENF_ASSERT( AnnotationRegistry::Entry::key() < 0 - || ! IsComplexAnnotation::value, - "internal error: complex annotation registered with invalid key" ); - SENF_ASSERT( AnnotationRegistry::Entry::key() < SENF_PACKET_ANNOTATION_SLOTS, - "internal error: annotation key out of valid range" ); + SENF_ASSERT( + -instance().complexAnnotationCount_ <= AnnotationRegistry::Entry::key() + && AnnotationRegistry::Entry::key() < instance().simpleAnnotationCount_, + "internal error: annotation key not registered" ); + SENF_ASSERT( + AnnotationRegistry::Entry::key() < 0 + || ! IsComplexAnnotation::value, + "internal error: complex annotation registered with invalid key" ); + SENF_ASSERT( + AnnotationRegistry::Entry::key() < SENF_PACKET_ANNOTATION_SLOTS, + "internal error: annotation key out of valid range" ); return AnnotationRegistry::Entry::key(); } -prefix_ key_t senf::detail::AnnotationRegistry::keyBegin() - const -{ - return -complexAnnotationCount_; -} - -prefix_ key_t senf::detail::AnnotationRegistry::keyEnd() - const -{ - return simpleAnnotationCount_; -} - -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::detail::PacketImpl // Data container @@ -102,13 +96,13 @@ prefix_ senf::detail::PacketImpl::PacketImpl(InputIterator first, InputIterator template prefix_ Annotation & senf::detail::PacketImpl::annotation() { - AnnotationRegistry::key_t key (AnnotationRegistry::lookup()); + AnnotationRegistry::key_type key (AnnotationRegistry::lookup()); void * antn (key >= 0 ? & simpleAnnotations_[key] : complexAnnotation()); SENF_ASSERT( antn, "internal error: null annotation pointer" ); return * static_cast(antn); } -///////////////////////////////cti.e/////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_