/src/cpython-install/include/python3.15/cpython/listobject.h
Line | Count | Source (jump to first uncovered line) |
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 | | /* Cast argument to PyListObject* type. */ |
25 | | #define _PyList_CAST(op) \ |
26 | | (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op))) |
27 | | |
28 | | // Macros and static inline functions, trading safety for speed |
29 | | |
30 | 0 | static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) { |
31 | 0 | PyListObject *list = _PyList_CAST(op); |
32 | 0 | #ifdef Py_GIL_DISABLED |
33 | 0 | return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size)); |
34 | 0 | #else |
35 | 0 | return Py_SIZE(list); |
36 | 0 | #endif |
37 | 0 | } |
38 | | #define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op)) |
39 | | |
40 | | #define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)]) |
41 | | |
42 | | static inline void |
43 | 0 | PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) { |
44 | 0 | PyListObject *list = _PyList_CAST(op); |
45 | 0 | assert(0 <= index); |
46 | 0 | assert(index < list->allocated); |
47 | 0 | list->ob_item[index] = value; |
48 | 0 | } |
49 | | #define PyList_SET_ITEM(op, index, value) \ |
50 | | PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value)) |
51 | | |
52 | | PyAPI_FUNC(int) PyList_Extend(PyObject *self, PyObject *iterable); |
53 | | PyAPI_FUNC(int) PyList_Clear(PyObject *self); |