From b1b661509e38a4328a6f3c1f4196d5c686b6efe3 Mon Sep 17 00:00:00 2001 From: Mathieu Carbou Date: Wed, 9 Apr 2025 00:05:22 +0200 Subject: [PATCH] fix(core): StreamString performance improvements --- cores/esp32/StreamString.cpp | 15 +++------------ cores/esp32/StreamString.h | 4 ++++ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/cores/esp32/StreamString.cpp b/cores/esp32/StreamString.cpp index d0117c399eb..cad3ea6e522 100644 --- a/cores/esp32/StreamString.cpp +++ b/cores/esp32/StreamString.cpp @@ -41,24 +41,15 @@ size_t StreamString::write(uint8_t data) { } int StreamString::available() { - return length(); + return length() - _start; } int StreamString::read() { - if (length()) { - char c = charAt(0); - remove(0, 1); - return c; - } - return -1; + return available() ? charAt(_start++) : -1; } int StreamString::peek() { - if (length()) { - char c = charAt(0); - return c; - } - return -1; + return available() ? charAt(_start) : -1; } void StreamString::flush() {} diff --git a/cores/esp32/StreamString.h b/cores/esp32/StreamString.h index b4f20147277..39df96afb2d 100644 --- a/cores/esp32/StreamString.h +++ b/cores/esp32/StreamString.h @@ -33,6 +33,10 @@ class StreamString : public Stream, public String { int read() override; int peek() override; void flush() override; + +private: + // read position + unsigned int _start = 0; }; #endif /* STREAMSTRING_H_ */