aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Include/dictobject.h
blob: 77f3a53a2182c6fca7f18132b17e564a9bce7083 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#ifndef Py_DICTOBJECT_H 
#define Py_DICTOBJECT_H 
#ifdef __cplusplus 
extern "C" { 
#endif 
 
/* Dictionary object type -- mapping from hashable object to object */ 
 
/* The distribution includes a separate file, Objects/dictnotes.txt, 
   describing explorations into dictionary design and optimization. 
   It covers typical dictionary use patterns, the parameters for 
   tuning dictionaries, and several ideas for possible optimizations. 
*/ 
 
PyAPI_DATA(PyTypeObject) PyDict_Type; 
 
#define PyDict_Check(op) \ 
                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS) 
#define PyDict_CheckExact(op) Py_IS_TYPE(op, &PyDict_Type)
 
PyAPI_FUNC(PyObject *) PyDict_New(void); 
PyAPI_FUNC(PyObject *) PyDict_GetItem(PyObject *mp, PyObject *key); 
PyAPI_FUNC(PyObject *) PyDict_GetItemWithError(PyObject *mp, PyObject *key); 
PyAPI_FUNC(int) PyDict_SetItem(PyObject *mp, PyObject *key, PyObject *item); 
PyAPI_FUNC(int) PyDict_DelItem(PyObject *mp, PyObject *key); 
PyAPI_FUNC(void) PyDict_Clear(PyObject *mp); 
PyAPI_FUNC(int) PyDict_Next( 
    PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value); 
PyAPI_FUNC(PyObject *) PyDict_Keys(PyObject *mp); 
PyAPI_FUNC(PyObject *) PyDict_Values(PyObject *mp); 
PyAPI_FUNC(PyObject *) PyDict_Items(PyObject *mp); 
PyAPI_FUNC(Py_ssize_t) PyDict_Size(PyObject *mp); 
PyAPI_FUNC(PyObject *) PyDict_Copy(PyObject *mp); 
PyAPI_FUNC(int) PyDict_Contains(PyObject *mp, PyObject *key); 
 
/* PyDict_Update(mp, other) is equivalent to PyDict_Merge(mp, other, 1). */ 
PyAPI_FUNC(int) PyDict_Update(PyObject *mp, PyObject *other); 
 
/* PyDict_Merge updates/merges from a mapping object (an object that 
   supports PyMapping_Keys() and PyObject_GetItem()).  If override is true, 
   the last occurrence of a key wins, else the first.  The Python 
   dict.update(other) is equivalent to PyDict_Merge(dict, other, 1). 
*/ 
PyAPI_FUNC(int) PyDict_Merge(PyObject *mp, 
                             PyObject *other,
                             int override);
 
/* PyDict_MergeFromSeq2 updates/merges from an iterable object producing 
   iterable objects of length 2.  If override is true, the last occurrence 
   of a key wins, else the first.  The Python dict constructor dict(seq2) 
   is equivalent to dict={}; PyDict_MergeFromSeq(dict, seq2, 1). 
*/ 
PyAPI_FUNC(int) PyDict_MergeFromSeq2(PyObject *d, 
                                     PyObject *seq2,
                                     int override);
 
PyAPI_FUNC(PyObject *) PyDict_GetItemString(PyObject *dp, const char *key); 
PyAPI_FUNC(int) PyDict_SetItemString(PyObject *dp, const char *key, PyObject *item); 
PyAPI_FUNC(int) PyDict_DelItemString(PyObject *dp, const char *key); 
 
/* Dictionary (keys, values, items) views */

PyAPI_DATA(PyTypeObject) PyDictKeys_Type;
PyAPI_DATA(PyTypeObject) PyDictValues_Type;
PyAPI_DATA(PyTypeObject) PyDictItems_Type;

#define PyDictKeys_Check(op) PyObject_TypeCheck(op, &PyDictKeys_Type)
#define PyDictValues_Check(op) PyObject_TypeCheck(op, &PyDictValues_Type)
#define PyDictItems_Check(op) PyObject_TypeCheck(op, &PyDictItems_Type)
/* This excludes Values, since they are not sets. */
# define PyDictViewSet_Check(op) \
    (PyDictKeys_Check(op) || PyDictItems_Check(op))

/* Dictionary (key, value, items) iterators */

PyAPI_DATA(PyTypeObject) PyDictIterKey_Type;
PyAPI_DATA(PyTypeObject) PyDictIterValue_Type;
PyAPI_DATA(PyTypeObject) PyDictIterItem_Type;

PyAPI_DATA(PyTypeObject) PyDictRevIterKey_Type;
PyAPI_DATA(PyTypeObject) PyDictRevIterItem_Type;
PyAPI_DATA(PyTypeObject) PyDictRevIterValue_Type;


#ifndef Py_LIMITED_API 
#  define Py_CPYTHON_DICTOBJECT_H
#  include  "cpython/dictobject.h"
#  undef Py_CPYTHON_DICTOBJECT_H
#endif 
 
#ifdef __cplusplus 
} 
#endif 
#endif /* !Py_DICTOBJECT_H */