4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
6 // The contents of this file are subject to the Fraunhofer FOKUS Public License
7 // Version 1.0 (the "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at
9 // http://senf.berlios.de/license.html
11 // The Fraunhofer FOKUS Public License Version 1.0 is based on,
12 // but modifies the Mozilla Public License Version 1.1.
13 // See the full license text for the amendments.
15 // Software distributed under the License is distributed on an "AS IS" basis,
16 // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
17 // for the specific language governing rights and limitations under the License.
19 // The Original Code is Fraunhofer FOKUS code.
21 // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V.
22 // (registered association), Hansastraße 27 c, 80686 Munich, Germany.
23 // All Rights Reserved.
26 // Stefan Bund <g0dil@berlios.de>
29 \brief PacketData inline non-template implementation */
32 #include <senf/Utils/senfassert.hh>
34 #include "PacketImpl.hh"
35 // #include "PacketParser.hh"
37 #define prefix_ inline
38 //-/////////////////////////////////////////////////////////////////////////////////////////////////
40 //-/////////////////////////////////////////////////////////////////////////////////////////////////
43 prefix_ senf::detail::PacketImpl & senf::PacketData::impl()
48 "Internal failure: PacketData (PacketInterpreter) instance not part of any Packet?");
52 prefix_ senf::PacketData::iterator senf::PacketData::begin()
55 SENF_ASSERT(begin_ <= impl().size(),
56 "Internal failure: PacketInterpreter range outside of data container");
57 return boost::next(impl().begin(),begin_);
60 prefix_ senf::PacketData::iterator senf::PacketData::end()
63 SENF_ASSERT(end_ <= impl().size(),
64 "Internal failure: PacketInterpreter range outside of data container");
65 return boost::next(impl().begin(),end_);
68 prefix_ senf::PacketData::size_type senf::PacketData::size()
74 prefix_ bool senf::PacketData::empty()
77 return begin_ == end_;
80 prefix_ senf::PacketData::byte senf::PacketData::operator[](size_type n)
83 SENF_ASSERT( n < size(), "Access out of container range" );
84 return *( boost::next(begin(),n) );
87 prefix_ senf::PacketData::byte & senf::PacketData::operator[](size_type n)
89 SENF_ASSERT( n < size(), "Access out of container range" );
90 return *( boost::next(begin(),n) );
93 // Modifying the raw packet data
95 prefix_ void senf::PacketData::insert(iterator pos, byte v)
97 impl().insert(this,pos,v);
100 prefix_ void senf::PacketData::insert(iterator pos, size_type n, byte v)
102 impl().insert(this,pos,n,v);
105 prefix_ void senf::PacketData::erase(iterator pos)
107 impl().erase(this,pos);
110 prefix_ void senf::PacketData::erase(iterator first, iterator last)
112 impl().erase(this,first,last);
115 prefix_ void senf::PacketData::clear()
120 prefix_ void senf::PacketData::reserve(size_type n)
122 impl().reserve(n + size() - impl().size());
125 prefix_ senf::PacketData::size_type senf::PacketData::capacity()
128 return impl().capacity() - (impl().size() - size());
131 prefix_ bool senf::PacketData::valid()
138 prefix_ senf::PacketData::PacketData(size_type b, size_type e)
139 : impl_(), begin_(b), end_(e)
142 //-/////////////////////////////////////////////////////////////////////////////////////////////////
149 // c-file-style: "senf"
150 // indent-tabs-mode: nil
151 // ispell-local-dictionary: "american"
152 // compile-command: "scons -u test"
153 // comment-column: 40