From kde-commits Sat May 30 10:18:45 2009 From: Viacheslav Tokarev Date: Sat, 30 May 2009 10:18:45 +0000 To: kde-commits Subject: KDE/kdelibs/kdecore/config Message-Id: <1243678725.829236.18231.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=124386171626962 SVN commit 975454 by vtokarev: optimization: use QByteArray data directly to avoid overhead of append() method call M +22 -12 kconfigini.cpp --- trunk/KDE/kdelibs/kdecore/config/kconfigini.cpp #975453:975454 @@ -590,13 +590,16 @@ const int l = aString.length(); QByteArray result; // Guesstimated that it's good to avoid data() initialization for a length of l*4 - result.reserve(l * 4); // Maximum 4x as long as source string due to \x escape sequences + result.resize(l * 4); // Maximum 4x as long as source string due to \x escape sequences register const char *s = aString.constData(); int i = 0; + char *data = result.data(); + char *start = data; // Protect leading space if (s[0] == ' ' && type != GroupString) { - result.append("\\s"); + *data++ = '\\'; + *data++ = 's'; i++; } @@ -606,23 +609,27 @@ // The \n, \t, \r cases (all < 32) are handled below; we can ignore them here if (((unsigned char)s[i]) < 32) goto doEscape; - result.append(s[i]); + *data++ = s[i]; break; case '\n': - result.append("\\n"); + *data++ = '\\'; + *data++ = 'n'; break; case '\t': - result.append("\\t"); + *data++ = '\\'; + *data++ = 't'; break; case '\r': - result.append("\\r"); + *data++ = '\\'; + *data++ = 'r'; break; case '\\': - result.append("\\\\"); + *data++ = '\\'; + *data++ = '\\'; break; case '=': if (type != KeyString) { - result.append(s[i]); + *data++ = s[i]; break; } goto doEscape; @@ -630,16 +637,19 @@ case ']': // Above chars are OK to put in *value* strings as plaintext if (type == ValueString) { - result.append(s[i]); + *data++ = s[i]; break; } doEscape: - result.append("\\x") - .append(nibbleLookup[((unsigned char)s[i]) >> 4]) - .append(nibbleLookup[((unsigned char)s[i]) & 0x0f]); + *data++ = '\\'; + *data++ = 'x'; + *data++ = nibbleLookup[((unsigned char)s[i]) >> 4]; + *data++ = nibbleLookup[((unsigned char)s[i]) & 0x0f]; break; } } + *data = 0; + result.resize(data - start); // Protect trailing space if (result.endsWith(' ') && type != GroupString) {