1
+ /* List object interface
1
2
2
- /* List object interface */
3
+ Another generally useful object type is a list of object pointers.
4
+ This is a mutable type: the list items can be changed, and items can be
5
+ added or removed. Out-of-range indices or non-list objects are ignored.
3
6
4
- /*
5
- Another generally useful object type is a list of object pointers.
6
- This is a mutable type: the list items can be changed, and items can be
7
- added or removed. Out-of-range indices or non-list objects are ignored.
8
-
9
- *** WARNING *** PyList_SetItem does not increment the new item's reference
10
- count, but does decrement the reference count of the item it replaces,
11
- if not nil. It does *decrement* the reference count if it is *not*
12
- inserted in the list. Similarly, PyList_GetItem does not increment the
13
- returned item's reference count.
7
+ WARNING: PyList_SetItem does not increment the new item's reference count,
8
+ but does decrement the reference count of the item it replaces, if not nil.
9
+ It does *decrement* the reference count if it is *not* inserted in the list.
10
+ Similarly, PyList_GetItem does not increment the returned item's reference
11
+ count.
14
12
*/
15
13
16
14
#ifndef Py_LISTOBJECT_H
@@ -19,27 +17,6 @@ returned item's reference count.
19
17
extern "C" {
20
18
#endif
21
19
22
- #ifndef Py_LIMITED_API
23
- typedef struct {
24
- PyObject_VAR_HEAD
25
- /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */
26
- PyObject * * ob_item ;
27
-
28
- /* ob_item contains space for 'allocated' elements. The number
29
- * currently in use is ob_size.
30
- * Invariants:
31
- * 0 <= ob_size <= allocated
32
- * len(list) == ob_size
33
- * ob_item == NULL implies ob_size == allocated == 0
34
- * list.sort() temporarily sets allocated to -1 to detect mutations.
35
- *
36
- * Items must normally not be NULL, except during construction when
37
- * the list is not yet visible outside the function that builds it.
38
- */
39
- Py_ssize_t allocated ;
40
- } PyListObject ;
41
- #endif
42
-
43
20
PyAPI_DATA (PyTypeObject ) PyList_Type ;
44
21
PyAPI_DATA (PyTypeObject ) PyListIter_Type ;
45
22
PyAPI_DATA (PyTypeObject ) PyListRevIter_Type ;
@@ -50,28 +27,23 @@ PyAPI_DATA(PyTypeObject) PyListRevIter_Type;
50
27
51
28
PyAPI_FUNC (PyObject * ) PyList_New (Py_ssize_t size );
52
29
PyAPI_FUNC (Py_ssize_t ) PyList_Size (PyObject * );
30
+
53
31
PyAPI_FUNC (PyObject * ) PyList_GetItem (PyObject * , Py_ssize_t );
54
32
PyAPI_FUNC (int ) PyList_SetItem (PyObject * , Py_ssize_t , PyObject * );
55
33
PyAPI_FUNC (int ) PyList_Insert (PyObject * , Py_ssize_t , PyObject * );
56
34
PyAPI_FUNC (int ) PyList_Append (PyObject * , PyObject * );
35
+
57
36
PyAPI_FUNC (PyObject * ) PyList_GetSlice (PyObject * , Py_ssize_t , Py_ssize_t );
58
37
PyAPI_FUNC (int ) PyList_SetSlice (PyObject * , Py_ssize_t , Py_ssize_t , PyObject * );
38
+
59
39
PyAPI_FUNC (int ) PyList_Sort (PyObject * );
60
40
PyAPI_FUNC (int ) PyList_Reverse (PyObject * );
61
41
PyAPI_FUNC (PyObject * ) PyList_AsTuple (PyObject * );
62
- #ifndef Py_LIMITED_API
63
- PyAPI_FUNC (PyObject * ) _PyList_Extend (PyListObject * , PyObject * );
64
-
65
- PyAPI_FUNC (int ) PyList_ClearFreeList (void );
66
- PyAPI_FUNC (void ) _PyList_DebugMallocStats (FILE * out );
67
- #endif
68
42
69
- /* Macro, trading safety for speed */
70
43
#ifndef Py_LIMITED_API
71
- #define PyList_GET_ITEM (op , i ) (((PyListObject *)(op))->ob_item[i])
72
- #define PyList_SET_ITEM (op , i , v ) (((PyListObject *)(op))->ob_item[i] = (v))
73
- #define PyList_GET_SIZE (op ) (assert(PyList_Check(op)),Py_SIZE(op))
74
- #define _PyList_ITEMS (op ) (((PyListObject *)(op))->ob_item)
44
+ # define Py_CPYTHON_LISTOBJECT_H
45
+ # include "cpython/listobject.h"
46
+ # undef Py_CPYTHON_LISTOBJECT_H
75
47
#endif
76
48
77
49
#ifdef __cplusplus
0 commit comments