STINNER Victor added the comment:

> Looks like it's cheaper to overallocate than add checks for overflow at each 
> loop iteration.

I expected that the temporary Py_UCS4 buffer and the conversion to a Unicode 
object (Py_UCS1, Py_UCS2 or Py_UCS4) would be more expensive than 
_PyUnicodeWriter. It looks like it's slower.

I tried to optimize the code but I didn't see how to make it really faster than 
the current code.

--

Currently, the code uses:

for (j = 0; j < n_res; j++) {
   *maxchar = Py_MAX(*maxchar, mapped[j]);
   res[k++] = mapped[j];
}

where res is a Py_UCS4* string, and mapped an array of 3 Py_UCS4.

I replaced it with a call to case_operation_write() which calls 
_PyUnicodeWriter_WriteCharInline().

_PyUnicodeWriter_WriteCharInline() is maybe more expensive than "res[k++] = 
mapped[j];".

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue22649>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to