python27_sys/
setobject.rs

1use libc::c_int;
2
3use crate::object::*;
4use crate::pyport::Py_ssize_t;
5
6ignore! {
7    #[repr(C)] pub struct PySetObject { _private: [u8; 0] }
8}
9
10#[cfg_attr(windows, link(name = "pythonXY"))]
11extern "C" {
12    pub static mut PySet_Type: PyTypeObject;
13    pub static mut PyFrozenSet_Type: PyTypeObject;
14}
15
16#[inline]
17pub unsafe fn PyFrozenSet_CheckExact(ob: *mut PyObject) -> c_int {
18    let f: *mut PyTypeObject = &mut PyFrozenSet_Type;
19    (Py_TYPE(ob) == f) as c_int
20}
21
22#[inline]
23pub unsafe fn PyAnySet_CheckExact(ob: *mut PyObject) -> c_int {
24    let s: *mut PyTypeObject = &mut PySet_Type;
25    let f: *mut PyTypeObject = &mut PyFrozenSet_Type;
26    (Py_TYPE(ob) == s || Py_TYPE(ob) == f) as c_int
27}
28
29#[inline]
30pub unsafe fn PyAnySet_Check(ob: *mut PyObject) -> c_int {
31    (PyAnySet_CheckExact(ob) != 0
32        || PyType_IsSubtype(Py_TYPE(ob), &mut PySet_Type) != 0
33        || PyType_IsSubtype(Py_TYPE(ob), &mut PyFrozenSet_Type) != 0) as c_int
34}
35
36#[inline]
37pub unsafe fn PySet_Check(ob: *mut PyObject) -> c_int {
38    let s: *mut PyTypeObject = &mut PySet_Type;
39    (Py_TYPE(ob) == s || PyType_IsSubtype(Py_TYPE(ob), s) != 0) as c_int
40}
41
42#[inline]
43pub unsafe fn PyFrozenSet_Check(ob: *mut PyObject) -> c_int {
44    let f: *mut PyTypeObject = &mut PyFrozenSet_Type;
45    (Py_TYPE(ob) == f || PyType_IsSubtype(Py_TYPE(ob), f) != 0) as c_int
46}
47
48#[cfg_attr(windows, link(name = "pythonXY"))]
49extern "C" {
50    pub fn PySet_New(iterable: *mut PyObject) -> *mut PyObject;
51    pub fn PyFrozenSet_New(iterable: *mut PyObject) -> *mut PyObject;
52    pub fn PySet_Size(anyset: *mut PyObject) -> Py_ssize_t;
53    pub fn PySet_Clear(set: *mut PyObject) -> c_int;
54    pub fn PySet_Contains(anyset: *mut PyObject, key: *mut PyObject) -> c_int;
55    pub fn PySet_Discard(set: *mut PyObject, key: *mut PyObject) -> c_int;
56    pub fn PySet_Add(set: *mut PyObject, key: *mut PyObject) -> c_int;
57
58    ignore! {
59        pub fn _PySet_Next(set: *mut PyObject, pos: *mut Py_ssize_t, key: *mut *mut PyObject) -> c_int;
60        pub fn _PySet_NextEntry(
61            set: *mut PyObject,
62            pos: *mut Py_ssize_t,
63            key: *mut *mut PyObject,
64            hash: *mut c_long,
65        ) -> c_int;
66    }
67
68    pub fn PySet_Pop(set: *mut PyObject) -> *mut PyObject;
69
70    ignore! {
71        pub fn _PySet_Update(set: *mut PyObject, iterable: *mut PyObject) -> c_int;
72    }
73}