Changeset 391 for python/trunk/Objects/stringlib/partition.h
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Objects/stringlib/partition.h
r2 r391 9 9 10 10 Py_LOCAL_INLINE(PyObject*) 11 stringlib_partition( 12 PyObject* str_obj,const STRINGLIB_CHAR* str, Py_ssize_t str_len,13 PyObject* sep_obj, const STRINGLIB_CHAR* sep, Py_ssize_t sep_len14 )11 stringlib_partition(PyObject* str_obj, 12 const STRINGLIB_CHAR* str, Py_ssize_t str_len, 13 PyObject* sep_obj, 14 const STRINGLIB_CHAR* sep, Py_ssize_t sep_len) 15 15 { 16 16 PyObject* out; … … 19 19 if (sep_len == 0) { 20 20 PyErr_SetString(PyExc_ValueError, "empty separator"); 21 21 return NULL; 22 22 } 23 23 24 24 out = PyTuple_New(3); 25 25 if (!out) 26 26 return NULL; 27 27 28 pos = fastsearch(str, str_len, sep, sep_len, FAST_SEARCH);28 pos = fastsearch(str, str_len, sep, sep_len, -1, FAST_SEARCH); 29 29 30 30 if (pos < 0) { 31 Py_INCREF(str_obj); 32 PyTuple_SET_ITEM(out, 0, (PyObject*) str_obj); 33 Py_INCREF(STRINGLIB_EMPTY); 34 PyTuple_SET_ITEM(out, 1, (PyObject*) STRINGLIB_EMPTY); 35 Py_INCREF(STRINGLIB_EMPTY); 36 PyTuple_SET_ITEM(out, 2, (PyObject*) STRINGLIB_EMPTY); 37 return out; 31 #if STRINGLIB_MUTABLE 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)); 35 #else 36 Py_INCREF(str_obj); 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); 42 #endif 43 return out; 38 44 } 39 45 … … 45 51 46 52 if (PyErr_Occurred()) { 47 48 53 Py_DECREF(out); 54 return NULL; 49 55 } 50 56 … … 53 59 54 60 Py_LOCAL_INLINE(PyObject*) 55 stringlib_rpartition( 56 PyObject* str_obj,const STRINGLIB_CHAR* str, Py_ssize_t str_len,57 PyObject* sep_obj, const STRINGLIB_CHAR* sep, Py_ssize_t sep_len58 )61 stringlib_rpartition(PyObject* str_obj, 62 const STRINGLIB_CHAR* str, Py_ssize_t str_len, 63 PyObject* sep_obj, 64 const STRINGLIB_CHAR* sep, Py_ssize_t sep_len) 59 65 { 60 66 PyObject* out; 61 Py_ssize_t pos , j;67 Py_ssize_t pos; 62 68 63 69 if (sep_len == 0) { 64 70 PyErr_SetString(PyExc_ValueError, "empty separator"); 65 71 return NULL; 66 72 } 67 73 68 74 out = PyTuple_New(3); 69 75 if (!out) 70 76 return NULL; 71 77 72 /* XXX - create reversefastsearch helper! */ 73 pos = -1; 74 for (j = str_len - sep_len; j >= 0; --j) 75 if (STRINGLIB_CMP(str+j, sep, sep_len) == 0) { 76 pos = j; 77 break; 78 } 78 pos = fastsearch(str, str_len, sep, sep_len, -1, FAST_RSEARCH); 79 79 80 80 if (pos < 0) { 81 Py_INCREF(STRINGLIB_EMPTY); 82 PyTuple_SET_ITEM(out, 0, (PyObject*) STRINGLIB_EMPTY); 83 Py_INCREF(STRINGLIB_EMPTY); 84 PyTuple_SET_ITEM(out, 1, (PyObject*) STRINGLIB_EMPTY); 85 Py_INCREF(str_obj); 86 PyTuple_SET_ITEM(out, 2, (PyObject*) str_obj); 87 return out; 81 #if STRINGLIB_MUTABLE 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)); 85 #else 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); 90 Py_INCREF(str_obj); 91 PyTuple_SET_ITEM(out, 2, (PyObject*) str_obj); 92 #endif 93 return out; 88 94 } 89 95 … … 95 101 96 102 if (PyErr_Occurred()) { 97 98 103 Py_DECREF(out); 104 return NULL; 99 105 } 100 106 … … 103 109 104 110 #endif 105 106 /*107 Local variables:108 c-basic-offset: 4109 indent-tabs-mode: nil110 End:111 */
Note:
See TracChangeset
for help on using the changeset viewer.