10#ifndef MSGPACK_V1_VREFBUFFER_HPP
11#define MSGPACK_V1_VREFBUFFER_HPP
26#if defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
64 :m_ref_size(std::
max(
ref_size, detail::packer_max_buffer_size + 1)),
68 throw std::bad_alloc();
72 72 /
sizeof(
iovec) : 8;
77 throw std::bad_alloc();
87 throw std::bad_alloc();
89 inner_buffer*
const ib = &m_inner_buffer;
92 ib->ptr =
reinterpret_cast<char*
>(
c) +
sizeof(chunk);
100 chunk*
c = m_inner_buffer.head;
120 if(
len < m_ref_size) {
129 if(m_tail == m_end) {
130 const size_t nused =
static_cast<size_t>(m_tail - m_array);
136 throw std::bad_alloc();
151 inner_buffer*
const ib = &m_inner_buffer;
154 size_t sz = m_chunk_size;
159 if(
sizeof(chunk) +
sz <
sz){
160 throw std::bad_alloc();
163 chunk*
c =
static_cast<chunk*
>(
::malloc(
sizeof(chunk) +
sz));
165 throw std::bad_alloc();
171 ib->ptr =
reinterpret_cast<char*
>(
c) +
sizeof(chunk);
179 if(m_tail != m_array &&
m ==
180 static_cast<const char*
>(
181 const_cast<const void *
>((m_tail - 1)->iov_base)
182 ) + (m_tail - 1)->iov_len) {
183 (m_tail - 1)->iov_len +=
len;
197 return static_cast<size_t>(m_tail - m_array);
202 size_t sz = m_chunk_size;
204 if((
sizeof(chunk) +
sz) <
sz){
205 throw std::bad_alloc();
210 throw std::bad_alloc();
215 const size_t nused =
static_cast<size_t>(m_tail - m_array);
216 if(
to->m_tail +
nused < m_end) {
217 const size_t tosize =
static_cast<size_t>(
to->m_tail -
to->m_array);
219 size_t nnext =
static_cast<size_t>(
to->m_end -
to->m_array) * 2;
233 throw std::bad_alloc();
247 inner_buffer*
const ib = &m_inner_buffer;
248 inner_buffer*
const toib = &
to->m_inner_buffer;
257 if(
toib->free <
ib->free) {
264 ib->ptr =
reinterpret_cast<char*
>(
empty) +
sizeof(chunk);
270 chunk*
c = m_inner_buffer.head->next;
278 inner_buffer*
const ib = &m_inner_buffer;
281 ib->free = m_chunk_size;
282 ib->ptr =
reinterpret_cast<char*
>(
c) +
sizeof(chunk);
287#if defined(MSGPACK_USE_CPP03)
304 inner_buffer m_inner_buffer;
#define MSGPACK_ASSERT
Definition assert.hpp:22
Definition vrefbuffer.hpp:51
vrefbuffer(const vrefbuffer &)=delete
~vrefbuffer()
Definition vrefbuffer.hpp:98
const iovec * vector() const
Definition vrefbuffer.hpp:190
void clear()
Definition vrefbuffer.hpp:268
void write(const char *buf, size_t len)
Definition vrefbuffer.hpp:114
vrefbuffer(size_t ref_size=MSGPACK_VREFBUFFER_REF_SIZE, size_t chunk_size=MSGPACK_VREFBUFFER_CHUNK_SIZE)
Definition vrefbuffer.hpp:62
vrefbuffer & operator=(const vrefbuffer &)=delete
void append_ref(const char *buf, size_t len)
Definition vrefbuffer.hpp:127
void migrate(vrefbuffer *to)
Definition vrefbuffer.hpp:200
size_t vector_size() const
Definition vrefbuffer.hpp:195
void append_copy(const char *buf, size_t len)
Definition vrefbuffer.hpp:149
std::size_t const packer_max_buffer_size
Definition vrefbuffer.hpp:48
Definition adaptor_base.hpp:15
Definition vrefbuffer.hpp:33
size_t iov_len
Definition vrefbuffer.hpp:35
void * iov_base
Definition vrefbuffer.hpp:34
#define MSGPACK_NULLPTR
Definition cpp_config_decl.hpp:85
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition versioning.hpp:66
#define MSGPACK_VREFBUFFER_CHUNK_SIZE
Definition vrefbuffer_decl.hpp:22
#define MSGPACK_VREFBUFFER_REF_SIZE
Definition vrefbuffer_decl.hpp:18