python3_sys/
dictobject.rs

1use libc::{c_char, c_int};
2
3use crate::object::*;
4use crate::pyport::Py_ssize_t;
5
6#[cfg_attr(windows, link(name = "pythonXY"))]
7extern "C" {
8    pub static mut PyDict_Type: PyTypeObject;
9    pub static mut PyDictIterKey_Type: PyTypeObject;
10    pub static mut PyDictIterValue_Type: PyTypeObject;
11    pub static mut PyDictIterItem_Type: PyTypeObject;
12    pub static mut PyDictKeys_Type: PyTypeObject;
13    pub static mut PyDictItems_Type: PyTypeObject;
14    pub static mut PyDictValues_Type: PyTypeObject;
15    #[cfg(Py_3_8)]
16    pub static mut PyDictRevIterKey_Type: PyTypeObject;
17    #[cfg(Py_3_8)]
18    pub static mut PyDictRevIterValue_Type: PyTypeObject;
19    #[cfg(Py_3_8)]
20    pub static mut PyDictRevIterItem_Type: PyTypeObject;
21}
22
23#[inline(always)]
24pub unsafe fn PyDict_Check(op: *mut PyObject) -> c_int {
25    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
26}
27
28#[inline(always)]
29pub unsafe fn PyDict_CheckExact(op: *mut PyObject) -> c_int {
30    (Py_TYPE(op) == &mut PyDict_Type) as c_int
31}
32
33#[inline(always)]
34pub unsafe fn PyDictKeys_Check(op: *mut PyObject) -> c_int {
35    PyObject_TypeCheck(op, &mut PyDictKeys_Type)
36}
37
38#[inline(always)]
39pub unsafe fn PyDictItems_Check(op: *mut PyObject) -> c_int {
40    PyObject_TypeCheck(op, &mut PyDictItems_Type)
41}
42
43#[inline(always)]
44pub unsafe fn PyDictValues_Check(op: *mut PyObject) -> c_int {
45    PyObject_TypeCheck(op, &mut PyDictValues_Type)
46}
47
48#[inline(always)]
49pub unsafe fn PyDictViewSet_Check(op: *mut PyObject) -> c_int {
50    (PyDictKeys_Check(op) != 0 || PyDictItems_Check(op) != 0) as c_int
51}
52
53#[cfg_attr(windows, link(name = "pythonXY"))]
54extern "C" {
55    pub fn PyDict_New() -> *mut PyObject;
56    pub fn PyDict_GetItem(mp: *mut PyObject, key: *mut PyObject) -> *mut PyObject;
57    pub fn PyDict_GetItemWithError(mp: *mut PyObject, key: *mut PyObject) -> *mut PyObject;
58    pub fn PyDict_SetItem(mp: *mut PyObject, key: *mut PyObject, item: *mut PyObject) -> c_int;
59    pub fn PyDict_DelItem(mp: *mut PyObject, key: *mut PyObject) -> c_int;
60    pub fn PyDict_Clear(mp: *mut PyObject) -> ();
61    pub fn PyDict_Next(
62        mp: *mut PyObject,
63        pos: *mut Py_ssize_t,
64        key: *mut *mut PyObject,
65        value: *mut *mut PyObject,
66    ) -> c_int;
67    pub fn PyDict_Keys(mp: *mut PyObject) -> *mut PyObject;
68    pub fn PyDict_Values(mp: *mut PyObject) -> *mut PyObject;
69    pub fn PyDict_Items(mp: *mut PyObject) -> *mut PyObject;
70    pub fn PyDict_Size(mp: *mut PyObject) -> Py_ssize_t;
71    pub fn PyDict_Copy(mp: *mut PyObject) -> *mut PyObject;
72    pub fn PyDict_Contains(mp: *mut PyObject, key: *mut PyObject) -> c_int;
73    pub fn PyDict_Update(mp: *mut PyObject, other: *mut PyObject) -> c_int;
74    pub fn PyDict_Merge(mp: *mut PyObject, other: *mut PyObject, _override: c_int) -> c_int;
75    pub fn PyDict_MergeFromSeq2(d: *mut PyObject, seq2: *mut PyObject, _override: c_int) -> c_int;
76    pub fn PyDict_GetItemString(dp: *mut PyObject, key: *const c_char) -> *mut PyObject;
77    pub fn PyDict_SetItemString(
78        dp: *mut PyObject,
79        key: *const c_char,
80        item: *mut PyObject,
81    ) -> c_int;
82    pub fn PyDict_DelItemString(dp: *mut PyObject, key: *const c_char) -> c_int;
83    #[cfg(Py_3_10)]
84    pub fn PyObject_GenericGetDict(obj: *mut PyObject, context: *mut libc::c_void) -> *mut PyObject;
85}