std::size_t write(const T *ptr, const std::size_t size) { if ( cur+size > end ) { shared_buffer::shared_array_type prev = buf.data; const std::size_t olds = cur - beg; const std::size_t news = size + (olds * ((1 + std::sqrt(5)) / 1.5)); buf = shared_buffer(news); std::memcpy(buf.data.get(), prev.get(), olds); beg = buf.data.get(); cur = beg+olds; end = beg+news; } switch ( size ) { case sizeof(std::int8_t): *cur = *((std::int8_t*)ptr); break; case sizeof(std::int16_t): *((std::int16_t*)cur) = *((std::int16_t*)ptr); break; case sizeof(std::int32_t): *((std::int32_t*)cur) = *((std::int32_t*)ptr); break; case sizeof(std::int64_t): *((std::int64_t*)cur) = *((std::int64_t*)ptr); break; default: std::memcpy(cur, ptr, size); } cur += size; return size; }
shared_buffer get_shared_buffer() const { return shared_buffer(nullptr, 0); }
shared_buffer get_shared_buffer() const { return shared_buffer(buf.data, cur-beg); }
shared_buffer get_shared_buffer() const { return shared_buffer(cur, end - cur); }