Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 1 | /* Tuple object interface */ |
| 2 | |
Fred Drake | 3cf4d2b | 2000-07-09 00:55:06 +0000 | [diff] [blame] | 3 | #ifndef Py_TUPLEOBJECT_H |
| 4 | #define Py_TUPLEOBJECT_H |
| 5 | #ifdef __cplusplus |
| 6 | extern "C" { |
| 7 | #endif |
| 8 | |
Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 9 | /* |
Armin Rigo | 89a3946 | 2004-10-28 16:32:00 +0000 | [diff] [blame] | 10 | Another generally useful object type is a tuple of object pointers. |
| 11 | For Python, this is an immutable type. C code can change the tuple items |
Chris | e0720cd | 2017-12-11 23:59:30 -0800 | [diff] [blame] | 12 | (but not their number), and even use tuples as general-purpose arrays of |
Armin Rigo | 89a3946 | 2004-10-28 16:32:00 +0000 | [diff] [blame] | 13 | object references, but in general only brand new tuples should be mutated, |
| 14 | not ones that might already have been exposed to Python code. |
Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 15 | |
Guido van Rossum | caa6380 | 1995-01-12 11:45:45 +0000 | [diff] [blame] | 16 | *** WARNING *** PyTuple_SetItem does not increment the new item's reference |
Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 17 | count, but does decrement the reference count of the item it replaces, |
| 18 | if not nil. It does *decrement* the reference count if it is *not* |
Guido van Rossum | caa6380 | 1995-01-12 11:45:45 +0000 | [diff] [blame] | 19 | inserted in the tuple. Similarly, PyTuple_GetItem does not increment the |
Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 20 | returned item's reference count. |
| 21 | */ |
| 22 | |
Mark Hammond | 91a681d | 2002-08-12 07:21:58 +0000 | [diff] [blame] | 23 | PyAPI_DATA(PyTypeObject) PyTuple_Type; |
Christian Heimes | a22e8bd | 2007-11-29 22:35:39 +0000 | [diff] [blame] | 24 | PyAPI_DATA(PyTypeObject) PyTupleIter_Type; |
Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 25 | |
Thomas Wouters | 27d517b | 2007-02-25 20:39:11 +0000 | [diff] [blame] | 26 | #define PyTuple_Check(op) \ |
Christian Heimes | 90aa764 | 2007-12-19 02:45:37 +0000 | [diff] [blame] | 27 | PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS) |
| 28 | #define PyTuple_CheckExact(op) (Py_TYPE(op) == &PyTuple_Type) |
Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 29 | |
Martin v. Löwis | 18e1655 | 2006-02-15 17:27:45 +0000 | [diff] [blame] | 30 | PyAPI_FUNC(PyObject *) PyTuple_New(Py_ssize_t size); |
| 31 | PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *); |
| 32 | PyAPI_FUNC(PyObject *) PyTuple_GetItem(PyObject *, Py_ssize_t); |
| 33 | PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *); |
| 34 | PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t); |
Martin v. Löwis | 18e1655 | 2006-02-15 17:27:45 +0000 | [diff] [blame] | 35 | PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...); |
Guido van Rossum | a330996 | 1993-07-28 09:05:47 +0000 | [diff] [blame] | 36 | |
Christian Heimes | a156e09 | 2008-02-16 07:38:31 +0000 | [diff] [blame] | 37 | PyAPI_FUNC(int) PyTuple_ClearFreeList(void); |
Victor Stinner | 54ba556 | 2018-11-28 13:01:32 +0100 | [diff] [blame] | 38 | |
David Malcolm | 49526f4 | 2012-06-22 14:55:41 -0400 | [diff] [blame] | 39 | #ifndef Py_LIMITED_API |
Victor Stinner | 54ba556 | 2018-11-28 13:01:32 +0100 | [diff] [blame] | 40 | # define Py_CPYTHON_TUPLEOBJECT_H |
| 41 | # include "cpython/tupleobject.h" |
| 42 | # undef Py_CPYTHON_TUPLEOBJECT_H |
| 43 | #endif |
Christian Heimes | a156e09 | 2008-02-16 07:38:31 +0000 | [diff] [blame] | 44 | |
Guido van Rossum | a330996 | 1993-07-28 09:05:47 +0000 | [diff] [blame] | 45 | #ifdef __cplusplus |
| 46 | } |
| 47 | #endif |
| 48 | #endif /* !Py_TUPLEOBJECT_H */ |