// $Id$ // // 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. // // 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 PacketData inline non-template implementation */ // Custom includes #include #include #include "PacketImpl.hh" // #include "PacketParser.hh" #define prefix_ inline //-///////////////////////////////////////////////////////////////////////////////////////////////// //-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::PacketData prefix_ senf::detail::PacketImpl & senf::PacketData::impl() const { SENF_ASSERT( impl_, "Internal failure: PacketData (PacketInterpreter) instance not part of any Packet?"); return *impl_; } prefix_ senf::PacketData::iterator senf::PacketData::begin() const { SENF_ASSERT(begin_ <= impl().size(), "Internal failure: PacketInterpreter range outside of data container"); return boost::next(impl().begin(),begin_); } prefix_ senf::PacketData::iterator senf::PacketData::end() const { SENF_ASSERT(end_ <= impl().size(), "Internal failure: PacketInterpreter range outside of data container"); return boost::next(impl().begin(),end_); } prefix_ senf::PacketData::size_type senf::PacketData::size() const { return end_ - begin_; } prefix_ bool senf::PacketData::empty() const { return begin_ == end_; } prefix_ senf::PacketData::byte senf::PacketData::operator[](size_type n) const { SENF_ASSERT( n < size(), "Access out of container range" ); return *( boost::next(begin(),n) ); } prefix_ senf::PacketData::byte & senf::PacketData::operator[](size_type n) { SENF_ASSERT( n < size(), "Access out of container range" ); return *( boost::next(begin(),n) ); } // Modifying the raw packet data prefix_ void senf::PacketData::insert(iterator pos, byte v) { impl().insert(this,pos,v); } prefix_ void senf::PacketData::insert(iterator pos, size_type n, byte v) { impl().insert(this,pos,n,v); } prefix_ void senf::PacketData::erase(iterator pos) { impl().erase(this,pos); } prefix_ void senf::PacketData::erase(iterator first, iterator last) { impl().erase(this,first,last); } prefix_ void senf::PacketData::clear() { impl().clear(this); } prefix_ void senf::PacketData::reserve(size_type n) { impl().reserve(n + size() - impl().size()); } prefix_ senf::PacketData::size_type senf::PacketData::capacity() const { return impl().capacity() - (impl().size() - size()); } prefix_ bool senf::PacketData::valid() { return impl_; } // protected members prefix_ senf::PacketData::PacketData(size_type b, size_type e) : impl_(), begin_(b), end_(e) {} //-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_ // Local Variables: // mode: c++ // fill-column: 100 // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" // compile-command: "scons -u test" // comment-column: 40 // End: