blob: 0fea447877e4862db62427962a547a7e59b94950 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00002Copyright (c) 2000, BeOpen.com.
3Copyright (c) 1995-2000, Corporation for National Research Initiatives.
4Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
5All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00006
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007See the file "Misc/COPYRIGHT" for information on usage and
8redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009******************************************************************/
10
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000011/* List object interface */
12
13/*
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000014Another generally useful object type is an list of object pointers.
15This is a mutable type: the list items can be changed, and items can be
16added or removed. Out-of-range indices or non-list objects are ignored.
17
Guido van Rossumcaa63801995-01-12 11:45:45 +000018*** WARNING *** PyList_SetItem does not increment the new item's reference
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000019count, but does decrement the reference count of the item it replaces,
20if not nil. It does *decrement* the reference count if it is *not*
Guido van Rossumcaa63801995-01-12 11:45:45 +000021inserted in the list. Similarly, PyList_GetItem does not increment the
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000022returned item's reference count.
23*/
24
Fred Drakeea9cb5a2000-07-09 00:20:36 +000025#ifndef Py_LISTOBJECT_H
26#define Py_LISTOBJECT_H
27#ifdef __cplusplus
28extern "C" {
29#endif
30
Guido van Rossum3f5da241990-12-20 15:06:42 +000031typedef struct {
Fred Drakeea9cb5a2000-07-09 00:20:36 +000032 PyObject_VAR_HEAD
33 PyObject **ob_item;
Guido van Rossumcaa63801995-01-12 11:45:45 +000034} PyListObject;
Guido van Rossum3f5da241990-12-20 15:06:42 +000035
Guido van Rossum051ab121995-02-27 10:17:52 +000036extern DL_IMPORT(PyTypeObject) PyList_Type;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000037
Guido van Rossumcaa63801995-01-12 11:45:45 +000038#define PyList_Check(op) ((op)->ob_type == &PyList_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000039
Fred Drakeea9cb5a2000-07-09 00:20:36 +000040extern DL_IMPORT(PyObject *) PyList_New(int size);
41extern DL_IMPORT(int) PyList_Size(PyObject *);
42extern DL_IMPORT(PyObject *) PyList_GetItem(PyObject *, int);
43extern DL_IMPORT(int) PyList_SetItem(PyObject *, int, PyObject *);
44extern DL_IMPORT(int) PyList_Insert(PyObject *, int, PyObject *);
45extern DL_IMPORT(int) PyList_Append(PyObject *, PyObject *);
46extern DL_IMPORT(PyObject *) PyList_GetSlice(PyObject *, int, int);
47extern DL_IMPORT(int) PyList_SetSlice(PyObject *, int, int, PyObject *);
48extern DL_IMPORT(int) PyList_Sort(PyObject *);
49extern DL_IMPORT(int) PyList_Reverse(PyObject *);
50extern DL_IMPORT(PyObject *) PyList_AsTuple(PyObject *);
Guido van Rossum3f5da241990-12-20 15:06:42 +000051
52/* Macro, trading safety for speed */
Barry Warsaw1f2bd071997-01-06 22:42:00 +000053#define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i])
Guido van Rossuma937d141998-04-24 18:22:02 +000054#define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item[i] = (v))
Barry Warsaw1f2bd071997-01-06 22:42:00 +000055#define PyList_GET_SIZE(op) (((PyListObject *)(op))->ob_size)
Guido van Rossuma3309961993-07-28 09:05:47 +000056
57#ifdef __cplusplus
58}
59#endif
60#endif /* !Py_LISTOBJECT_H */