From 21947ebe76cf6380fe06aa885390b86cc477709a Mon Sep 17 00:00:00 2001 From: Clemens Kirchgatterer Date: Fri, 18 Jun 2021 12:10:40 +0200 Subject: [PATCH] Make String::concat() faster for some types. (#5307) * Make String::concat() faster for some types. This patch removes the unneeded call to `strlen()` when concatenating some types to a `String`. Additionally it fixes some whitespace for consistency. * Update WString.cpp --- cores/esp32/WString.cpp | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/cores/esp32/WString.cpp b/cores/esp32/WString.cpp index c05b2b13..23b1af20 100644 --- a/cores/esp32/WString.cpp +++ b/cores/esp32/WString.cpp @@ -59,9 +59,7 @@ String::String(StringSumHelper &&rval) { String::String(char c) { init(); - char buf[2]; - buf[0] = c; - buf[1] = 0; + char buf[] = { c, '\0' }; *this = buf; } @@ -290,10 +288,11 @@ String & String::operator =(const char *cstr) { return *this; } -String & String::operator = (const __FlashStringHelper *pstr) -{ - if (pstr) copy(pstr, strlen_P((PGM_P)pstr)); - else invalidate(); +String & String::operator =(const __FlashStringHelper *pstr) { + if(pstr) + copy(pstr, strlen_P((PGM_P)pstr)); + else + invalidate(); return *this; } @@ -347,22 +346,18 @@ unsigned char String::concat(const char *cstr) { } unsigned char String::concat(char c) { - char buf[2]; - buf[0] = c; - buf[1] = 0; + char buf[] = { c, '\0' }; return concat(buf, 1); } unsigned char String::concat(unsigned char num) { char buf[1 + 3 * sizeof(unsigned char)]; - sprintf(buf, "%d", num); - return concat(buf, strlen(buf)); + return concat(buf, sprintf(buf, "%d", num)); } unsigned char String::concat(int num) { char buf[2 + 3 * sizeof(int)]; - sprintf(buf, "%d", num); - return concat(buf, strlen(buf)); + return concat(buf, sprintf(buf, "%d", num)); } unsigned char String::concat(unsigned int num) { @@ -373,8 +368,7 @@ unsigned char String::concat(unsigned int num) { unsigned char String::concat(long num) { char buf[2 + 3 * sizeof(long)]; - sprintf(buf, "%ld", num); - return concat(buf, strlen(buf)); + return concat(buf, sprintf(buf, "%ld", num)); } unsigned char String::concat(unsigned long num) {