diff options
Diffstat (limited to 'Include/bytesobject.h')
| -rw-r--r-- | Include/bytesobject.h | 90 | 
1 files changed, 89 insertions, 1 deletions
diff --git a/Include/bytesobject.h b/Include/bytesobject.h index 6c1e0c3aac..4578069df5 100644 --- a/Include/bytesobject.h +++ b/Include/bytesobject.h @@ -62,7 +62,14 @@ 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); +PyAPI_FUNC(PyObject*) _PyBytes_FromHex( +    PyObject *string, +    int use_bytearray);  #endif  PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t,  						   const char *, Py_ssize_t, @@ -123,6 +130,87 @@ PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer,  #define F_ALT	(1<<3)  #define F_ZERO	(1<<4) +#ifndef Py_LIMITED_API +/* The _PyBytesWriter structure is big: it contains an embeded "stack buffer". +   A _PyBytesWriter variable must be declared at the end of variables in a +   function to optimize the memory allocation on the stack. */ +typedef struct { +    /* bytes, bytearray or NULL (when the small buffer is used) */ +    PyObject *buffer; + +    /* Number of allocated size. */ +    Py_ssize_t allocated; + +    /* Minimum number of allocated bytes, +       incremented by _PyBytesWriter_Prepare() */ +    Py_ssize_t min_size; + +    /* If non-zero, use a bytearray instead of a bytes object for buffer. */ +    int use_bytearray; + +    /* If non-zero, overallocate the buffer (default: 0). +       This flag must be zero if use_bytearray is non-zero. */ +    int overallocate; + +    /* Stack buffer */ +    int use_small_buffer; +    char small_buffer[512]; +} _PyBytesWriter; + +/* Initialize a bytes writer + +   By default, the overallocation is disabled. Set the overallocate attribute +   to control the allocation of the buffer. */ +PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer); + +/* Get the buffer content and reset the writer. +   Return a bytes object, or a bytearray object if use_bytearray is non-zero. +   Raise an exception and return NULL on error. */ +PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer, +    void *str); + +/* Deallocate memory of a writer (clear its internal buffer). */ +PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer); + +/* Allocate the buffer to write size bytes. +   Return the pointer to the beginning of buffer data. +   Raise an exception and return NULL on error. */ +PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer, +    Py_ssize_t size); + +/* Ensure that the buffer is large enough to write *size* bytes. +   Add size to the writer minimum size (min_size attribute). + +   str is the current pointer inside the buffer. +   Return the updated current pointer inside the buffer. +   Raise an exception and return NULL on error. */ +PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer, +    void *str, +    Py_ssize_t size); + +/* Resize the buffer to make it larger. +   The new buffer may be larger than size bytes because of overallocation. +   Return the updated current pointer inside the buffer. +   Raise an exception and return NULL on error. + +   Note: size must be greater than the number of allocated bytes in the writer. + +   This function doesn't use the writer minimum size (min_size attribute). + +   See also _PyBytesWriter_Prepare(). +   */ +PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer, +    void *str, +    Py_ssize_t size); + +/* Write bytes. +   Raise an exception and return NULL on error. */ +PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer, +    void *str, +    const void *bytes, +    Py_ssize_t size); +#endif   /* Py_LIMITED_API */ +  #ifdef __cplusplus  }  #endif  | 
