features/pep418 / Include / listobject.h

The branch '2.4' does not exist.
Full commit
Guido van Rossum 853b736 
Guido van Rossum fc6fcd7 

Guido van Rossum 05360cd 
Guido van Rossum fc6fcd7 

Guido van Rossum 05360cd 
Guido van Rossum fc6fcd7 

Fred Drake 5709ddb 

Guido van Rossum a693438 
Fred Drake 5709ddb 
Neal Norwitz 018c430 
Fred Drake 5709ddb 
Tim Peters 052a43a 

Armin Rigo fa0526c 
Armin Rigo 60c60dc 

Tim Peters 052a43a 
Raymond Hettinge… bd0acc4 
Guido van Rossum 05360cd 
Guido van Rossum a693438 
Mark Hammond c1eb668 
Guido van Rossum fc6fcd7 
Tim Peters 09df325 
Tim Peters 167e7f9 
Guido van Rossum fc6fcd7 
Mark Hammond c1eb668 

Raymond Hettinge… 30e305b 
Guido van Rossum a693438 

Barry Warsaw 50abb08 
Guido van Rossum 9d03101 
Barry Warsaw 50abb08 
Guido van Rossum 519c250 

/* List object interface */

Another generally useful object type is an list of object pointers.
This is a mutable type: the list items can be changed, and items can be
added or removed.  Out-of-range indices or non-list objects are ignored.

*** WARNING *** PyList_SetItem does not increment the new item's reference
count, but does decrement the reference count of the item it replaces,
if not nil.  It does *decrement* the reference count if it is *not*
inserted in the list.  Similarly, PyList_GetItem does not increment the
returned item's reference count.

#ifdef __cplusplus
extern "C" {

typedef struct {
    /* Vector of pointers to list elements.  list[0] is ob_item[0], etc. */
    PyObject **ob_item;

    /* ob_item contains space for 'allocated' elements.  The number
     * currently in use is ob_size.
     * Invariants:
     *     0 <= ob_size <= allocated
     *     len(list) == ob_size
     *     ob_item == NULL implies ob_size == allocated == 0
     * list.sort() temporarily sets allocated to -1 to detect mutations.
     * Items must normally not be NULL, except during construction when
     * the list is not yet visible outside the function that builds it.
    int allocated;
} PyListObject;

PyAPI_DATA(PyTypeObject) PyList_Type;

#define PyList_Check(op) PyObject_TypeCheck(op, &PyList_Type)
#define PyList_CheckExact(op) ((op)->ob_type == &PyList_Type)

PyAPI_FUNC(PyObject *) PyList_New(int size);
PyAPI_FUNC(int) PyList_Size(PyObject *);
PyAPI_FUNC(PyObject *) PyList_GetItem(PyObject *, int);
PyAPI_FUNC(int) PyList_SetItem(PyObject *, int, PyObject *);
PyAPI_FUNC(int) PyList_Insert(PyObject *, int, PyObject *);
PyAPI_FUNC(int) PyList_Append(PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) PyList_GetSlice(PyObject *, int, int);
PyAPI_FUNC(int) PyList_SetSlice(PyObject *, int, int, PyObject *);
PyAPI_FUNC(int) PyList_Sort(PyObject *);
PyAPI_FUNC(int) PyList_Reverse(PyObject *);
PyAPI_FUNC(PyObject *) PyList_AsTuple(PyObject *);
PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *);

/* Macro, trading safety for speed */
#define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i])
#define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item[i] = (v))
#define PyList_GET_SIZE(op)    (((PyListObject *)(op))->ob_size)

#ifdef __cplusplus
#endif /* !Py_LISTOBJECT_H */