TinyRobotics
Loading...
Searching...
No Matches
MemoryStream.h
1#pragma once
2#include "Stream.h"
3#include "stdint.h"
4
5namespace tinyrobotics {
6
7/**
8 * @class MemoryStream
9 * @ingroup utils
10 * @brief Read-only memory stream for wrapping a buffer as an Arduino Stream.
11 *
12 * This class allows you to treat a memory buffer as an input Stream, enabling
13 * code that expects a Stream (such as parsers or message dispatchers) to operate
14 * directly on in-memory data. The stream is read-only: write() does nothing.
15 */
16class MemoryStream : public Stream {
17 const uint8_t* _data;
18 size_t _len, _pos;
19 public:
20 MemoryStream(const uint8_t* d, size_t l) : _data(d), _len(l), _pos(0) {}
21 int available() override { return _len - _pos; }
22 int read() override { return (_pos < _len) ? _data[_pos++] : -1; }
23 int peek() override { return (_pos < _len) ? _data[_pos] : -1; }
24 void flush() override {}
25 size_t write(uint8_t) override { return 0; } // Read-only
26 size_t readBytes(char* buf, size_t n) {
27 size_t toRead = (_pos + n > _len) ? (_len - _pos) : n;
28 memcpy(buf, _data + _pos, toRead);
29 _pos += toRead;
30 return toRead;
31 }
32};
33}
Read-only memory stream for wrapping a buffer as an Arduino Stream.
Definition: MemoryStream.h:16