Files
picomap/firmware/include/span_writer.h

36 lines
965 B
C++

#pragma once
#include <cstddef>
#include <cstdint>
#include <cstring>
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 <class It>
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; }
};