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