Skip to main content

pyo3_ffi/
tupleobject.rs

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}