Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b05cbac

Browse files
committed
Convert some OrderedDict methods to Argument Clinic
Issue #29289. Convert methods: * fromkeys() class method * setdefault() * popitem() * move_to_end()
1 parent 0c4a828 commit b05cbac

2 files changed

Lines changed: 219 additions & 87 deletions

File tree

Objects/clinic/odictobject.c.h

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
/*[clinic input]
2+
preserve
3+
[clinic start generated code]*/
4+
5+
PyDoc_STRVAR(OrderedDict_fromkeys__doc__,
6+
"fromkeys($type, /, iterable, value=None)\n"
7+
"--\n"
8+
"\n"
9+
"New ordered dictionary with keys from S.\n"
10+
"\n"
11+
"If not specified, the value defaults to None.");
12+
13+
#define ORDEREDDICT_FROMKEYS_METHODDEF \
14+
{"fromkeys", (PyCFunction)OrderedDict_fromkeys, METH_FASTCALL|METH_CLASS, OrderedDict_fromkeys__doc__},
15+
16+
static PyObject *
17+
OrderedDict_fromkeys_impl(PyTypeObject *type, PyObject *seq, PyObject *value);
18+
19+
static PyObject *
20+
OrderedDict_fromkeys(PyTypeObject *type, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
21+
{
22+
PyObject *return_value = NULL;
23+
static const char * const _keywords[] = {"iterable", "value", NULL};
24+
static _PyArg_Parser _parser = {"O|O:fromkeys", _keywords, 0};
25+
PyObject *seq;
26+
PyObject *value = Py_None;
27+
28+
if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
29+
&seq, &value)) {
30+
goto exit;
31+
}
32+
return_value = OrderedDict_fromkeys_impl(type, seq, value);
33+
34+
exit:
35+
return return_value;
36+
}
37+
38+
PyDoc_STRVAR(OrderedDict_setdefault__doc__,
39+
"setdefault($self, /, key, default=None)\n"
40+
"--\n"
41+
"\n"
42+
"od.get(k,d), also set od[k]=d if k not in od.");
43+
44+
#define ORDEREDDICT_SETDEFAULT_METHODDEF \
45+
{"setdefault", (PyCFunction)OrderedDict_setdefault, METH_FASTCALL, OrderedDict_setdefault__doc__},
46+
47+
static PyObject *
48+
OrderedDict_setdefault_impl(PyODictObject *self, PyObject *key,
49+
PyObject *failobj);
50+
51+
static PyObject *
52+
OrderedDict_setdefault(PyODictObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
53+
{
54+
PyObject *return_value = NULL;
55+
static const char * const _keywords[] = {"key", "default", NULL};
56+
static _PyArg_Parser _parser = {"O|O:setdefault", _keywords, 0};
57+
PyObject *key;
58+
PyObject *failobj = Py_None;
59+
60+
if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
61+
&key, &failobj)) {
62+
goto exit;
63+
}
64+
return_value = OrderedDict_setdefault_impl(self, key, failobj);
65+
66+
exit:
67+
return return_value;
68+
}
69+
70+
PyDoc_STRVAR(OrderedDict_popitem__doc__,
71+
"popitem($self, /, last=True)\n"
72+
"--\n"
73+
"\n"
74+
"Return (k, v) and remove a (key, value) pair.\n"
75+
"\n"
76+
"Pairs are returned in LIFO order if last is true or FIFO order if false.");
77+
78+
#define ORDEREDDICT_POPITEM_METHODDEF \
79+
{"popitem", (PyCFunction)OrderedDict_popitem, METH_FASTCALL, OrderedDict_popitem__doc__},
80+
81+
static PyObject *
82+
OrderedDict_popitem_impl(PyODictObject *self, int last);
83+
84+
static PyObject *
85+
OrderedDict_popitem(PyODictObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
86+
{
87+
PyObject *return_value = NULL;
88+
static const char * const _keywords[] = {"last", NULL};
89+
static _PyArg_Parser _parser = {"|p:popitem", _keywords, 0};
90+
int last = 1;
91+
92+
if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
93+
&last)) {
94+
goto exit;
95+
}
96+
return_value = OrderedDict_popitem_impl(self, last);
97+
98+
exit:
99+
return return_value;
100+
}
101+
102+
PyDoc_STRVAR(OrderedDict_move_to_end__doc__,
103+
"move_to_end($self, /, key, last=True)\n"
104+
"--\n"
105+
"\n"
106+
"\"Move an existing element to the end (or beginning if last==False).\n"
107+
"\n"
108+
" Raises KeyError if the element does not exist.\n"
109+
" When last=True, acts like a fast version of self[key]=self.pop(key).");
110+
111+
#define ORDEREDDICT_MOVE_TO_END_METHODDEF \
112+
{"move_to_end", (PyCFunction)OrderedDict_move_to_end, METH_FASTCALL, OrderedDict_move_to_end__doc__},
113+
114+
static PyObject *
115+
OrderedDict_move_to_end_impl(PyODictObject *self, PyObject *key, int last);
116+
117+
static PyObject *
118+
OrderedDict_move_to_end(PyODictObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
119+
{
120+
PyObject *return_value = NULL;
121+
static const char * const _keywords[] = {"key", "last", NULL};
122+
static _PyArg_Parser _parser = {"O|p:move_to_end", _keywords, 0};
123+
PyObject *key;
124+
int last = 1;
125+
126+
if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
127+
&key, &last)) {
128+
goto exit;
129+
}
130+
return_value = OrderedDict_move_to_end_impl(self, key, last);
131+
132+
exit:
133+
return return_value;
134+
}
135+
/*[clinic end generated code: output=f2641e1277045b59 input=a9049054013a1b77]*/

0 commit comments

Comments
 (0)