Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
listobject.h54 linesDownload Raw Back to cpython
1#ifndef Py_CPYTHON_LISTOBJECT_H2#  error "this header file must not be included directly"3#endif4 5typedef struct {6    PyObject_VAR_HEAD7    /* 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 number11     * currently in use is ob_size.12     * Invariants:13     *     0 <= ob_size <= allocated14     *     len(list) == ob_size15     *     ob_item == NULL implies ob_size == allocated == 016     * list.sort() temporarily sets allocated to -1 to detect mutations.17     *18     * Items must normally not be NULL, except during construction when19     * 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 speed29 30static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {31    PyListObject *list = _PyList_CAST(op);32#ifdef Py_GIL_DISABLED33    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));34#else35    return Py_SIZE(list);36#endif37}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 42static inline void43PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {44    PyListObject *list = _PyList_CAST(op);45    assert(0 <= index);46    assert(index < list->allocated);47    list->ob_item[index] = value;48}49#define PyList_SET_ITEM(op, index, value) \50    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))51 52PyAPI_FUNC(int) PyList_Extend(PyObject *self, PyObject *iterable);53PyAPI_FUNC(int) PyList_Clear(PyObject *self);54