listobject.h 1.82 KB
Newer Older
1

Guido van Rossum's avatar
Guido van Rossum committed
2 3 4 5 6 7 8
/* 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.

9
*** WARNING *** PyList_SetItem does not increment the new item's reference
Guido van Rossum's avatar
Guido van Rossum committed
10 11
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*
12
inserted in the list.  Similarly, PyList_GetItem does not increment the
Guido van Rossum's avatar
Guido van Rossum committed
13 14 15
returned item's reference count.
*/

16 17 18 19 20 21
#ifndef Py_LISTOBJECT_H
#define Py_LISTOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif

Guido van Rossum's avatar
Guido van Rossum committed
22
typedef struct {
23 24
    PyObject_VAR_HEAD
    PyObject **ob_item;
25
} PyListObject;
Guido van Rossum's avatar
Guido van Rossum committed
26

27
extern DL_IMPORT(PyTypeObject) PyList_Type;
Guido van Rossum's avatar
Guido van Rossum committed
28

29
#define PyList_Check(op) PyObject_TypeCheck(op, &PyList_Type)
30
#define PyList_CheckExact(op) ((op)->ob_type == &PyList_Type)
Guido van Rossum's avatar
Guido van Rossum committed
31

32 33 34 35 36 37 38 39 40 41 42
extern DL_IMPORT(PyObject *) PyList_New(int size);
extern DL_IMPORT(int) PyList_Size(PyObject *);
extern DL_IMPORT(PyObject *) PyList_GetItem(PyObject *, int);
extern DL_IMPORT(int) PyList_SetItem(PyObject *, int, PyObject *);
extern DL_IMPORT(int) PyList_Insert(PyObject *, int, PyObject *);
extern DL_IMPORT(int) PyList_Append(PyObject *, PyObject *);
extern DL_IMPORT(PyObject *) PyList_GetSlice(PyObject *, int, int);
extern DL_IMPORT(int) PyList_SetSlice(PyObject *, int, int, PyObject *);
extern DL_IMPORT(int) PyList_Sort(PyObject *);
extern DL_IMPORT(int) PyList_Reverse(PyObject *);
extern DL_IMPORT(PyObject *) PyList_AsTuple(PyObject *);
Guido van Rossum's avatar
Guido van Rossum committed
43 44

/* Macro, trading safety for speed */
45
#define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i])
46
#define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item[i] = (v))
47
#define PyList_GET_SIZE(op)    (((PyListObject *)(op))->ob_size)
48 49 50 51 52

#ifdef __cplusplus
}
#endif
#endif /* !Py_LISTOBJECT_H */