| 1 | #ifndef Py_CPYTHON_LISTOBJECT_H |
| 2 | # error "this header file must not be included directly" |
| 3 | #endif |
| 4 | |
| 5 | typedef struct { |
| 6 | PyObject_VAR_HEAD |
| 7 | /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */ |
| 8 | PyObject **ob_item; |
| 9 | |
| 10 | /* ob_item contains space for 'allocated' elements. The number |
| 11 | * currently in use is ob_size. |
| 12 | * Invariants: |
| 13 | * 0 <= ob_size <= allocated |
| 14 | * len(list) == ob_size |
| 15 | * ob_item == NULL implies ob_size == allocated == 0 |
| 16 | * list.sort() temporarily sets allocated to -1 to detect mutations. |
| 17 | * |
| 18 | * Items must normally not be NULL, except during construction when |
| 19 | * the list is not yet visible outside the function that builds it. |
| 20 | */ |
| 21 | Py_ssize_t allocated; |
| 22 | } PyListObject; |
| 23 | |
| 24 | PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *); |
| 25 | PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out); |
| 26 | |
| 27 | /* Macro, trading safety for speed */ |
| 28 | |
| 29 | /* Cast argument to PyListObject* type. */ |
| 30 | #define _PyList_CAST(op) (assert(PyList_Check(op)), (PyListObject *)(op)) |
| 31 | |
| 32 | #define PyList_GET_ITEM(op, i) (_PyList_CAST(op)->ob_item[i]) |
| 33 | #define PyList_SET_ITEM(op, i, v) ((void)(_PyList_CAST(op)->ob_item[i] = (v))) |
| 34 | #define PyList_GET_SIZE(op) Py_SIZE(_PyList_CAST(op)) |
| 35 | |