switch to new MPL based Fraunhofer FOKUS Public License
[senf.git] / senf / Packets / PacketData.cci
1 // $Id$
2 //
3 // Copyright (C) 2007
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 //
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
10 //
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.
14 //
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.
18 //
19 // The Original Code is Fraunhofer FOKUS code.
20 //
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.
24 //
25 // Contributor(s):
26 //   Stefan Bund <g0dil@berlios.de>
27
28 /** \file
29     \brief PacketData inline non-template implementation */
30
31 // Custom includes
32 #include <senf/Utils/senfassert.hh>
33 #include <iterator>
34 #include "PacketImpl.hh"
35 // #include "PacketParser.hh"
36
37 #define prefix_ inline
38 //-/////////////////////////////////////////////////////////////////////////////////////////////////
39
40 //-/////////////////////////////////////////////////////////////////////////////////////////////////
41 // senf::PacketData
42
43 prefix_ senf::detail::PacketImpl & senf::PacketData::impl()
44     const
45 {
46     SENF_ASSERT(
47         impl_,
48         "Internal failure: PacketData (PacketInterpreter) instance not part of any Packet?");
49     return *impl_;
50 }
51
52 prefix_ senf::PacketData::iterator senf::PacketData::begin()
53     const
54 {
55     SENF_ASSERT(begin_ <= impl().size(),
56                 "Internal failure: PacketInterpreter range outside of data container");
57     return boost::next(impl().begin(),begin_);
58 }
59
60 prefix_ senf::PacketData::iterator senf::PacketData::end()
61     const
62 {
63     SENF_ASSERT(end_ <= impl().size(),
64                 "Internal failure: PacketInterpreter range outside of data container");
65     return boost::next(impl().begin(),end_);
66 }
67
68 prefix_ senf::PacketData::size_type senf::PacketData::size()
69     const
70 {
71     return end_ - begin_;
72 }
73
74 prefix_ bool senf::PacketData::empty()
75     const
76 {
77     return begin_ == end_;
78 }
79
80 prefix_ senf::PacketData::byte senf::PacketData::operator[](size_type n)
81     const
82 {
83     SENF_ASSERT( n < size(), "Access out of container range" );
84     return *( boost::next(begin(),n) );
85 }
86
87 prefix_ senf::PacketData::byte & senf::PacketData::operator[](size_type n)
88 {
89     SENF_ASSERT( n < size(), "Access out of container range" );
90     return *( boost::next(begin(),n) );
91 }
92
93 // Modifying the raw packet data
94
95 prefix_ void senf::PacketData::insert(iterator pos, byte v)
96 {
97     impl().insert(this,pos,v);
98 }
99
100 prefix_ void senf::PacketData::insert(iterator pos, size_type n, byte v)
101 {
102     impl().insert(this,pos,n,v);
103 }
104
105 prefix_ void senf::PacketData::erase(iterator pos)
106 {
107     impl().erase(this,pos);
108 }
109
110 prefix_ void senf::PacketData::erase(iterator first, iterator last)
111 {
112     impl().erase(this,first,last);
113 }
114
115 prefix_ void senf::PacketData::clear()
116 {
117     impl().clear(this);
118 }
119
120 prefix_ void senf::PacketData::reserve(size_type n)
121 {
122     impl().reserve(n + size() - impl().size());
123 }
124
125 prefix_ senf::PacketData::size_type senf::PacketData::capacity()
126     const
127 {
128     return impl().capacity() - (impl().size() - size());
129 }
130
131 prefix_ bool senf::PacketData::valid()
132 {
133     return impl_;
134 }
135
136 // protected members
137
138 prefix_ senf::PacketData::PacketData(size_type b, size_type e)
139     : impl_(), begin_(b), end_(e)
140 {}
141
142 //-/////////////////////////////////////////////////////////////////////////////////////////////////
143 #undef prefix_
144
145 \f
146 // Local Variables:
147 // mode: c++
148 // fill-column: 100
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
154 // End: