pyo3_ffi/cpython/
dictobject.rs

1use crate::object::*;
2#[cfg(not(PyPy))]
3use crate::pyport::Py_ssize_t;
4#[cfg(not(PyPy))]
5use std::ffi::c_int;
6
7#[cfg(not(PyPy))]
8opaque_struct!(pub PyDictKeysObject);
9
10#[cfg(Py_3_11)]
11#[cfg(not(PyPy))]
12opaque_struct!(pub PyDictValues);
13
14#[cfg(not(any(GraalPy, PyPy)))]
15#[repr(C)]
16#[derive(Debug)]
17pub struct PyDictObject {
18    pub ob_base: PyObject,
19    pub ma_used: Py_ssize_t,
20    #[cfg_attr(
21        Py_3_12,
22        deprecated(note = "Deprecated in Python 3.12 and will be removed in the future.")
23    )]
24    #[cfg(not(Py_3_14))]
25    pub ma_version_tag: u64,
26    #[cfg(Py_3_14)]
27    _ma_watcher_tag: u64,
28    pub ma_keys: *mut PyDictKeysObject,
29    #[cfg(not(Py_3_11))]
30    pub ma_values: *mut *mut PyObject,
31    #[cfg(Py_3_11)]
32    pub ma_values: *mut PyDictValues,
33}
34
35#[cfg(PyPy)]
36#[repr(C)]
37#[derive(Debug)]
38pub struct PyDictObject {
39    pub ob_base: PyObject,
40    _tmpkeys: *mut PyObject,
41}
42
43extern "C" {
44    // skipped _PyDict_GetItem_KnownHash
45    // skipped _PyDict_GetItemIdWithError
46    // skipped _PyDict_GetItemStringWithError
47    // skipped PyDict_SetDefault
48    #[cfg(not(PyPy))]
49    pub fn _PyDict_SetItem_KnownHash(
50        mp: *mut PyObject,
51        key: *mut PyObject,
52        item: *mut PyObject,
53        hash: crate::Py_hash_t,
54    ) -> c_int;
55    // skipped _PyDict_DelItem_KnownHash
56    // skipped _PyDict_DelItemIf
57    // skipped _PyDict_NewKeysForClass
58    #[cfg(not(PyPy))]
59    pub fn _PyDict_Next(
60        mp: *mut PyObject,
61        pos: *mut Py_ssize_t,
62        key: *mut *mut PyObject,
63        value: *mut *mut PyObject,
64        hash: *mut crate::Py_hash_t,
65    ) -> c_int;
66    // skipped PyDict_GET_SIZE
67    // skipped _PyDict_ContainsId
68    #[cfg(not(PyPy))]
69    pub fn _PyDict_NewPresized(minused: Py_ssize_t) -> *mut PyObject;
70    // skipped _PyDict_MaybeUntrack
71    // skipped _PyDict_HasOnlyStringKeys
72    // skipped _PyDict_KeysSize
73    // skipped _PyDict_SizeOf
74    // skipped _PyDict_Pop
75    // skipped _PyDict_Pop_KnownHash
76    // skipped _PyDict_FromKeys
77    // skipped _PyDict_HasSplitTable
78    // skipped _PyDict_MergeEx
79    // skipped _PyDict_SetItemId
80    // skipped _PyDict_DelItemId
81    // skipped _PyDict_DebugMallocStats
82    // skipped _PyObjectDict_SetItem
83    // skipped _PyDict_LoadGlobal
84    // skipped _PyDict_GetItemHint
85    // skipped _PyDictViewObject
86    // skipped _PyDictView_New
87    // skipped _PyDictView_Intersect
88
89    #[cfg(Py_3_10)]
90    #[cfg(not(PyPy))]
91    pub fn _PyDict_Contains_KnownHash(
92        op: *mut PyObject,
93        key: *mut PyObject,
94        hash: crate::Py_hash_t,
95    ) -> c_int;
96
97    #[cfg(not(Py_3_10))]
98    #[cfg(not(PyPy))]
99    pub fn _PyDict_Contains(mp: *mut PyObject, key: *mut PyObject, hash: Py_ssize_t) -> c_int;
100}