Skip to content

Commit be56685

Browse files
committed
Add high-level API example
1 parent ede2776 commit be56685

4 files changed

Lines changed: 31 additions & 6 deletions

File tree

Include/cpython/bytesobject.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ PyAPI_FUNC(PyObject*) PyBytesWriter_FinishWithSize(
5757
Py_ssize_t size);
5858
PyAPI_FUNC(PyObject*) PyBytesWriter_FinishWithPointer(
5959
PyBytesWriter *writer,
60-
void *data);
60+
void *buf);
6161

6262
PyAPI_FUNC(void*) PyBytesWriter_GetData(
6363
PyBytesWriter *writer);
@@ -82,4 +82,4 @@ PyAPI_FUNC(int) PyBytesWriter_Grow(
8282
PyAPI_FUNC(void*) PyBytesWriter_GrowAndUpdatePointer(
8383
PyBytesWriter *writer,
8484
Py_ssize_t size,
85-
void *data);
85+
void *buf);

Lib/test/test_capi/test_bytes.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,9 @@ def test_abc(self):
370370
def test_resize(self):
371371
self.assertEqual(_testcapi.byteswriter_resize(), b'Hello World')
372372

373+
def test_highlevel(self):
374+
self.assertEqual(_testcapi.byteswriter_highlevel(), b'Hello World!')
375+
373376

374377
class ByteArrayWriterTest(BytesWriterTest):
375378
result_type = bytearray

Modules/_testcapi/bytes.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,11 +331,33 @@ byteswriter_resize(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args))
331331
}
332332

333333

334+
static PyObject *
335+
byteswriter_highlevel(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args))
336+
{
337+
PyBytesWriter *writer = PyBytesWriter_Create(0);
338+
if (writer == NULL) {
339+
goto error;
340+
}
341+
if (PyBytesWriter_WriteBytes(writer, "Hello", -1) < 0) {
342+
goto error;
343+
}
344+
if (PyBytesWriter_Format(writer, " %s!", "World") < 0) {
345+
goto error;
346+
}
347+
return PyBytesWriter_Finish(writer);
348+
349+
error:
350+
PyBytesWriter_Discard(writer);
351+
return NULL;
352+
}
353+
354+
334355
static PyMethodDef test_methods[] = {
335356
{"bytes_resize", bytes_resize, METH_VARARGS},
336357
{"bytes_join", bytes_join, METH_VARARGS},
337358
{"byteswriter_abc", byteswriter_abc, METH_NOARGS},
338359
{"byteswriter_resize", byteswriter_resize, METH_NOARGS},
360+
{"byteswriter_highlevel", byteswriter_highlevel, METH_NOARGS},
339361
{NULL},
340362
};
341363

Objects/bytesobject.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3920,9 +3920,9 @@ PyBytesWriter_Finish(PyBytesWriter *writer)
39203920

39213921

39223922
PyObject*
3923-
PyBytesWriter_FinishWithPointer(PyBytesWriter *writer, void *data)
3923+
PyBytesWriter_FinishWithPointer(PyBytesWriter *writer, void *buf)
39243924
{
3925-
Py_ssize_t size = (char*)data - byteswriter_data(writer);
3925+
Py_ssize_t size = (char*)buf - byteswriter_data(writer);
39263926
if (size < 0 || size > byteswriter_allocated(writer)) {
39273927
PyBytesWriter_Discard(writer);
39283928
PyErr_SetString(PyExc_ValueError, "invalid end pointer");
@@ -4005,9 +4005,9 @@ PyBytesWriter_Grow(PyBytesWriter *writer, Py_ssize_t size)
40054005

40064006
void*
40074007
PyBytesWriter_GrowAndUpdatePointer(PyBytesWriter *writer, Py_ssize_t size,
4008-
void *data)
4008+
void *buf)
40094009
{
4010-
Py_ssize_t pos = (char*)data - byteswriter_data(writer);
4010+
Py_ssize_t pos = (char*)buf - byteswriter_data(writer);
40114011
if (PyBytesWriter_Grow(writer, size) < 0) {
40124012
return NULL;
40134013
}

0 commit comments

Comments
 (0)