17db96d56Sopenharmony_ci#ifndef Py_CPYTHON_DICTOBJECT_H 27db96d56Sopenharmony_ci# error "this header file must not be included directly" 37db96d56Sopenharmony_ci#endif 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_citypedef struct _dictkeysobject PyDictKeysObject; 67db96d56Sopenharmony_citypedef struct _dictvalues PyDictValues; 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ci/* The ma_values pointer is NULL for a combined table 97db96d56Sopenharmony_ci * or points to an array of PyObject* for a split table 107db96d56Sopenharmony_ci */ 117db96d56Sopenharmony_citypedef struct { 127db96d56Sopenharmony_ci PyObject_HEAD 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci /* Number of items in the dictionary */ 157db96d56Sopenharmony_ci Py_ssize_t ma_used; 167db96d56Sopenharmony_ci 177db96d56Sopenharmony_ci /* Dictionary version: globally unique, value change each time 187db96d56Sopenharmony_ci the dictionary is modified */ 197db96d56Sopenharmony_ci uint64_t ma_version_tag; 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci PyDictKeysObject *ma_keys; 227db96d56Sopenharmony_ci 237db96d56Sopenharmony_ci /* If ma_values is NULL, the table is "combined": keys and values 247db96d56Sopenharmony_ci are stored in ma_keys. 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci If ma_values is not NULL, the table is split: 277db96d56Sopenharmony_ci keys are stored in ma_keys and values are stored in ma_values */ 287db96d56Sopenharmony_ci PyDictValues *ma_values; 297db96d56Sopenharmony_ci} PyDictObject; 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) _PyDict_GetItem_KnownHash(PyObject *mp, PyObject *key, 327db96d56Sopenharmony_ci Py_hash_t hash); 337db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) _PyDict_GetItemWithError(PyObject *dp, PyObject *key); 347db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) _PyDict_GetItemIdWithError(PyObject *dp, 357db96d56Sopenharmony_ci _Py_Identifier *key); 367db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) _PyDict_GetItemStringWithError(PyObject *, const char *); 377db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyDict_SetDefault( 387db96d56Sopenharmony_ci PyObject *mp, PyObject *key, PyObject *defaultobj); 397db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyDict_SetItem_KnownHash(PyObject *mp, PyObject *key, 407db96d56Sopenharmony_ci PyObject *item, Py_hash_t hash); 417db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyDict_DelItem_KnownHash(PyObject *mp, PyObject *key, 427db96d56Sopenharmony_ci Py_hash_t hash); 437db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyDict_DelItemIf(PyObject *mp, PyObject *key, 447db96d56Sopenharmony_ci int (*predicate)(PyObject *value)); 457db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyDict_Next( 467db96d56Sopenharmony_ci PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value, Py_hash_t *hash); 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci/* Get the number of items of a dictionary. */ 497db96d56Sopenharmony_ci#define PyDict_GET_SIZE(mp) (assert(PyDict_Check(mp)),((PyDictObject *)mp)->ma_used) 507db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyDict_Contains_KnownHash(PyObject *, PyObject *, Py_hash_t); 517db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyDict_ContainsId(PyObject *, _Py_Identifier *); 527db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) _PyDict_NewPresized(Py_ssize_t minused); 537db96d56Sopenharmony_ciPyAPI_FUNC(void) _PyDict_MaybeUntrack(PyObject *mp); 547db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyDict_HasOnlyStringKeys(PyObject *mp); 557db96d56Sopenharmony_ciPyAPI_FUNC(Py_ssize_t) _PyDict_SizeOf(PyDictObject *); 567db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) _PyDict_Pop(PyObject *, PyObject *, PyObject *); 577db96d56Sopenharmony_ci#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL) 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci/* Like PyDict_Merge, but override can be 0, 1 or 2. If override is 0, 607db96d56Sopenharmony_ci the first occurrence of a key wins, if override is 1, the last occurrence 617db96d56Sopenharmony_ci of a key wins, if override is 2, a KeyError with conflicting key as 627db96d56Sopenharmony_ci argument is raised. 637db96d56Sopenharmony_ci*/ 647db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyDict_MergeEx(PyObject *mp, PyObject *other, int override); 657db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyDict_SetItemId(PyObject *dp, _Py_Identifier *key, PyObject *item); 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyDict_DelItemId(PyObject *mp, _Py_Identifier *key); 687db96d56Sopenharmony_ciPyAPI_FUNC(void) _PyDict_DebugMallocStats(FILE *out); 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ci/* _PyDictView */ 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_citypedef struct { 737db96d56Sopenharmony_ci PyObject_HEAD 747db96d56Sopenharmony_ci PyDictObject *dv_dict; 757db96d56Sopenharmony_ci} _PyDictViewObject; 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) _PyDictView_New(PyObject *, PyTypeObject *); 787db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) _PyDictView_Intersect(PyObject* self, PyObject *other); 79