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