From ef25ecf3146d7a95ab08b58ceab65d527fc18041 Mon Sep 17 00:00:00 2001 From: Zhenyu Wu Date: Tue, 27 Mar 2018 22:51:23 -0400 Subject: [PATCH 1/2] Fix StreamString read O(n^2); improve range read performance --- cores/esp8266/StreamString.cpp | 19 ++++++++++++------- cores/esp8266/StreamString.h | 6 ++++++ platform.local.txt | 2 ++ 3 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 platform.local.txt diff --git a/cores/esp8266/StreamString.cpp b/cores/esp8266/StreamString.cpp index 7ebf11d0e2..863c650cb1 100644 --- a/cores/esp8266/StreamString.cpp +++ b/cores/esp8266/StreamString.cpp @@ -39,23 +39,28 @@ size_t StreamString::write(uint8_t data) { return concat((char) data); } +size_t StreamString::readBytes(char *buffer, size_t length) { + size_t cpylen = min(length, (size_t)available()); + memcpy(buffer, begin()+_offset, cpylen); + _offset += cpylen; + return cpylen; +} + int StreamString::available() { - return length(); + return length() - _offset; } int StreamString::read() { - if(length()) { - char c = charAt(0); - remove(0, 1); + if(available()) { + char c = charAt(_offset++); return c; - } return -1; } int StreamString::peek() { - if(length()) { - char c = charAt(0); + if(available()) { + char c = charAt(_offset); return c; } return -1; diff --git a/cores/esp8266/StreamString.h b/cores/esp8266/StreamString.h index 1fedc18de0..768f4351dc 100644 --- a/cores/esp8266/StreamString.h +++ b/cores/esp8266/StreamString.h @@ -25,14 +25,20 @@ class StreamString: public Stream, public String { +protected: + size_t _offset = 0; public: size_t write(const uint8_t *buffer, size_t size) override; size_t write(uint8_t data) override; + size_t readBytes(char *buffer, size_t length) override; + int available() override; int read() override; int peek() override; void flush() override; + + void reset() { _offset = 0; } }; diff --git a/platform.local.txt b/platform.local.txt new file mode 100644 index 0000000000..5828631adf --- /dev/null +++ b/platform.local.txt @@ -0,0 +1,2 @@ +compiler.c.extra_flags=-DASYNC_TCP_SSL_ENABLED=1 -DASYNC_TCP_SSL_BEARSSL=1 -DESPZW_DEBUG_LEVEL=1 -DESPZW_LOG_TIME=1 +compiler.cpp.extra_flags=-DASYNC_TCP_SSL_ENABLED=1 -DASYNC_TCP_SSL_BEARSSL=1 -DESPZW_DEBUG_LEVEL=1 -DESPZW_LOG_TIME=1 From b059f5aee4cf2e48b544d46f9b402fc240816232 Mon Sep 17 00:00:00 2001 From: Zhenyu Wu Date: Tue, 27 Mar 2018 23:42:16 -0400 Subject: [PATCH 2/2] Remove accidential included platform.local.txt, add it to .gitignore --- .gitignore | 1 + platform.local.txt | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 platform.local.txt diff --git a/.gitignore b/.gitignore index f9dad668b3..a3f14fd447 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ tools/sdk/ld/backup *.gch boards.local.txt +platform.local.txt *.gcov *.gcno diff --git a/platform.local.txt b/platform.local.txt deleted file mode 100644 index 5828631adf..0000000000 --- a/platform.local.txt +++ /dev/null @@ -1,2 +0,0 @@ -compiler.c.extra_flags=-DASYNC_TCP_SSL_ENABLED=1 -DASYNC_TCP_SSL_BEARSSL=1 -DESPZW_DEBUG_LEVEL=1 -DESPZW_LOG_TIME=1 -compiler.cpp.extra_flags=-DASYNC_TCP_SSL_ENABLED=1 -DASYNC_TCP_SSL_BEARSSL=1 -DESPZW_DEBUG_LEVEL=1 -DESPZW_LOG_TIME=1