From: Antoine Pitrou Date: Sat, 20 Oct 2012 21:08:34 +0000 (+0200) Subject: Issue #12805: Make bytes.join and bytearray.join faster when the separator is empty. X-Git-Tag: v3.4.0a1~2210 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6f7b0da6bcbcb5a873d8315e49db4096895fc2eb;p=python Issue #12805: Make bytes.join and bytearray.join faster when the separator is empty. Patch by Serhiy Storchaka. --- diff --git a/Misc/NEWS b/Misc/NEWS index c105585675..e6a5f24b76 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ What's New in Python 3.4.0 Alpha 1? Core and Builtins ----------------- +- Issue #12805: Make bytes.join and bytearray.join faster when the separator + is empty. Patch by Serhiy Storchaka. + - Issue #6074: Ensure cached bytecode files can always be updated by the user that created them, even when the source file is read-only. diff --git a/Objects/stringlib/join.h b/Objects/stringlib/join.h index 21753cb504..d1d6e532c5 100644 --- a/Objects/stringlib/join.h +++ b/Objects/stringlib/join.h @@ -94,6 +94,16 @@ STRINGLIB(bytes_join)(PyObject *sep, PyObject *iterable) /* Catenate everything. */ p = STRINGLIB_STR(res); + if (!seplen) { + /* fast path */ + for (i = 0; i < nbufs; i++) { + Py_ssize_t n = buffers[i].len; + char *q = buffers[i].buf; + Py_MEMCPY(p, q, n); + p += n; + } + goto done; + } for (i = 0; i < nbufs; i++) { Py_ssize_t n; char *q;