15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from cpython.ref cimport PyObject
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)cdef extern from "Python.h":
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ############################################################################
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Lists
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ############################################################################
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    object PyList_New(Py_ssize_t len)
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Return a new list of length len on success, or NULL on failure.
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    #
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Note: If length is greater than zero, the returned list object's
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # items are set to NULL. Thus you cannot use abstract API
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # functions such as PySequence_SetItem() or expose the object to
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Python code before setting all items to a real object with
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # PyList_SetItem().
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    bint PyList_Check(object p)
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Return true if p is a list object or an instance of a subtype of
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # the list type.
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    bint PyList_CheckExact(object p)
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Return true if p is a list object, but not an instance of a
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # subtype of the list type.
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t PyList_Size(object list) except -1
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Return the length of the list object in list; this is equivalent
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # to "len(list)" on a list object.
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Py_ssize_t PyList_GET_SIZE(object list)
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Macro form of PyList_Size() without error checking.
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject* PyList_GetItem(object list, Py_ssize_t index) except NULL
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Return value: Borrowed reference.
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Return the object at position pos in the list pointed to by
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # p. The position must be positive, indexing from the end of the
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # list is not supported. If pos is out of bounds, return NULL and
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # set an IndexError exception.
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PyObject* PyList_GET_ITEM(object list, Py_ssize_t i)
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Return value: Borrowed reference.
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Macro form of PyList_GetItem() without error checking.
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int PyList_SetItem(object list, Py_ssize_t index, object item) except -1
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Set the item at index index in list to item. Return 0 on success
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # or -1 on failure. Note: This function ``steals'' a reference to
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # item and discards a reference to an item already in the list at
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # the affected position.
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    void PyList_SET_ITEM(object list, Py_ssize_t i, object o)
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Macro form of PyList_SetItem() without error checking. This is
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # normally only used to fill in new lists where there is no
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # previous content. Note: This function ``steals'' a reference to
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # item, and, unlike PyList_SetItem(), does not discard a reference
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # to any item that it being replaced; any reference in list at
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # position i will be *leaked*.
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int PyList_Insert(object list, Py_ssize_t index, object item) except -1
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Insert the item item into list list in front of index
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # index. Return 0 if successful; return -1 and set an exception if
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # unsuccessful. Analogous to list.insert(index, item).
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int PyList_Append(object list, object item) except -1
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Append the object item at the end of list list. Return 0 if
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # successful; return -1 and set an exception if
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # unsuccessful. Analogous to list.append(item).
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    object PyList_GetSlice(object list, Py_ssize_t low, Py_ssize_t high)
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Return value: New reference.
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Return a list of the objects in list containing the objects
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # between low and high. Return NULL and set an exception if
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # unsuccessful. Analogous to list[low:high].
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int PyList_SetSlice(object list, Py_ssize_t low, Py_ssize_t high, object itemlist) except -1
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Set the slice of list between low and high to the contents of
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # itemlist. Analogous to list[low:high] = itemlist. The itemlist
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # may be NULL, indicating the assignment of an empty list (slice
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # deletion). Return 0 on success, -1 on failure.
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int PyList_Sort(object list) except -1
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Sort the items of list in place. Return 0 on success, -1 on
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # failure. This is equivalent to "list.sort()".
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int PyList_Reverse(object list) except -1
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Reverse the items of list in place. Return 0 on success, -1 on
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # failure. This is the equivalent of "list.reverse()".
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    object PyList_AsTuple(object list)
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Return value: New reference.
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # Return a new tuple object containing the contents of list;
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    # equivalent to "tuple(list)".
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
93