Skip to content

Commit 21947eb

Browse files
authored
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
1 parent c7bdb23 commit 21947eb

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

cores/esp32/WString.cpp

Lines changed: 10 additions & 16 deletions
Original file line numberOriginal file lineDiff line numberDiff line change
@@ -59,9 +59,7 @@ String::String(StringSumHelper &&rval) {
59

59

60
String::String(char c) {
60
String::String(char c) {
61
init();
61
init();
62-
char buf[2];
62+
char buf[] = { c, '\0' };
63-
buf[0] = c;
64-
buf[1] = 0;
65
*this = buf;
63
*this = buf;
66
}
64
}
67

65

@@ -290,10 +288,11 @@ String & String::operator =(const char *cstr) {
290
return *this;
288
return *this;
291
}
289
}
292

290

293-
String & String::operator = (const __FlashStringHelper *pstr)
291+
String & String::operator =(const __FlashStringHelper *pstr) {
294-
{
292+
if(pstr)
295-
if (pstr) copy(pstr, strlen_P((PGM_P)pstr));
293+
copy(pstr, strlen_P((PGM_P)pstr));
296-
else invalidate();
294+
else
295+
invalidate();
297

296

298
return *this;
297
return *this;
299
}
298
}
@@ -347,22 +346,18 @@ unsigned char String::concat(const char *cstr) {
347
}
346
}
348

347

349
unsigned char String::concat(char c) {
348
unsigned char String::concat(char c) {
350-
char buf[2];
349+
char buf[] = { c, '\0' };
351-
buf[0] = c;
352-
buf[1] = 0;
353
return concat(buf, 1);
350
return concat(buf, 1);
354
}
351
}
355

352

356
unsigned char String::concat(unsigned char num) {
353
unsigned char String::concat(unsigned char num) {
357
char buf[1 + 3 * sizeof(unsigned char)];
354
char buf[1 + 3 * sizeof(unsigned char)];
358-
sprintf(buf, "%d", num);
355+
return concat(buf, sprintf(buf, "%d", num));
359-
return concat(buf, strlen(buf));
360
}
356
}
361

357

362
unsigned char String::concat(int num) {
358
unsigned char String::concat(int num) {
363
char buf[2 + 3 * sizeof(int)];
359
char buf[2 + 3 * sizeof(int)];
364-
sprintf(buf, "%d", num);
360+
return concat(buf, sprintf(buf, "%d", num));
365-
return concat(buf, strlen(buf));
366
}
361
}
367

362

368
unsigned char String::concat(unsigned int num) {
363
unsigned char String::concat(unsigned int num) {
@@ -373,8 +368,7 @@ unsigned char String::concat(unsigned int num) {
373

368

374
unsigned char String::concat(long num) {
369
unsigned char String::concat(long num) {
375
char buf[2 + 3 * sizeof(long)];
370
char buf[2 + 3 * sizeof(long)];
376-
sprintf(buf, "%ld", num);
371+
return concat(buf, sprintf(buf, "%ld", num));
377-
return concat(buf, strlen(buf));
378
}
372
}
379

373

380
unsigned char String::concat(unsigned long num) {
374
unsigned char String::concat(unsigned long num) {

0 commit comments

Comments
 (0)