diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2015-10-14 07:56:53 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2015-10-14 07:56:53 (GMT) |
commit | 772b2b09f279fdcb01bbd703735d35bd02dd8ec1 (patch) | |
tree | 06c585be7db2c586bb8e2a09c2e74a8b2188e841 /Include | |
parent | 661aaccf9def380540cc1d440761159a414094d1 (diff) | |
download | cpython-772b2b09f279fdcb01bbd703735d35bd02dd8ec1.zip cpython-772b2b09f279fdcb01bbd703735d35bd02dd8ec1.tar.gz cpython-772b2b09f279fdcb01bbd703735d35bd02dd8ec1.tar.bz2 |
Optimize bytearray % args
Issue #25399: Don't create temporary bytes objects: modify _PyBytes_Format() to
create work directly on bytearray objects.
* Rename _PyBytes_Format() to _PyBytes_FormatEx() just in case if something
outside CPython uses it
* _PyBytes_FormatEx() now uses (char*, Py_ssize_t) for the input string, so
bytearray_format() doesn't need tot create a temporary input bytes object
* Add use_bytearray parameter to _PyBytes_FormatEx() which is passed to
_PyBytesWriter, to create a bytearray buffer instead of a bytes buffer
Most formatting operations are now between 2.5 and 5 times faster.
Diffstat (limited to 'Include')
-rw-r--r-- | Include/bytesobject.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/Include/bytesobject.h b/Include/bytesobject.h index fbb6322..b5b37ef 100644 --- a/Include/bytesobject.h +++ b/Include/bytesobject.h @@ -62,7 +62,11 @@ PyAPI_FUNC(void) PyBytes_Concat(PyObject **, PyObject *); PyAPI_FUNC(void) PyBytes_ConcatAndDel(PyObject **, PyObject *); #ifndef Py_LIMITED_API PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t); -PyAPI_FUNC(PyObject *) _PyBytes_Format(PyObject *, PyObject *); +PyAPI_FUNC(PyObject*) _PyBytes_FormatEx( + const char *format, + Py_ssize_t format_len, + PyObject *args, + int use_bytearray); #endif PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t, const char *, Py_ssize_t, |