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: