summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2015-07-20 19:58:29 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2015-07-20 19:58:29 (GMT)
commitc8fe04484e605980e68c5878bbf9bb5900a6b0c9 (patch)
tree7760e2a4f45b06fe47893779127a1184b72f24d4 /Objects
parentfd44384f33ebe0fe4e26289c2f0a0d705624aa15 (diff)
parentd92d4efe3d1fba48e8b20ec42bec243abea32545 (diff)
downloadcpython-c8fe04484e605980e68c5878bbf9bb5900a6b0c9.zip
cpython-c8fe04484e605980e68c5878bbf9bb5900a6b0c9.tar.gz
cpython-c8fe04484e605980e68c5878bbf9bb5900a6b0c9.tar.bz2
Issue #23573: Restored optimization of bytes.rfind() and bytearray.rfind()
for single-byte argument on Linux.
Diffstat (limited to 'Objects')
-rw-r--r--Objects/bytearrayobject.c10
-rw-r--r--Objects/bytesobject.c10
2 files changed, 14 insertions, 6 deletions
diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c
index dae80d9..5647b57 100644
--- a/Objects/bytearrayobject.c
+++ b/Objects/bytearrayobject.c
@@ -1171,12 +1171,16 @@ bytearray_find_internal(PyByteArrayObject *self, PyObject *args, int dir)
ADJUST_INDICES(start, end, len);
if (end - start < sub_len)
res = -1;
- /* Issue #23573: FIXME, windows has no memrchr() */
- else if (sub_len == 1 && dir > 0) {
+ else if (sub_len == 1
+#ifndef HAVE_MEMRCHR
+ && dir > 0
+#endif
+ ) {
unsigned char needle = *sub;
+ int mode = (dir > 0) ? FAST_SEARCH : FAST_RSEARCH;
res = stringlib_fastsearch_memchr_1char(
PyByteArray_AS_STRING(self) + start, end - start,
- needle, needle, FAST_SEARCH);
+ needle, needle, mode);
if (res >= 0)
res += start;
}
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index 6a6e930..08275ad 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -1815,12 +1815,16 @@ bytes_find_internal(PyBytesObject *self, PyObject *args, int dir)
ADJUST_INDICES(start, end, len);
if (end - start < sub_len)
res = -1;
- /* Issue #23573: FIXME, windows has no memrchr() */
- else if (sub_len == 1 && dir > 0) {
+ else if (sub_len == 1
+#ifndef HAVE_MEMRCHR
+ && dir > 0
+#endif
+ ) {
unsigned char needle = *sub;
+ int mode = (dir > 0) ? FAST_SEARCH : FAST_RSEARCH;
res = stringlib_fastsearch_memchr_1char(
PyBytes_AS_STRING(self) + start, end - start,
- needle, needle, FAST_SEARCH);
+ needle, needle, mode);
if (res >= 0)
res += start;
}