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 | |