133 |
133 |
134 void NetworkPacketBuffer::check_read_size (size_t item_size) { |
134 void NetworkPacketBuffer::check_read_size (size_t item_size) { |
135 if (offset + item_size > data_size) |
135 if (offset + item_size > data_size) |
136 throw NetworkPacketError("not enough data to read"); |
136 throw NetworkPacketError("not enough data to read"); |
137 } |
137 } |
138 |
138 |
139 void NetworkPacketBuffer::write (const void *ptr, size_t len) { |
139 const void* NetworkPacketBuffer::read_ptr (size_t len) { |
140 // check buffer overflow |
140 // check buffer overflow |
141 check_write_size(len); |
141 check_write_size(len); |
142 |
142 |
143 // set value |
143 // pointer value... |
144 memcpy(buf_ptr + offset, ptr, len); |
144 const void *ptr = buf_ptr + offset; |
|
145 |
|
146 // update offset |
|
147 offset += len; |
|
148 |
|
149 // return pointer |
|
150 return ptr; |
|
151 } |
|
152 |
|
153 void* NetworkPacketBuffer::write_ptr (size_t len) { |
|
154 // check buffer overflow |
|
155 check_write_size(len); |
|
156 |
|
157 // pointer value... |
|
158 void *ptr = buf_ptr + offset; |
145 |
159 |
146 // update offset and size |
160 // update offset and size |
147 offset += len; |
161 offset += len; |
148 data_size += len; |
162 data_size += len; |
|
163 |
|
164 // return pointer |
|
165 return ptr; |
149 } |
166 } |
150 |
167 |
151 void NetworkPacketBuffer::read (void *ptr, size_t len) { |
168 void NetworkPacketBuffer::read (void *ptr, size_t len) { |
152 // check buffer underflow |
169 // get input pointer... |
153 check_read_size(len); |
170 const void *input_ptr = read_ptr(len); |
154 |
171 |
155 // set value |
172 // copy value out |
156 memcpy(ptr, buf_ptr + offset, len); |
173 memcpy(ptr, input_ptr, len); |
157 |
174 } |
158 // update offset |
175 |
159 offset += len; |
176 void NetworkPacketBuffer::write (const void *ptr, size_t len) { |
|
177 // get output pointer... |
|
178 void *output_ptr = write_ptr(len); |
|
179 |
|
180 // copy value in |
|
181 memcpy(output_ptr, ptr, len); |
|
182 } |
|
183 |
|
184 size_t NetworkPacketBuffer::tell_remaining (void) { |
|
185 // number of bytes in total - number of bytes read |
|
186 return data_size - offset; |
160 } |
187 } |
161 |
188 |
162 /* |
189 /* |
163 * NetworkPacket |
190 * NetworkPacket |
164 */ |
191 */ |