1+ /* List object interface
12
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.
36
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.
1412*/
1513
1614#ifndef Py_LISTOBJECT_H
@@ -19,27 +17,6 @@ returned item's reference count.
1917extern "C" {
2018#endif
2119
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-
4320PyAPI_DATA (PyTypeObject ) PyList_Type ;
4421PyAPI_DATA (PyTypeObject ) PyListIter_Type ;
4522PyAPI_DATA (PyTypeObject ) PyListRevIter_Type ;
@@ -50,28 +27,23 @@ PyAPI_DATA(PyTypeObject) PyListRevIter_Type;
5027
5128PyAPI_FUNC (PyObject * ) PyList_New (Py_ssize_t size );
5229PyAPI_FUNC (Py_ssize_t ) PyList_Size (PyObject * );
30+
5331PyAPI_FUNC (PyObject * ) PyList_GetItem (PyObject * , Py_ssize_t );
5432PyAPI_FUNC (int ) PyList_SetItem (PyObject * , Py_ssize_t , PyObject * );
5533PyAPI_FUNC (int ) PyList_Insert (PyObject * , Py_ssize_t , PyObject * );
5634PyAPI_FUNC (int ) PyList_Append (PyObject * , PyObject * );
35+
5736PyAPI_FUNC (PyObject * ) PyList_GetSlice (PyObject * , Py_ssize_t , Py_ssize_t );
5837PyAPI_FUNC (int ) PyList_SetSlice (PyObject * , Py_ssize_t , Py_ssize_t , PyObject * );
38+
5939PyAPI_FUNC (int ) PyList_Sort (PyObject * );
6040PyAPI_FUNC (int ) PyList_Reverse (PyObject * );
6141PyAPI_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
6842
69- /* Macro, trading safety for speed */
7043#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
7547#endif
7648
7749#ifdef __cplusplus
0 commit comments