1use crate::object::*;
2use crate::pyport::Py_ssize_t;
3use core::ffi::c_int;
4
5#[cfg(not(RustPython))]
6extern_libpython! {
7 #[cfg_attr(PyPy, link_name = "PyPyTuple_Type")]
8 pub static mut PyTuple_Type: PyTypeObject;
9 pub static mut PyTupleIter_Type: PyTypeObject;
10}
11
12#[inline]
13#[cfg(not(RustPython))]
14pub unsafe fn PyTuple_Check(op: *mut PyObject) -> c_int {
15 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
16}
17
18#[inline]
19#[cfg(not(RustPython))]
20pub unsafe fn PyTuple_CheckExact(op: *mut PyObject) -> c_int {
21 Py_IS_TYPE(op, &raw mut PyTuple_Type)
22}
23
24extern_libpython! {
25 #[cfg(RustPython)]
26 pub fn PyTuple_Check(op: *mut PyObject) -> c_int;
27 #[cfg(RustPython)]
28 pub fn PyTuple_CheckExact(op: *mut PyObject) -> c_int;
29
30 #[cfg_attr(PyPy, link_name = "PyPyTuple_New")]
31 pub fn PyTuple_New(size: Py_ssize_t) -> *mut PyObject;
32 #[cfg_attr(PyPy, link_name = "PyPyTuple_Size")]
33 pub fn PyTuple_Size(arg1: *mut PyObject) -> Py_ssize_t;
34 #[cfg_attr(PyPy, link_name = "PyPyTuple_GetItem")]
35 pub fn PyTuple_GetItem(arg1: *mut PyObject, arg2: Py_ssize_t) -> *mut PyObject;
36 #[cfg_attr(PyPy, link_name = "PyPyTuple_SetItem")]
37 pub fn PyTuple_SetItem(arg1: *mut PyObject, arg2: Py_ssize_t, arg3: *mut PyObject) -> c_int;
38 #[cfg_attr(PyPy, link_name = "PyPyTuple_GetSlice")]
39 pub fn PyTuple_GetSlice(
40 arg1: *mut PyObject,
41 arg2: Py_ssize_t,
42 arg3: Py_ssize_t,
43 ) -> *mut PyObject;
44 #[cfg_attr(PyPy, link_name = "PyPyTuple_Pack")]
45 pub fn PyTuple_Pack(arg1: Py_ssize_t, ...) -> *mut PyObject;
46 #[cfg(any(all(Py_3_15, not(Py_LIMITED_API)), RustPython))]
47 pub fn PyTuple_FromArray(array: *const *mut PyObject, size: Py_ssize_t) -> *mut PyObject;
48 #[cfg(not(Py_3_9))]
49 pub fn PyTuple_ClearFreeList() -> c_int;
50}