1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-17 22:23:10 +03:00

String class: removed deep copy on substring method.

Small code cleanup.
This commit is contained in:
Cristian Maglie
2013-06-06 15:37:04 +02:00
parent 16b7b67c47
commit b341a7c751
3 changed files with 16 additions and 21 deletions

View File

@ -527,11 +527,6 @@ int String::lastIndexOf(const String &s2, unsigned int fromIndex) const
return found; return found;
} }
String String::substring( unsigned int left ) const
{
return substring(left, len);
}
String String::substring(unsigned int left, unsigned int right) const String String::substring(unsigned int left, unsigned int right) const
{ {
if (left > right) { if (left > right) {

View File

@ -158,7 +158,7 @@ public:
int lastIndexOf( char ch, unsigned int fromIndex ) const; int lastIndexOf( char ch, unsigned int fromIndex ) const;
int lastIndexOf( const String &str ) const; int lastIndexOf( const String &str ) const;
int lastIndexOf( const String &str, unsigned int fromIndex ) const; int lastIndexOf( const String &str, unsigned int fromIndex ) const;
String substring( unsigned int beginIndex ) const; String substring( unsigned int beginIndex ) const { return substring(beginIndex, len); };
String substring( unsigned int beginIndex, unsigned int endIndex ) const; String substring( unsigned int beginIndex, unsigned int endIndex ) const;
// modification // modification

View File

@ -150,13 +150,13 @@ unsigned char String::changeBuffer(unsigned int maxStrLen)
/* Copy and Move */ /* Copy and Move */
/*********************************************/ /*********************************************/
String & String::copy(const char *cstr, unsigned int _length) String & String::copy(const char *cstr, unsigned int length)
{ {
if (!reserve(_length)) { if (!reserve(length)) {
invalidate(); invalidate();
return *this; return *this;
} }
len = _length; len = length;
strcpy(buffer, cstr); strcpy(buffer, cstr);
return *this; return *this;
} }
@ -224,11 +224,11 @@ unsigned char String::concat(const String &s)
return concat(s.buffer, s.len); return concat(s.buffer, s.len);
} }
unsigned char String::concat(const char *cstr, unsigned int _length) unsigned char String::concat(const char *cstr, unsigned int length)
{ {
unsigned int newlen = len + _length; unsigned int newlen = len + length;
if (!cstr) return 0; if (!cstr) return 0;
if (_length == 0) return 1; if (length == 0) return 1;
if (!reserve(newlen)) return 0; if (!reserve(newlen)) return 0;
strcpy(buffer + len, cstr); strcpy(buffer + len, cstr);
len = newlen; len = newlen;
@ -549,24 +549,24 @@ String String::substring(unsigned int left, unsigned int right) const
/* Modification */ /* Modification */
/*********************************************/ /*********************************************/
void String::replace(char find, char _replace) void String::replace(char find, char replace)
{ {
if (!buffer) return; if (!buffer) return;
for (char *p = buffer; *p; p++) { for (char *p = buffer; *p; p++) {
if (*p == find) *p = _replace; if (*p == find) *p = replace;
} }
} }
void String::replace(const String& find, const String& _replace) void String::replace(const String& find, const String& replace)
{ {
if (len == 0 || find.len == 0) return; if (len == 0 || find.len == 0) return;
int diff = _replace.len - find.len; int diff = replace.len - find.len;
char *readFrom = buffer; char *readFrom = buffer;
char *foundAt; char *foundAt;
if (diff == 0) { if (diff == 0) {
while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { while ((foundAt = strstr(readFrom, find.buffer)) != NULL) {
memcpy(foundAt, _replace.buffer, _replace.len); memcpy(foundAt, replace.buffer, replace.len);
readFrom = foundAt + _replace.len; readFrom = foundAt + replace.len;
} }
} else if (diff < 0) { } else if (diff < 0) {
char *writeTo = buffer; char *writeTo = buffer;
@ -574,8 +574,8 @@ void String::replace(const String& find, const String& _replace)
unsigned int n = foundAt - readFrom; unsigned int n = foundAt - readFrom;
memcpy(writeTo, readFrom, n); memcpy(writeTo, readFrom, n);
writeTo += n; writeTo += n;
memcpy(writeTo, _replace.buffer, _replace.len); memcpy(writeTo, replace.buffer, replace.len);
writeTo += _replace.len; writeTo += replace.len;
readFrom = foundAt + find.len; readFrom = foundAt + find.len;
len += diff; len += diff;
} }
@ -594,7 +594,7 @@ void String::replace(const String& find, const String& _replace)
memmove(readFrom + diff, readFrom, len - (readFrom - buffer)); memmove(readFrom + diff, readFrom, len - (readFrom - buffer));
len += diff; len += diff;
buffer[len] = 0; buffer[len] = 0;
memcpy(buffer + index, _replace.buffer, _replace.len); memcpy(buffer + index, replace.buffer, replace.len);
index--; index--;
} }
} }