#pragma once #include #include #include class span_writer { uint8_t *m_data; size_t m_capacity; size_t m_size = 0; public: span_writer(uint8_t *data, size_t capacity) : m_data(data), m_capacity(capacity) {} void push_back(uint8_t v) { if (m_size < m_capacity) m_data[m_size++] = v; } template void insert(uint8_t *, It first, It last) { while (first != last && m_size < m_capacity) m_data[m_size++] = *first++; } size_t size() const { return m_size; } size_t capacity() const { return m_capacity; } bool full() const { return m_size >= m_capacity; } uint8_t *data() { return m_data; } const uint8_t *data() const { return m_data; } uint8_t *begin() { return m_data; } 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; } };