]>
git.proxmox.com Git - mirror_edk2.git/blob - AppPkg/Applications/Python/Python-2.7.10/Objects/stringlib/partition.h
1 /* stringlib: partition implementation */
3 #ifndef STRINGLIB_PARTITION_H
4 #define STRINGLIB_PARTITION_H
6 #ifndef STRINGLIB_FASTSEARCH_H
7 #error must include "stringlib/fastsearch.h" before including this module
10 Py_LOCAL_INLINE(PyObject
*)
11 stringlib_partition(PyObject
* str_obj
,
12 const STRINGLIB_CHAR
* str
, Py_ssize_t str_len
,
14 const STRINGLIB_CHAR
* sep
, Py_ssize_t sep_len
)
20 PyErr_SetString(PyExc_ValueError
, "empty separator");
28 pos
= fastsearch(str
, str_len
, sep
, sep_len
, -1, FAST_SEARCH
);
32 PyTuple_SET_ITEM(out
, 0, STRINGLIB_NEW(str
, str_len
));
33 PyTuple_SET_ITEM(out
, 1, STRINGLIB_NEW(NULL
, 0));
34 PyTuple_SET_ITEM(out
, 2, STRINGLIB_NEW(NULL
, 0));
37 PyTuple_SET_ITEM(out
, 0, (PyObject
*) str_obj
);
38 Py_INCREF(STRINGLIB_EMPTY
);
39 PyTuple_SET_ITEM(out
, 1, (PyObject
*) STRINGLIB_EMPTY
);
40 Py_INCREF(STRINGLIB_EMPTY
);
41 PyTuple_SET_ITEM(out
, 2, (PyObject
*) STRINGLIB_EMPTY
);
46 PyTuple_SET_ITEM(out
, 0, STRINGLIB_NEW(str
, pos
));
48 PyTuple_SET_ITEM(out
, 1, sep_obj
);
50 PyTuple_SET_ITEM(out
, 2, STRINGLIB_NEW(str
+ pos
, str_len
- pos
));
52 if (PyErr_Occurred()) {
60 Py_LOCAL_INLINE(PyObject
*)
61 stringlib_rpartition(PyObject
* str_obj
,
62 const STRINGLIB_CHAR
* str
, Py_ssize_t str_len
,
64 const STRINGLIB_CHAR
* sep
, Py_ssize_t sep_len
)
70 PyErr_SetString(PyExc_ValueError
, "empty separator");
78 pos
= fastsearch(str
, str_len
, sep
, sep_len
, -1, FAST_RSEARCH
);
82 PyTuple_SET_ITEM(out
, 0, STRINGLIB_NEW(NULL
, 0));
83 PyTuple_SET_ITEM(out
, 1, STRINGLIB_NEW(NULL
, 0));
84 PyTuple_SET_ITEM(out
, 2, STRINGLIB_NEW(str
, str_len
));
86 Py_INCREF(STRINGLIB_EMPTY
);
87 PyTuple_SET_ITEM(out
, 0, (PyObject
*) STRINGLIB_EMPTY
);
88 Py_INCREF(STRINGLIB_EMPTY
);
89 PyTuple_SET_ITEM(out
, 1, (PyObject
*) STRINGLIB_EMPTY
);
91 PyTuple_SET_ITEM(out
, 2, (PyObject
*) str_obj
);
96 PyTuple_SET_ITEM(out
, 0, STRINGLIB_NEW(str
, pos
));
98 PyTuple_SET_ITEM(out
, 1, sep_obj
);
100 PyTuple_SET_ITEM(out
, 2, STRINGLIB_NEW(str
+ pos
, str_len
- pos
));
102 if (PyErr_Occurred()) {