Zero-copy encode: pack response body in place, single shared tx_buf, drain rx loop

This commit is contained in:
Ian Gulliver
2026-04-10 22:48:28 +09:00
parent 58db392bf3
commit 8408603390
8 changed files with 98 additions and 57 deletions

View File

@@ -2,6 +2,7 @@
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <span>
class span_writer {
uint8_t *m_data;
@@ -10,6 +11,7 @@ class span_writer {
public:
span_writer(uint8_t *data, size_t capacity) : m_data(data), m_capacity(capacity) {}
span_writer(std::span<uint8_t> buf) : m_data(buf.data()), m_capacity(buf.size()) {}
void push_back(uint8_t v) {
if (m_size < m_capacity) m_data[m_size++] = v;
@@ -32,4 +34,12 @@ public:
uint8_t *end() { return m_data + m_size; }
const uint8_t *begin() const { return m_data; }
const uint8_t *end() const { return m_data + m_size; }
span_writer subspan(size_t offset) {
return span_writer(m_data + offset, m_capacity - offset);
}
span_writer subspan(size_t offset, size_t len) {
return span_writer(m_data + offset, len);
}
};