// $Id$ // // Copyright (C) 2009 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Thorsten Horstmann // // 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. // // 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. // // 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. /** \file \brief GenericTLV non-inline template implementation */ //#include "GenericTLV.ih" // Custom includes #define prefix_ ///////////////////////////////ct.p//////////////////////////////////////// template template prefix_ Parser senf::GenericTLVParserBase::init() { senf::PacketParserBase::size_type oldSize (bytes() ); senf::PacketParserBase::size_type newParserSize ( senf::init_bytes::value ); this->resize( oldSize, newParserSize); std::fill(this->i(), boost::next(this->i(), newParserSize), 0u); Parser concreteParser = Parser(this->i(), this->state() ); concreteParser.init(); // concreteParser.length() = newParserSize - senf::init_bytes::value; return concreteParser; } template prefix_ senf::PacketInterpreterBase::range senf::GenericTLVParserBase::value() const { senf::PacketData::iterator begin ( boost::next(this->i(), senf::bytes( self())) ); return PacketInterpreterBase::range(begin, boost::next( begin, this->length()) ); } template template prefix_ void senf::GenericTLVParserBase::value_(ForwardReadableRange const &range) { //typename boost::range_difference::type rangeSize ( boost::size(range)); unsigned rangeSize ( boost::size(range)); if ( rangeSize != this->length() ) resize( bytes(), rangeSize + senf::bytes(self()) ); std::copy( boost::begin(range), boost::end(range), boost::next( this->i(), senf::bytes( self())) ); this->length_() = rangeSize; } ///////////////////////////////ct.e//////////////////////////////////////// #undef prefix_ // Local Variables: // mode: c++ // fill-column: 100 // comment-column: 40 // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" // compile-command: "scons -u test" // End: