LCOV - code coverage report
Current view: top level - usr/include/python3.11/cpython - bytesobject.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 2 100.0 %
Date: 2024-12-20 20:06:10 Functions: 1 1 100.0 %

          Line data    Source code
       1             : #ifndef Py_CPYTHON_BYTESOBJECT_H
       2             : #  error "this header file must not be included directly"
       3             : #endif
       4             : 
       5             : typedef struct {
       6             :     PyObject_VAR_HEAD
       7             :     Py_DEPRECATED(3.11) Py_hash_t ob_shash;
       8             :     char ob_sval[1];
       9             : 
      10             :     /* Invariants:
      11             :      *     ob_sval contains space for 'ob_size+1' elements.
      12             :      *     ob_sval[ob_size] == 0.
      13             :      *     ob_shash is the hash of the byte string or -1 if not computed yet.
      14             :      */
      15             : } PyBytesObject;
      16             : 
      17             : PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t);
      18             : PyAPI_FUNC(PyObject*) _PyBytes_FormatEx(
      19             :     const char *format,
      20             :     Py_ssize_t format_len,
      21             :     PyObject *args,
      22             :     int use_bytearray);
      23             : PyAPI_FUNC(PyObject*) _PyBytes_FromHex(
      24             :     PyObject *string,
      25             :     int use_bytearray);
      26             : 
      27             : /* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */
      28             : PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t,
      29             :                                              const char *, const char **);
      30             : 
      31             : /* Macros and static inline functions, trading safety for speed */
      32             : #define _PyBytes_CAST(op) \
      33             :     (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
      34             : 
      35         137 : static inline char* PyBytes_AS_STRING(PyObject *op)
      36             : {
      37         137 :     return _PyBytes_CAST(op)->ob_sval;
      38             : }
      39             : #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
      40             : #  define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
      41             : #endif
      42             : 
      43             : static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
      44             :     PyBytesObject *self = _PyBytes_CAST(op);
      45             :     return Py_SIZE(self);
      46             : }
      47             : #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
      48             : #  define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
      49             : #endif
      50             : 
      51             : /* _PyBytes_Join(sep, x) is like sep.join(x).  sep must be PyBytesObject*,
      52             :    x must be an iterable object. */
      53             : PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x);
      54             : 
      55             : 
      56             : /* The _PyBytesWriter structure is big: it contains an embedded "stack buffer".
      57             :    A _PyBytesWriter variable must be declared at the end of variables in a
      58             :    function to optimize the memory allocation on the stack. */
      59             : typedef struct {
      60             :     /* bytes, bytearray or NULL (when the small buffer is used) */
      61             :     PyObject *buffer;
      62             : 
      63             :     /* Number of allocated size. */
      64             :     Py_ssize_t allocated;
      65             : 
      66             :     /* Minimum number of allocated bytes,
      67             :        incremented by _PyBytesWriter_Prepare() */
      68             :     Py_ssize_t min_size;
      69             : 
      70             :     /* If non-zero, use a bytearray instead of a bytes object for buffer. */
      71             :     int use_bytearray;
      72             : 
      73             :     /* If non-zero, overallocate the buffer (default: 0).
      74             :        This flag must be zero if use_bytearray is non-zero. */
      75             :     int overallocate;
      76             : 
      77             :     /* Stack buffer */
      78             :     int use_small_buffer;
      79             :     char small_buffer[512];
      80             : } _PyBytesWriter;
      81             : 
      82             : /* Initialize a bytes writer
      83             : 
      84             :    By default, the overallocation is disabled. Set the overallocate attribute
      85             :    to control the allocation of the buffer. */
      86             : PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer);
      87             : 
      88             : /* Get the buffer content and reset the writer.
      89             :    Return a bytes object, or a bytearray object if use_bytearray is non-zero.
      90             :    Raise an exception and return NULL on error. */
      91             : PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer,
      92             :     void *str);
      93             : 
      94             : /* Deallocate memory of a writer (clear its internal buffer). */
      95             : PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer);
      96             : 
      97             : /* Allocate the buffer to write size bytes.
      98             :    Return the pointer to the beginning of buffer data.
      99             :    Raise an exception and return NULL on error. */
     100             : PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer,
     101             :     Py_ssize_t size);
     102             : 
     103             : /* Ensure that the buffer is large enough to write *size* bytes.
     104             :    Add size to the writer minimum size (min_size attribute).
     105             : 
     106             :    str is the current pointer inside the buffer.
     107             :    Return the updated current pointer inside the buffer.
     108             :    Raise an exception and return NULL on error. */
     109             : PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer,
     110             :     void *str,
     111             :     Py_ssize_t size);
     112             : 
     113             : /* Resize the buffer to make it larger.
     114             :    The new buffer may be larger than size bytes because of overallocation.
     115             :    Return the updated current pointer inside the buffer.
     116             :    Raise an exception and return NULL on error.
     117             : 
     118             :    Note: size must be greater than the number of allocated bytes in the writer.
     119             : 
     120             :    This function doesn't use the writer minimum size (min_size attribute).
     121             : 
     122             :    See also _PyBytesWriter_Prepare().
     123             :    */
     124             : PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer,
     125             :     void *str,
     126             :     Py_ssize_t size);
     127             : 
     128             : /* Write bytes.
     129             :    Raise an exception and return NULL on error. */
     130             : PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer,
     131             :     void *str,
     132             :     const void *bytes,
     133             :     Py_ssize_t size);

Generated by: LCOV version 1.14