python27_sys/
dictobject.rs

1use libc::{c_char, c_int};
2
3use crate::object::*;
4use crate::pyport::Py_ssize_t;
5
6ignore! {
7    #[repr(C)]
8    pub struct PyDictObject { /* representation hidden */ }
9}
10
11#[cfg_attr(windows, link(name = "pythonXY"))]
12extern "C" {
13    pub static mut PyDict_Type: PyTypeObject;
14    pub static mut PyDictIterKey_Type: PyTypeObject;
15    pub static mut PyDictIterValue_Type: PyTypeObject;
16    pub static mut PyDictIterItem_Type: PyTypeObject;
17    pub static mut PyDictKeys_Type: PyTypeObject;
18    pub static mut PyDictItems_Type: PyTypeObject;
19    pub static mut PyDictValues_Type: PyTypeObject;
20}
21
22#[inline(always)]
23pub unsafe fn PyDict_Check(op: *mut PyObject) -> c_int {
24    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
25}
26
27#[inline(always)]
28pub unsafe fn PyDict_CheckExact(op: *mut PyObject) -> c_int {
29    let u: *mut PyTypeObject = &mut PyDict_Type;
30    (Py_TYPE(op) == u) as c_int
31}
32
33#[cfg_attr(windows, link(name = "pythonXY"))]
34extern "C" {
35    pub fn PyDict_New() -> *mut PyObject;
36    pub fn PyDictProxy_New(dict: *mut PyObject) -> *mut PyObject;
37    pub fn PyDict_Clear(mp: *mut PyObject);
38    pub fn PyDict_Contains(mp: *mut PyObject, key: *mut PyObject) -> c_int;
39    pub fn PyDict_Copy(mp: *mut PyObject) -> *mut PyObject;
40
41    pub fn PyDict_GetItem(mp: *mut PyObject, key: *mut PyObject) -> *mut PyObject;
42    pub fn PyDict_SetItem(mp: *mut PyObject, key: *mut PyObject, item: *mut PyObject) -> c_int;
43    pub fn PyDict_DelItem(mp: *mut PyObject, key: *mut PyObject) -> c_int;
44    pub fn PyDict_GetItemString(dp: *mut PyObject, key: *const c_char) -> *mut PyObject;
45    pub fn PyDict_SetItemString(
46        dp: *mut PyObject,
47        key: *const c_char,
48        item: *mut PyObject,
49    ) -> c_int;
50    pub fn PyDict_DelItemString(dp: *mut PyObject, key: *const c_char) -> c_int;
51
52    pub fn PyDict_Keys(mp: *mut PyObject) -> *mut PyObject;
53    pub fn PyDict_Values(mp: *mut PyObject) -> *mut PyObject;
54    pub fn PyDict_Items(mp: *mut PyObject) -> *mut PyObject;
55    pub fn PyDict_Size(mp: *mut PyObject) -> Py_ssize_t;
56    pub fn PyDict_Next(
57        mp: *mut PyObject,
58        pos: *mut Py_ssize_t,
59        key: *mut *mut PyObject,
60        value: *mut *mut PyObject,
61    ) -> c_int;
62    ignore! {
63        pub fn _PyDict_Next(
64            mp: *mut PyObject,
65            pos: *mut Py_ssize_t,
66            key: *mut *mut PyObject,
67            value: *mut *mut PyObject,
68            hash: *mut c_long,
69        ) -> c_int;
70        pub fn _PyDict_Contains(mp: *mut PyObject, key: *mut PyObject, hash: c_long) -> c_int;
71        pub fn _PyDict_NewPresized(minused: Py_ssize_t) -> *mut PyObject;
72        pub fn _PyDict_MaybeUntrack(mp: *mut PyObject);
73    }
74    pub fn PyDict_Update(mp: *mut PyObject, other: *mut PyObject) -> c_int;
75    pub fn PyDict_Merge(mp: *mut PyObject, other: *mut PyObject, _override: c_int) -> c_int;
76    pub fn PyDict_MergeFromSeq2(d: *mut PyObject, seq2: *mut PyObject, _override: c_int) -> c_int;
77
78}