(root)/
Python-3.12.0/
Include/
cpython/
listobject.h
       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  /* Cast argument to PyListObject* type. */
      28  #define _PyList_CAST(op) \
      29      (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
      30  
      31  // Macros and static inline functions, trading safety for speed
      32  
      33  static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
      34      PyListObject *list = _PyList_CAST(op);
      35      return Py_SIZE(list);
      36  }
      37  #define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
      38  
      39  #define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
      40  
      41  static inline void
      42  PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
      43      PyListObject *list = _PyList_CAST(op);
      44      list->ob_item[index] = value;
      45  }
      46  #define PyList_SET_ITEM(op, index, value) \
      47      PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))