| 110 | } |
| 111 | |
| 112 | blob binary_writer::get_current_buffer() |
| 113 | { |
| 114 | if (_buffers.size() == 1) { |
| 115 | return _current_offset > 0 ? _buffers[0].range(0, _current_offset) : _buffers[0]; |
| 116 | } else { |
| 117 | std::shared_ptr<char> bptr(::dsn::utils::make_shared_array<char>(_total_size)); |
| 118 | blob bb(bptr, _total_size); |
| 119 | const char *ptr = bb.data(); |
| 120 | |
| 121 | for (int i = 0; i < static_cast<int>(_buffers.size()); i++) { |
| 122 | size_t len = (size_t)_buffers[i].length(); |
| 123 | if (_current_offset > 0 && i + 1 == (int)_buffers.size()) { |
| 124 | len = _current_offset; |
| 125 | } |
| 126 | |
| 127 | memcpy((void *)ptr, (const void *)_buffers[i].data(), len); |
| 128 | ptr += _buffers[i].length(); |
| 129 | } |
| 130 | return bb; |
| 131 | } |
| 132 | } |
| 133 | |
| 134 | void binary_writer::write_empty(int sz) |
| 135 | { |