9 #ifndef MSG_BUFFER_H_INCLUDED
10 #define MSG_BUFFER_H_INCLUDED
12 #include <Pb/meta_fwd.h>
33 template<
typename StorageT>
38 typedef StorageT storage_type;
39 typedef typename storage_type::data_type data_type;
40 typedef typename storage_type::s_pointer s_pointer;
41 typedef typename storage_type::w_pointer w_pointer;
43 typedef data_type* pointer;
44 typedef const data_type* const_pointer;
73 m_data.resize(n, val);
123 return m_data.empty();
134 return m_data.capacity();
145 return m_data.size();
173 m_data.resize(n, val);
190 return const_cast<const_pointer
>(&m_data[0]);
198 std::fill(m_data.begin(), m_data.end(), 0);
209 void assign(const_pointer pBuffer,
size_t n)
220 const_pointer pFirst = pBuffer;
221 const_pointer pLast = &pBuffer[n];
223 m_data.assign(pFirst, pLast);
248 m_offset = new_offset;
263 template <
typename T>
264 size_t get_data(T& value, std::ptrdiff_t pos)
const
273 std::ptrdiff_t total_offset =
offset() + pos;
276 size_t bytes_read = 0;
277 if ( total_offset >= 0
278 && total_offset +
sizeof(value) <=
size())
281 storage_type::read(
data(),
321 size_t total_offset =
static_cast<size_t>(
offset()) + pos;
324 size_t bytes_read = 0;
325 size_t total_size = this->
size();
326 if ( (total_offset >= 0)
327 && (total_offset + length) <= total_size)
330 storage_type::read(
data(),
353 template <
typename T>
363 size_t total_offset =
static_cast<size_t>(
offset()) + pos;
366 size_t bytes_written = 0;
367 size_t total_size =
size();
368 if ( (total_offset >= 0)
372 storage_type::write ( raw_data(),
380 return bytes_written;
404 template <
typename InputIt>
405 size_t set_range(InputIt first, InputIt last,
size_t pos)
420 size_t total_offset =
static_cast<size_t>(
offset()) + pos;
421 size_t range_size = std::distance(first, last);
424 size_t bytes_written = 0;
425 size_t total_size =
size();
426 if ( (total_offset >= 0)
427 && (total_offset + range_size) <= total_size)
430 storage_type::write ( raw_data(),
438 return bytes_written;
462 retBuffer.m_offset = m_offset;
469 typedef std::vector<data_type> DataVector;
475 std::ptrdiff_t m_offset;
494 template<
typename T>
501 template <
typename pkt_buffer_t>
502 pkt_buffer_t& make_nil_buffer()
504 static pkt_buffer_t nilBuffer;