Abdelrazak Younes wrote:

> Helge Hafting wrote:
>> Abdelrazak Younes wrote:
>>> ucs4_to_qstring is pretty simple:
>>>
>>> QString const ucs4_to_qstring(char_type const * str, size_t ls)
>>> {
>>>     QString s;
>>>
>>>     for (size_t i = 0; i < ls; ++i)
>>>         s.append(ucs4_to_qchar(str[i]));
>>>
>>>     return s;
>>> }
>> A function call per character - ouch.

I would be more concerned about resizing by append(). Why don't you do this?

QString const ucs4_to_qstring(char_type const * str, size_t ls)
{
        QString s;
        s.reserve(ls);
        for (size_t i = 0; i < ls; ++i)
                s.append(ucs4_to_qchar(str[i]);
        return s;
}

(assuming that QString has a reserve() member, I don't know)

> Note that this function doesn't show in Andre's profiling results. But I
> am going to inline it to see if there's a difference.

That shoudd probably be inlined.


>> Is it allowed to have a single function that understands
>> both ucs4 strings and QString?
> 
> What do you mean?
> 
>>  Then the conversion could
>> be done in a single function. That tends to bring a nice speedup.

I guess Helge means
void ucs4_to_qstring(char_type const * str, size_t ls, QString & s)

That avoids one copy operation for non-shared strings, but since IIRC
qstrings are shared I don't expect a speedup here.


Georg

Reply via email to