mirror of https://github.com/python/cpython
PyUnicode_Join(): move use_memcpy test out of the loop to cleanup and optimize the code
This commit is contained in:
parent
55c08781e8
commit
4560f9c63f
|
@ -9466,41 +9466,49 @@ PyUnicode_Join(PyObject *separator, PyObject *seq)
|
||||||
sep_data = PyUnicode_1BYTE_DATA(sep);
|
sep_data = PyUnicode_1BYTE_DATA(sep);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
for (i = 0, res_offset = 0; i < seqlen; ++i) {
|
if (use_memcpy) {
|
||||||
Py_ssize_t itemlen;
|
for (i = 0; i < seqlen; ++i) {
|
||||||
item = items[i];
|
Py_ssize_t itemlen;
|
||||||
/* Copy item, and maybe the separator. */
|
item = items[i];
|
||||||
if (i && seplen != 0) {
|
|
||||||
if (use_memcpy) {
|
/* Copy item, and maybe the separator. */
|
||||||
|
if (i && seplen != 0) {
|
||||||
Py_MEMCPY(res_data,
|
Py_MEMCPY(res_data,
|
||||||
sep_data,
|
sep_data,
|
||||||
kind * seplen);
|
kind * seplen);
|
||||||
res_data += kind * seplen;
|
res_data += kind * seplen;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
_PyUnicode_FastCopyCharacters(res, res_offset, sep, 0, seplen);
|
itemlen = PyUnicode_GET_LENGTH(item);
|
||||||
res_offset += seplen;
|
if (itemlen != 0) {
|
||||||
}
|
|
||||||
}
|
|
||||||
itemlen = PyUnicode_GET_LENGTH(item);
|
|
||||||
if (itemlen != 0) {
|
|
||||||
if (use_memcpy) {
|
|
||||||
Py_MEMCPY(res_data,
|
Py_MEMCPY(res_data,
|
||||||
PyUnicode_DATA(item),
|
PyUnicode_DATA(item),
|
||||||
kind * itemlen);
|
kind * itemlen);
|
||||||
res_data += kind * itemlen;
|
res_data += kind * itemlen;
|
||||||
}
|
}
|
||||||
else {
|
}
|
||||||
|
assert(res_data == PyUnicode_1BYTE_DATA(res)
|
||||||
|
+ kind * PyUnicode_GET_LENGTH(res));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (i = 0, res_offset = 0; i < seqlen; ++i) {
|
||||||
|
Py_ssize_t itemlen;
|
||||||
|
item = items[i];
|
||||||
|
|
||||||
|
/* Copy item, and maybe the separator. */
|
||||||
|
if (i && seplen != 0) {
|
||||||
|
_PyUnicode_FastCopyCharacters(res, res_offset, sep, 0, seplen);
|
||||||
|
res_offset += seplen;
|
||||||
|
}
|
||||||
|
|
||||||
|
itemlen = PyUnicode_GET_LENGTH(item);
|
||||||
|
if (itemlen != 0) {
|
||||||
_PyUnicode_FastCopyCharacters(res, res_offset, item, 0, itemlen);
|
_PyUnicode_FastCopyCharacters(res, res_offset, item, 0, itemlen);
|
||||||
res_offset += itemlen;
|
res_offset += itemlen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (use_memcpy)
|
|
||||||
assert(res_data == PyUnicode_1BYTE_DATA(res)
|
|
||||||
+ kind * PyUnicode_GET_LENGTH(res));
|
|
||||||
else
|
|
||||||
assert(res_offset == PyUnicode_GET_LENGTH(res));
|
assert(res_offset == PyUnicode_GET_LENGTH(res));
|
||||||
|
}
|
||||||
|
|
||||||
Py_DECREF(fseq);
|
Py_DECREF(fseq);
|
||||||
Py_XDECREF(sep);
|
Py_XDECREF(sep);
|
||||||
|
|
Loading…
Reference in New Issue