diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2015-01-25 21:14:31 +0100 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2015-01-29 13:41:56 +0000 |
commit | 7b5ba56b0ab55fcaf79fbf9aad70bf767c938e15 (patch) | |
tree | 7fbea35b0fb38c01e8f279e058eea0d029c615a9 /src/corelib/global | |
parent | 72c456909c830a0e1ac97251010d3d472d78ab10 (diff) |
QString: optimize multiArg()
The function used a QMap<int,int> to map the %n's to the index
in the args array.
By way of construction, the key was sorted in ascending order
while the values, initially all -1, were later reassigned to be
0...map.size()-1, ie. std::iota().
The only information this data structure stores is therefore
the sorted %n's. For that, a sorted vector is a vastly superior
data structure.
Go one step further and use QVarLengthArray to avoid
allocating any memory for the common case of just a few
placeholders.
As an artifact of the underlying refactoring, the management
of that data structure has been moved to a separate class,
ArgMapper.
Runtime for the following test from tst_qstring:
QString str("%1 %2 %3 %4 %5 %6 %7 %8 %9 foo %10 %11 bar"); // not timed
str = str.arg("one", "2", "3", "4", "5", "6", "7", "8", "9");
str = str.arg("ahoy", "there");
went down from 2.2us to 1.5us.
Change-Id: Ic552615fbac646b78ba05eb4e3215e63d202fd94
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src/corelib/global')
0 files changed, 0 insertions, 0 deletions