mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	needforspeed: stringlib refactoring: use stringlib/find for unicode
find
This commit is contained in:
		
							parent
							
								
									58b5e84d52
								
							
						
					
					
						commit
						ce4eccb0c4
					
				
					 1 changed files with 36 additions and 14 deletions
				
			
		|  | @ -3951,27 +3951,49 @@ static Py_ssize_t findstring(PyUnicodeObject *self, | |||
| } | ||||
| 
 | ||||
| Py_ssize_t PyUnicode_Find(PyObject *str, | ||||
| 		   PyObject *substr, | ||||
| 		   Py_ssize_t start, | ||||
| 		   Py_ssize_t end, | ||||
| 		   int direction) | ||||
|                           PyObject *substr, | ||||
|                           Py_ssize_t start, | ||||
|                           Py_ssize_t end, | ||||
|                           int direction) | ||||
| { | ||||
|     Py_ssize_t result; | ||||
|     PyUnicodeObject* str_obj; | ||||
|     PyUnicodeObject* sub_obj; | ||||
| 
 | ||||
|     str = PyUnicode_FromObject(str); | ||||
|     if (str == NULL) | ||||
|     str_obj = (PyUnicodeObject*) PyUnicode_FromObject(str); | ||||
|     if (!str) | ||||
| 	return -2; | ||||
|     substr = PyUnicode_FromObject(substr); | ||||
|     if (substr == NULL) { | ||||
| 	Py_DECREF(str); | ||||
|     sub_obj = (PyUnicodeObject*) PyUnicode_FromObject(substr); | ||||
|     if (!sub_obj) { | ||||
| 	Py_DECREF(str_obj); | ||||
| 	return -2; | ||||
|     } | ||||
| 
 | ||||
|     result = findstring((PyUnicodeObject *)str, | ||||
| 			(PyUnicodeObject *)substr, | ||||
| 			start, end, direction); | ||||
|     Py_DECREF(str); | ||||
|     Py_DECREF(substr); | ||||
|     if (start < 0) | ||||
|         start += str_obj->length; | ||||
|     if (start < 0) | ||||
|         start = 0; | ||||
|     if (end > str_obj->length) | ||||
|         end = str_obj->length; | ||||
|     if (end < 0) | ||||
|         end += str_obj->length; | ||||
|     if (end < 0) | ||||
|         end = 0; | ||||
| 
 | ||||
|     if (direction > 0) | ||||
|         result = stringlib_find( | ||||
|             str_obj->str + start, end - start, sub_obj->str, sub_obj->length | ||||
|             ); | ||||
|     else | ||||
|         result = stringlib_rfind( | ||||
|             str_obj->str + start, end - start, sub_obj->str, sub_obj->length | ||||
|             ); | ||||
| 
 | ||||
|     if (result >= 0) | ||||
|         result += start; | ||||
| 
 | ||||
|     Py_DECREF(str_obj); | ||||
|     Py_DECREF(sub_obj); | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Fredrik Lundh
						Fredrik Lundh