FastLED 3.9.15
Loading...
Searching...
No Matches
memory_file_handle.h
Go to the documentation of this file.
1#pragma once
2
5#include "fl/stl/span.h"
6#include "fl/math/math.h"
7#include "fl/stl/noexcept.h"
8
9namespace fl {
10namespace detail {
11
12// In-memory file buffer backed by a circular buffer.
13// Non-seekable (pipe/socket-like). Write pushes to buffer, read pops from buffer.
14// Analogous to std::stringbuf but for circular byte streams.
15class memorybuf : public fl::filebuf {
16public:
17 explicit memorybuf(fl::u32 capacity)
19
20 ~memorybuf() FL_NOEXCEPT override = default;
21
22 bool is_open() const override { return true; }
23
24 void close() override { mBuffer.clear(); }
25
26 fl::size_t read(char* buffer, fl::size_t count) override {
27 if (!buffer || count == 0) return 0;
28 fl::size_t actual = FL_MIN(count, mBuffer.size());
29 for (fl::size_t i = 0; i < actual; ++i) {
30 fl::u8 b = 0;
31 mBuffer.pop_front(&b);
32 buffer[i] = static_cast<char>(b);
33 }
34 return actual;
35 }
36 using filebuf::read; // u8 overload
37
38 fl::size_t write(const char* data, fl::size_t count) override {
39 if (!data || count == 0 || mBuffer.capacity() == 0) return 0;
40 fl::size_t written = 0;
41 for (fl::size_t i = 0; i < count; ++i) {
42 if (mBuffer.full()) break;
43 mBuffer.push_back(static_cast<fl::u8>(data[i]));
44 ++written;
45 }
46 mTotalWritten += written;
47 return written;
48 }
49
50 // Convenience: write u8 data
52 return write(reinterpret_cast<const char*>(data.data()), data.size()); // ok reinterpret cast
53 }
54
55 // Convenience: write CRGB pixels
57 fl::size_t bytes_written = write(reinterpret_cast<const char*>(src), n * 3); // ok reinterpret cast
58 return bytes_written / 3;
59 }
60
61 fl::size_t tell() override { return 0; } // Not meaningful for circular buffer
62
63 bool seek(fl::size_t, seek_dir) override { return false; } // Non-seekable
64 using filebuf::seek;
65
66 fl::size_t size() const override { return mBuffer.size(); }
67
68 const char* path() const override { return "memorybuf"; }
69
70 bool is_eof() const override { return mBuffer.empty(); }
71
72 bool has_error() const override { return false; }
73 void clear_error() override {}
74 int error_code() const override { return 0; }
75 const char* error_message() const override { return "No error"; }
76
77 bool available() const override { return !mBuffer.empty(); }
78
79 fl::size_t bytes_left() const override { return mBuffer.size(); }
80
81 void clear() { mBuffer.clear(); }
82
83 fl::size_t capacity() const { return mBuffer.capacity(); }
84
85private:
88};
89
90} // namespace detail
91
92// Public alias
95
96} // namespace fl
bool available() const override
fl::size_t capacity() const
bool seek(fl::size_t, seek_dir) override
fl::size_t write(fl::span< const fl::u8 > data)
fl::size_t tell() override
circular_buffer< fl::u8 > mBuffer
const char * error_message() const override
fl::size_t bytes_left() const override
void clear_error() override
fl::size_t writeCRGB(const CRGB *src, fl::size_t n)
bool is_open() const override
bool has_error() const override
int error_code() const override
fl::size_t read(char *buffer, fl::size_t count) override
const char * path() const override
fl::size_t write(const char *data, fl::size_t count) override
memorybuf(fl::u32 capacity)
fl::size_t size() const override
bool is_eof() const override
~memorybuf() FL_NOEXCEPT override=default
virtual bool seek(fl::size_t pos, seek_dir dir)=0
virtual fl::size_t read(char *buffer, fl::size_t count)=0
const T * data() const FL_NOEXCEPT
Definition span.h:461
constexpr fl::size size() const FL_NOEXCEPT
Definition span.h:458
#define FL_MIN(a, b)
Definition math.h:109
Compile-time linker keep-alive hook for a single fl::Bus.
Definition bus_traits.h:48
unsigned char u8
Definition s16x16x4.h:132
__SIZE_TYPE__ size_t
Definition s16x16x4.h:16
seek_dir
Definition file_handle.h:19
detail::memorybuf memorybuf
Base definition for an LED controller.
Definition crgb.hpp:179
#define FL_NOEXCEPT
#define FASTLED_SHARED_PTR_NO_FWD(type)
Definition shared_ptr.h:546
Representation of an 8-bit RGB pixel (Red, Green, Blue)
Definition crgb.h:38