File: /Users/paulross/dev/Python-3.6.2/Include/bytearrayobject.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: /* ByteArray object interface */
       2: 
       3: #ifndef Py_BYTEARRAYOBJECT_H
       4: #define Py_BYTEARRAYOBJECT_H
       5: #ifdef __cplusplus
       6: extern "C" {
       7: #endif
       8: 
       9: #include <stdarg.h>
      10: 
      11: /* Type PyByteArrayObject represents a mutable array of bytes.
      12:  * The Python API is that of a sequence;
      13:  * the bytes are mapped to ints in [0, 256).
      14:  * Bytes are not characters; they may be used to encode characters.
      15:  * The only way to go between bytes and str/unicode is via encoding
      16:  * and decoding.
      17:  * For the convenience of C programmers, the bytes type is considered
      18:  * to contain a char pointer, not an unsigned char pointer.
      19:  */
      20: 
      21: /* Object layout */
      22: #ifndef Py_LIMITED_API
      23: typedef struct {
      24:     PyObject_VAR_HEAD
      25:     Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */
      26:     char *ob_bytes;      /* Physical backing buffer */
      27:     char *ob_start;      /* Logical start inside ob_bytes */
      28:     /* XXX(nnorwitz): should ob_exports be Py_ssize_t? */
      29:     int ob_exports;      /* How many buffer exports */
      30: } PyByteArrayObject;
      31: #endif
      32: 
      33: /* Type object */
      34: PyAPI_DATA(PyTypeObject) PyByteArray_Type;
      35: PyAPI_DATA(PyTypeObject) PyByteArrayIter_Type;
      36: 
      37: /* Type check macros */
      38: #define PyByteArray_Check(self) PyObject_TypeCheck(self, &PyByteArray_Type)
      39: #define PyByteArray_CheckExact(self) (Py_TYPE(self) == &PyByteArray_Type)
      40: 
      41: /* Direct API functions */
      42: PyAPI_FUNC(PyObject *) PyByteArray_FromObject(PyObject *);
      43: PyAPI_FUNC(PyObject *) PyByteArray_Concat(PyObject *, PyObject *);
      44: PyAPI_FUNC(PyObject *) PyByteArray_FromStringAndSize(const char *, Py_ssize_t);
      45: PyAPI_FUNC(Py_ssize_t) PyByteArray_Size(PyObject *);
      46: PyAPI_FUNC(char *) PyByteArray_AsString(PyObject *);
      47: PyAPI_FUNC(int) PyByteArray_Resize(PyObject *, Py_ssize_t);
      48: 
      49: /* Macros, trading safety for speed */
      50: #ifndef Py_LIMITED_API
      51: #define PyByteArray_AS_STRING(self) \
      52:     (assert(PyByteArray_Check(self)), \
      53:      Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string)
      54: #define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self))
      55: 
      56: PyAPI_DATA(char) _PyByteArray_empty_string[];
      57: #endif
      58: 
      59: #ifdef __cplusplus
      60: }
      61: #endif
      62: #endif /* !Py_BYTEARRAYOBJECT_H */
      63: