00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00026 #ifndef HH_SENF_Packets_PacketData_
00027 #define HH_SENF_Packets_PacketData_ 1
00028
00029
00030 #include <boost/utility.hpp>
00031 #include <boost/type_traits.hpp>
00032 #include <senf/Utils/Exception.hh>
00033
00034
00035
00036
00037 namespace senf {
00038
00067 class PacketData
00068 : boost::noncopyable
00069 {
00070 public:
00071
00072
00073
00074 typedef senf::detail::packet::iterator iterator;
00075 typedef senf::detail::packet::const_iterator const_iterator;
00076 typedef senf::detail::packet::size_type size_type;
00077 typedef senf::detail::packet::difference_type difference_type;
00078 typedef senf::detail::packet::byte byte;
00079 typedef byte value_type;
00080 typedef byte & reference;
00081 typedef byte const & const_reference;
00082 typedef byte * pointer;
00083 typedef byte const * const_pointer;
00084
00085
00087
00088
00089
00090
00091
00092
00093
00094
00096
00097
00098 iterator begin() const;
00099
00101 iterator end() const;
00102
00104 size_type size() const;
00105 bool empty() const;
00106
00109 byte operator[](size_type n) const;
00110 byte & operator[](size_type n);
00111
00112
00113
00114
00115
00116
00117 void insert(iterator pos, byte v);
00118 void insert(iterator pos, size_type n, byte v);
00119 # ifndef DOXYGEN
00120 template <class InputIterator>
00121 void insert(iterator pos, InputIterator f, InputIterator l,
00122 typename boost::disable_if< boost::is_convertible<InputIterator,size_type> >::type * = 0);
00123 # else
00124 template <class InputIterator>
00125 void insert(iterator pos, InputIterator f, InputIterator l);
00126 # endif
00127
00128 void erase(iterator pos);
00129 void erase(iterator first, iterator last);
00130 void clear();
00131
00132 void resize(size_type n, byte v=0);
00133
00134 void reserve(size_type n);
00135 size_type capacity() const;
00136
00137
00138
00139 protected:
00140 PacketData(size_type b, size_type e);
00141
00143 detail::PacketImpl * impl_;
00144
00145 detail::PacketImpl & impl() const;
00146
00147 bool valid();
00148
00149 private:
00150 size_type begin_;
00151 size_type end_;
00152
00153 friend class detail::PacketImpl;
00154 };
00155
00156 class PacketParserBase;
00157
00163 struct TruncatedPacketException : public senf::Exception
00164 { TruncatedPacketException() : senf::Exception("truncated packet") {} };
00165
00166 }
00167
00168
00169 #endif
00170 #if !defined(HH_SENF_Packets_Packets__decls_) && !defined(HH_SENF_Packets_PacketData_i_)
00171 #define HH_SENF_Packets_PacketData_i_
00172 #include "PacketData.cci"
00173
00174 #include "PacketData.cti"
00175 #endif
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187