mirror of
https://github.com/python/cpython.git
synced 2025-11-24 12:20:42 +00:00
gh-129813, PEP 782: Optimize byteswriter_resize() (#139101)
There is no need to copy the small_buffer in PyBytesWriter_Create().
This commit is contained in:
parent
d1904b91cb
commit
9f7bbafffe
1 changed files with 15 additions and 11 deletions
|
|
@ -3801,7 +3801,7 @@ byteswriter_allocated(PyBytesWriter *writer)
|
|||
|
||||
|
||||
static inline int
|
||||
byteswriter_resize(PyBytesWriter *writer, Py_ssize_t size, int overallocate)
|
||||
byteswriter_resize(PyBytesWriter *writer, Py_ssize_t size, int resize)
|
||||
{
|
||||
assert(size >= 0);
|
||||
|
||||
|
|
@ -3810,7 +3810,7 @@ byteswriter_resize(PyBytesWriter *writer, Py_ssize_t size, int overallocate)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (overallocate & writer->overallocate) {
|
||||
if (resize & writer->overallocate) {
|
||||
if (size <= (PY_SSIZE_T_MAX - size / OVERALLOCATE_FACTOR)) {
|
||||
size += size / OVERALLOCATE_FACTOR;
|
||||
}
|
||||
|
|
@ -3834,25 +3834,29 @@ byteswriter_resize(PyBytesWriter *writer, Py_ssize_t size, int overallocate)
|
|||
if (writer->obj == NULL) {
|
||||
return -1;
|
||||
}
|
||||
assert((size_t)size > sizeof(writer->small_buffer));
|
||||
memcpy(PyByteArray_AS_STRING(writer->obj),
|
||||
writer->small_buffer,
|
||||
sizeof(writer->small_buffer));
|
||||
if (resize) {
|
||||
assert((size_t)size > sizeof(writer->small_buffer));
|
||||
memcpy(PyByteArray_AS_STRING(writer->obj),
|
||||
writer->small_buffer,
|
||||
sizeof(writer->small_buffer));
|
||||
}
|
||||
}
|
||||
else {
|
||||
writer->obj = PyBytes_FromStringAndSize(NULL, size);
|
||||
if (writer->obj == NULL) {
|
||||
return -1;
|
||||
}
|
||||
assert((size_t)size > sizeof(writer->small_buffer));
|
||||
memcpy(PyBytes_AS_STRING(writer->obj),
|
||||
writer->small_buffer,
|
||||
sizeof(writer->small_buffer));
|
||||
if (resize) {
|
||||
assert((size_t)size > sizeof(writer->small_buffer));
|
||||
memcpy(PyBytes_AS_STRING(writer->obj),
|
||||
writer->small_buffer,
|
||||
sizeof(writer->small_buffer));
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef Py_DEBUG
|
||||
Py_ssize_t allocated = byteswriter_allocated(writer);
|
||||
if (overallocate && allocated > old_allocated) {
|
||||
if (resize && allocated > old_allocated) {
|
||||
memset(byteswriter_data(writer) + old_allocated, 0xff,
|
||||
allocated - old_allocated);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue