COMMON: Avoid makeUnique on string if trim wouldn't modify it.
This commit is contained in:
parent
ce379f57b8
commit
3adb30e4bf
1 changed files with 26 additions and 12 deletions
|
@ -742,22 +742,36 @@ TEMPLATE void BASESTRING::trim() {
|
||||||
if (_size == 0)
|
if (_size == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
uint numLeading = 0;
|
||||||
|
while (numLeading < _size) {
|
||||||
|
if (isSpace(_str[numLeading]))
|
||||||
|
numLeading++;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint numTrailing = 0;
|
||||||
|
if (numLeading != _size) {
|
||||||
|
while (numTrailing < _size) {
|
||||||
|
if (isSpace(_str[_size - 1 - numTrailing]))
|
||||||
|
numTrailing++;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numLeading == 0 && numTrailing == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
makeUnique();
|
makeUnique();
|
||||||
|
|
||||||
// Trim trailing whitespace
|
uint newSize = _size - numLeading - numTrailing;
|
||||||
while (_size >= 1 && isSpace(_str[_size - 1]))
|
|
||||||
--_size;
|
|
||||||
_str[_size] = 0;
|
|
||||||
|
|
||||||
// Trim leading whitespace
|
if (numLeading > 0)
|
||||||
value_type *t = _str;
|
memmove(_str, _str + numLeading, newSize);
|
||||||
while (isSpace(*t))
|
|
||||||
t++;
|
|
||||||
|
|
||||||
if (t != _str) {
|
_str[newSize] = 0;
|
||||||
_size -= t - _str;
|
_size = newSize;
|
||||||
memmove(_str, t, (_size + 1) * sizeof(_str[0]));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue