python27_sys/
tupleobject.rs1use libc::c_int;
2
3use crate::object::*;
4use crate::pyport::Py_ssize_t;
5
6#[repr(C)]
7#[derive(Copy, Clone)]
8pub struct PyTupleObject {
9 #[cfg(py_sys_config = "Py_TRACE_REFS")]
10 pub _ob_next: *mut PyObject,
11 #[cfg(py_sys_config = "Py_TRACE_REFS")]
12 pub _ob_prev: *mut PyObject,
13 pub ob_refcnt: Py_ssize_t,
14 pub ob_type: *mut PyTypeObject,
15 pub ob_size: Py_ssize_t,
16 pub ob_item: [*mut PyObject; 1],
17}
18
19#[cfg_attr(windows, link(name = "pythonXY"))]
20extern "C" {
21 pub static mut PyTuple_Type: PyTypeObject;
22}
23
24#[inline(always)]
25pub unsafe fn PyTuple_Check(op: *mut PyObject) -> c_int {
26 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
27}
28
29#[inline(always)]
30pub unsafe fn PyTuple_CheckExact(op: *mut PyObject) -> c_int {
31 let u: *mut PyTypeObject = &mut PyTuple_Type;
32 (Py_TYPE(op) == u) as c_int
33}
34
35#[inline(always)]
37pub unsafe fn PyTuple_GET_ITEM(op: *mut PyObject, i: Py_ssize_t) -> *mut PyObject {
38 *(*(op as *mut PyTupleObject))
39 .ob_item
40 .as_ptr()
41 .offset(i as isize)
42}
43
44#[inline(always)]
45pub unsafe fn PyTuple_GET_SIZE(op: *mut PyObject) -> Py_ssize_t {
46 Py_SIZE(op)
47}
48
49#[inline(always)]
51pub unsafe fn PyTuple_SET_ITEM(op: *mut PyObject, i: Py_ssize_t, v: *mut PyObject) {
52 *(*(op as *mut PyTupleObject))
53 .ob_item
54 .as_mut_ptr()
55 .offset(i as isize) = v;
56}
57
58#[cfg_attr(windows, link(name = "pythonXY"))]
59extern "C" {
60 pub fn PyTuple_New(size: Py_ssize_t) -> *mut PyObject;
61 pub fn PyTuple_Size(p: *mut PyObject) -> Py_ssize_t;
62 pub fn PyTuple_GetItem(p: *mut PyObject, pos: Py_ssize_t) -> *mut PyObject;
63 pub fn PyTuple_SetItem(p: *mut PyObject, pos: Py_ssize_t, o: *mut PyObject) -> c_int;
64 pub fn PyTuple_GetSlice(p: *mut PyObject, low: Py_ssize_t, high: Py_ssize_t) -> *mut PyObject;
65 pub fn _PyTuple_Resize(p: *mut *mut PyObject, newsize: Py_ssize_t) -> c_int;
66 pub fn PyTuple_Pack(n: Py_ssize_t, ...) -> *mut PyObject;
67 ignore! {
68 pub fn _PyTuple_MaybeUntrack(arg1: *mut PyObject);
69 }
70 pub fn PyTuple_ClearFreeList() -> c_int;
71}