python3_sys/
dictobject.rs1use 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}