• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*[clinic input]
2 preserve
3 [clinic start generated code]*/
4 
5 PyDoc_STRVAR(_bisect_bisect_right__doc__,
6 "bisect_right($module, /, a, x, lo=0, hi=None, *, key=None)\n"
7 "--\n"
8 "\n"
9 "Return the index where to insert item x in list a, assuming a is sorted.\n"
10 "\n"
11 "The return value i is such that all e in a[:i] have e <= x, and all e in\n"
12 "a[i:] have e > x.  So if x already appears in the list, a.insert(i, x) will\n"
13 "insert just after the rightmost x already there.\n"
14 "\n"
15 "Optional args lo (default 0) and hi (default len(a)) bound the\n"
16 "slice of a to be searched.");
17 
18 #define _BISECT_BISECT_RIGHT_METHODDEF    \
19     {"bisect_right", (PyCFunction)(void(*)(void))_bisect_bisect_right, METH_FASTCALL|METH_KEYWORDS, _bisect_bisect_right__doc__},
20 
21 static Py_ssize_t
22 _bisect_bisect_right_impl(PyObject *module, PyObject *a, PyObject *x,
23                           Py_ssize_t lo, Py_ssize_t hi, PyObject *key);
24 
25 static PyObject *
_bisect_bisect_right(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)26 _bisect_bisect_right(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
27 {
28     PyObject *return_value = NULL;
29     static const char * const _keywords[] = {"a", "x", "lo", "hi", "key", NULL};
30     static _PyArg_Parser _parser = {NULL, _keywords, "bisect_right", 0};
31     PyObject *argsbuf[5];
32     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
33     PyObject *a;
34     PyObject *x;
35     Py_ssize_t lo = 0;
36     Py_ssize_t hi = -1;
37     PyObject *key = Py_None;
38     Py_ssize_t _return_value;
39 
40     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 4, 0, argsbuf);
41     if (!args) {
42         goto exit;
43     }
44     a = args[0];
45     x = args[1];
46     if (!noptargs) {
47         goto skip_optional_pos;
48     }
49     if (args[2]) {
50         {
51             Py_ssize_t ival = -1;
52             PyObject *iobj = _PyNumber_Index(args[2]);
53             if (iobj != NULL) {
54                 ival = PyLong_AsSsize_t(iobj);
55                 Py_DECREF(iobj);
56             }
57             if (ival == -1 && PyErr_Occurred()) {
58                 goto exit;
59             }
60             lo = ival;
61         }
62         if (!--noptargs) {
63             goto skip_optional_pos;
64         }
65     }
66     if (args[3]) {
67         if (!_Py_convert_optional_to_ssize_t(args[3], &hi)) {
68             goto exit;
69         }
70         if (!--noptargs) {
71             goto skip_optional_pos;
72         }
73     }
74 skip_optional_pos:
75     if (!noptargs) {
76         goto skip_optional_kwonly;
77     }
78     key = args[4];
79 skip_optional_kwonly:
80     _return_value = _bisect_bisect_right_impl(module, a, x, lo, hi, key);
81     if ((_return_value == -1) && PyErr_Occurred()) {
82         goto exit;
83     }
84     return_value = PyLong_FromSsize_t(_return_value);
85 
86 exit:
87     return return_value;
88 }
89 
90 PyDoc_STRVAR(_bisect_insort_right__doc__,
91 "insort_right($module, /, a, x, lo=0, hi=None, *, key=None)\n"
92 "--\n"
93 "\n"
94 "Insert item x in list a, and keep it sorted assuming a is sorted.\n"
95 "\n"
96 "If x is already in a, insert it to the right of the rightmost x.\n"
97 "\n"
98 "Optional args lo (default 0) and hi (default len(a)) bound the\n"
99 "slice of a to be searched.");
100 
101 #define _BISECT_INSORT_RIGHT_METHODDEF    \
102     {"insort_right", (PyCFunction)(void(*)(void))_bisect_insort_right, METH_FASTCALL|METH_KEYWORDS, _bisect_insort_right__doc__},
103 
104 static PyObject *
105 _bisect_insort_right_impl(PyObject *module, PyObject *a, PyObject *x,
106                           Py_ssize_t lo, Py_ssize_t hi, PyObject *key);
107 
108 static PyObject *
_bisect_insort_right(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)109 _bisect_insort_right(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
110 {
111     PyObject *return_value = NULL;
112     static const char * const _keywords[] = {"a", "x", "lo", "hi", "key", NULL};
113     static _PyArg_Parser _parser = {NULL, _keywords, "insort_right", 0};
114     PyObject *argsbuf[5];
115     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
116     PyObject *a;
117     PyObject *x;
118     Py_ssize_t lo = 0;
119     Py_ssize_t hi = -1;
120     PyObject *key = Py_None;
121 
122     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 4, 0, argsbuf);
123     if (!args) {
124         goto exit;
125     }
126     a = args[0];
127     x = args[1];
128     if (!noptargs) {
129         goto skip_optional_pos;
130     }
131     if (args[2]) {
132         {
133             Py_ssize_t ival = -1;
134             PyObject *iobj = _PyNumber_Index(args[2]);
135             if (iobj != NULL) {
136                 ival = PyLong_AsSsize_t(iobj);
137                 Py_DECREF(iobj);
138             }
139             if (ival == -1 && PyErr_Occurred()) {
140                 goto exit;
141             }
142             lo = ival;
143         }
144         if (!--noptargs) {
145             goto skip_optional_pos;
146         }
147     }
148     if (args[3]) {
149         if (!_Py_convert_optional_to_ssize_t(args[3], &hi)) {
150             goto exit;
151         }
152         if (!--noptargs) {
153             goto skip_optional_pos;
154         }
155     }
156 skip_optional_pos:
157     if (!noptargs) {
158         goto skip_optional_kwonly;
159     }
160     key = args[4];
161 skip_optional_kwonly:
162     return_value = _bisect_insort_right_impl(module, a, x, lo, hi, key);
163 
164 exit:
165     return return_value;
166 }
167 
168 PyDoc_STRVAR(_bisect_bisect_left__doc__,
169 "bisect_left($module, /, a, x, lo=0, hi=None, *, key=None)\n"
170 "--\n"
171 "\n"
172 "Return the index where to insert item x in list a, assuming a is sorted.\n"
173 "\n"
174 "The return value i is such that all e in a[:i] have e < x, and all e in\n"
175 "a[i:] have e >= x.  So if x already appears in the list, a.insert(i, x) will\n"
176 "insert just before the leftmost x already there.\n"
177 "\n"
178 "Optional args lo (default 0) and hi (default len(a)) bound the\n"
179 "slice of a to be searched.");
180 
181 #define _BISECT_BISECT_LEFT_METHODDEF    \
182     {"bisect_left", (PyCFunction)(void(*)(void))_bisect_bisect_left, METH_FASTCALL|METH_KEYWORDS, _bisect_bisect_left__doc__},
183 
184 static Py_ssize_t
185 _bisect_bisect_left_impl(PyObject *module, PyObject *a, PyObject *x,
186                          Py_ssize_t lo, Py_ssize_t hi, PyObject *key);
187 
188 static PyObject *
_bisect_bisect_left(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)189 _bisect_bisect_left(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
190 {
191     PyObject *return_value = NULL;
192     static const char * const _keywords[] = {"a", "x", "lo", "hi", "key", NULL};
193     static _PyArg_Parser _parser = {NULL, _keywords, "bisect_left", 0};
194     PyObject *argsbuf[5];
195     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
196     PyObject *a;
197     PyObject *x;
198     Py_ssize_t lo = 0;
199     Py_ssize_t hi = -1;
200     PyObject *key = Py_None;
201     Py_ssize_t _return_value;
202 
203     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 4, 0, argsbuf);
204     if (!args) {
205         goto exit;
206     }
207     a = args[0];
208     x = args[1];
209     if (!noptargs) {
210         goto skip_optional_pos;
211     }
212     if (args[2]) {
213         {
214             Py_ssize_t ival = -1;
215             PyObject *iobj = _PyNumber_Index(args[2]);
216             if (iobj != NULL) {
217                 ival = PyLong_AsSsize_t(iobj);
218                 Py_DECREF(iobj);
219             }
220             if (ival == -1 && PyErr_Occurred()) {
221                 goto exit;
222             }
223             lo = ival;
224         }
225         if (!--noptargs) {
226             goto skip_optional_pos;
227         }
228     }
229     if (args[3]) {
230         if (!_Py_convert_optional_to_ssize_t(args[3], &hi)) {
231             goto exit;
232         }
233         if (!--noptargs) {
234             goto skip_optional_pos;
235         }
236     }
237 skip_optional_pos:
238     if (!noptargs) {
239         goto skip_optional_kwonly;
240     }
241     key = args[4];
242 skip_optional_kwonly:
243     _return_value = _bisect_bisect_left_impl(module, a, x, lo, hi, key);
244     if ((_return_value == -1) && PyErr_Occurred()) {
245         goto exit;
246     }
247     return_value = PyLong_FromSsize_t(_return_value);
248 
249 exit:
250     return return_value;
251 }
252 
253 PyDoc_STRVAR(_bisect_insort_left__doc__,
254 "insort_left($module, /, a, x, lo=0, hi=None, *, key=None)\n"
255 "--\n"
256 "\n"
257 "Insert item x in list a, and keep it sorted assuming a is sorted.\n"
258 "\n"
259 "If x is already in a, insert it to the left of the leftmost x.\n"
260 "\n"
261 "Optional args lo (default 0) and hi (default len(a)) bound the\n"
262 "slice of a to be searched.");
263 
264 #define _BISECT_INSORT_LEFT_METHODDEF    \
265     {"insort_left", (PyCFunction)(void(*)(void))_bisect_insort_left, METH_FASTCALL|METH_KEYWORDS, _bisect_insort_left__doc__},
266 
267 static PyObject *
268 _bisect_insort_left_impl(PyObject *module, PyObject *a, PyObject *x,
269                          Py_ssize_t lo, Py_ssize_t hi, PyObject *key);
270 
271 static PyObject *
_bisect_insort_left(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)272 _bisect_insort_left(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
273 {
274     PyObject *return_value = NULL;
275     static const char * const _keywords[] = {"a", "x", "lo", "hi", "key", NULL};
276     static _PyArg_Parser _parser = {NULL, _keywords, "insort_left", 0};
277     PyObject *argsbuf[5];
278     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
279     PyObject *a;
280     PyObject *x;
281     Py_ssize_t lo = 0;
282     Py_ssize_t hi = -1;
283     PyObject *key = Py_None;
284 
285     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 4, 0, argsbuf);
286     if (!args) {
287         goto exit;
288     }
289     a = args[0];
290     x = args[1];
291     if (!noptargs) {
292         goto skip_optional_pos;
293     }
294     if (args[2]) {
295         {
296             Py_ssize_t ival = -1;
297             PyObject *iobj = _PyNumber_Index(args[2]);
298             if (iobj != NULL) {
299                 ival = PyLong_AsSsize_t(iobj);
300                 Py_DECREF(iobj);
301             }
302             if (ival == -1 && PyErr_Occurred()) {
303                 goto exit;
304             }
305             lo = ival;
306         }
307         if (!--noptargs) {
308             goto skip_optional_pos;
309         }
310     }
311     if (args[3]) {
312         if (!_Py_convert_optional_to_ssize_t(args[3], &hi)) {
313             goto exit;
314         }
315         if (!--noptargs) {
316             goto skip_optional_pos;
317         }
318     }
319 skip_optional_pos:
320     if (!noptargs) {
321         goto skip_optional_kwonly;
322     }
323     key = args[4];
324 skip_optional_kwonly:
325     return_value = _bisect_insort_left_impl(module, a, x, lo, hi, key);
326 
327 exit:
328     return return_value;
329 }
330 /*[clinic end generated code: output=aeb97db6db79bf96 input=a9049054013a1b77]*/
331