| /* Object layout */ | |
| typedef struct { | |
| PyObject_VAR_HEAD | |
| Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */ | |
| char *ob_bytes; /* Physical backing buffer */ | |
| char *ob_start; /* Logical start inside ob_bytes */ | |
| Py_ssize_t ob_exports; /* How many buffer exports */ | |
| } PyByteArrayObject; | |
| PyAPI_DATA(char) _PyByteArray_empty_string[]; | |
| /* Macros and static inline functions, trading safety for speed */ | |
| static inline char* PyByteArray_AS_STRING(PyObject *op) | |
| { | |
| PyByteArrayObject *self = _PyByteArray_CAST(op); | |
| if (Py_SIZE(self)) { | |
| return self->ob_start; | |
| } | |
| return _PyByteArray_empty_string; | |
| } | |
| static inline Py_ssize_t PyByteArray_GET_SIZE(PyObject *op) { | |
| PyByteArrayObject *self = _PyByteArray_CAST(op); | |
| return Py_SIZE(self); | |
| } | |