File: /Users/paulross/dev/Python-3.6.2/Include/tupleobject.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: 
       2: /* Tuple object interface */
       3: 
       4: #ifndef Py_TUPLEOBJECT_H
       5: #define Py_TUPLEOBJECT_H
       6: #ifdef __cplusplus
       7: extern "C" {
       8: #endif
       9: 
      10: /*
      11: Another generally useful object type is a tuple of object pointers.
      12: For Python, this is an immutable type.  C code can change the tuple items
      13: (but not their number), and even use tuples are general-purpose arrays of
      14: object references, but in general only brand new tuples should be mutated,
      15: not ones that might already have been exposed to Python code.
      16: 
      17: *** WARNING *** PyTuple_SetItem does not increment the new item's reference
      18: count, but does decrement the reference count of the item it replaces,
      19: if not nil.  It does *decrement* the reference count if it is *not*
      20: inserted in the tuple.  Similarly, PyTuple_GetItem does not increment the
      21: returned item's reference count.
      22: */
      23: 
      24: #ifndef Py_LIMITED_API
      25: typedef struct {
      26:     PyObject_VAR_HEAD
      27:     PyObject *ob_item[1];
      28: 
      29:     /* ob_item contains space for 'ob_size' elements.
      30:      * Items must normally not be NULL, except during construction when
      31:      * the tuple is not yet visible outside the function that builds it.
      32:      */
      33: } PyTupleObject;
      34: #endif
      35: 
      36: PyAPI_DATA(PyTypeObject) PyTuple_Type;
      37: PyAPI_DATA(PyTypeObject) PyTupleIter_Type;
      38: 
      39: #define PyTuple_Check(op) \
      40:                  PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
      41: #define PyTuple_CheckExact(op) (Py_TYPE(op) == &PyTuple_Type)
      42: 
      43: PyAPI_FUNC(PyObject *) PyTuple_New(Py_ssize_t size);
      44: PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *);
      45: PyAPI_FUNC(PyObject *) PyTuple_GetItem(PyObject *, Py_ssize_t);
      46: PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *);
      47: PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
      48: #ifndef Py_LIMITED_API
      49: PyAPI_FUNC(int) _PyTuple_Resize(PyObject **, Py_ssize_t);
      50: #endif
      51: PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...);
      52: #ifndef Py_LIMITED_API
      53: PyAPI_FUNC(void) _PyTuple_MaybeUntrack(PyObject *);
      54: #endif
      55: 
      56: /* Macro, trading safety for speed */
      57: #ifndef Py_LIMITED_API
      58: #define PyTuple_GET_ITEM(op, i) (((PyTupleObject *)(op))->ob_item[i])
      59: #define PyTuple_GET_SIZE(op)    Py_SIZE(op)
      60: 
      61: /* Macro, *only* to be used to fill in brand new tuples */
      62: #define PyTuple_SET_ITEM(op, i, v) (((PyTupleObject *)(op))->ob_item[i] = v)
      63: #endif
      64: 
      65: PyAPI_FUNC(int) PyTuple_ClearFreeList(void);
      66: #ifndef Py_LIMITED_API
      67: PyAPI_FUNC(void) _PyTuple_DebugMallocStats(FILE *out);
      68: #endif /* Py_LIMITED_API */
      69: 
      70: #ifdef __cplusplus
      71: }
      72: #endif
      73: #endif /* !Py_TUPLEOBJECT_H */
      74: