Overflow detection, span-based signatures, flatten control flow

This commit is contained in:
Ian Gulliver
2026-04-10 23:02:07 +09:00
parent 8408603390
commit 76c519c17a
7 changed files with 67 additions and 56 deletions

View File

@@ -8,6 +8,7 @@ class span_writer {
uint8_t *m_data;
size_t m_capacity;
size_t m_size = 0;
bool m_overflow = false;
public:
span_writer(uint8_t *data, size_t capacity) : m_data(data), m_capacity(capacity) {}
@@ -15,17 +16,21 @@ public:
void push_back(uint8_t v) {
if (m_size < m_capacity) m_data[m_size++] = v;
else m_overflow = true;
}
template <class It>
void insert(uint8_t *, It first, It last) {
while (first != last && m_size < m_capacity)
m_data[m_size++] = *first++;
while (first != last) {
if (m_size < m_capacity) m_data[m_size++] = *first++;
else { m_overflow = true; return; }
}
}
size_t size() const { return m_size; }
size_t capacity() const { return m_capacity; }
bool full() const { return m_size >= m_capacity; }
bool overflow() const { return m_overflow; }
uint8_t *data() { return m_data; }
const uint8_t *data() const { return m_data; }