summaryrefslogtreecommitdiff
path: root/ext/mbstring/libmbfl
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2017-08-04 18:38:36 +0200
committerNikita Popov <nikita.ppv@gmail.com>2017-08-04 22:22:58 +0200
commitf24db7686ecc72d344b42b186839f3ea9086ee19 (patch)
treee7f7f7aea3f4583aa63544ad058c6abd09f02c41 /ext/mbstring/libmbfl
parent633a471ba0c9acc6d1cca04880c1e69e7b2dc18e (diff)
downloadphp-git-f24db7686ecc72d344b42b186839f3ea9086ee19.tar.gz
Optimize mb_ord()
Don't perform a full encoding conversion into UCS4-BE, instead only perform an input conversion into a wchar device.
Diffstat (limited to 'ext/mbstring/libmbfl')
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter.c12
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_convert.c11
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_convert.h1
3 files changed, 13 insertions, 11 deletions
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c
index 8f18525feb..94ecc57491 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c
@@ -1,6 +1,5 @@
/*
* charset=UTF-8
- * vim600: encoding=utf-8
*/
/*
@@ -1053,16 +1052,7 @@ mbfl_substr_count(
if (filter == NULL) {
return (size_t) -4;
}
- p = needle->val;
- n = needle->len;
- if (p != NULL) {
- while (n > 0) {
- if ((*filter->filter_function)(*p++, filter) < 0) {
- break;
- }
- n--;
- }
- }
+ mbfl_convert_filter_feed_string(filter, needle->val, needle->len);
mbfl_convert_filter_flush(filter);
mbfl_convert_filter_delete(filter);
pc.needle_len = pc.needle.pos;
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
index 1f4d81ae66..7a0fb60264 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
@@ -239,6 +239,17 @@ mbfl_convert_filter_feed(int c, mbfl_convert_filter *filter)
}
int
+mbfl_convert_filter_feed_string(mbfl_convert_filter *filter, const unsigned char *p, size_t len) {
+ while (len > 0) {
+ if ((*filter->filter_function)(*p++, filter) < 0) {
+ return -1;
+ }
+ len--;
+ }
+ return 0;
+}
+
+int
mbfl_convert_filter_flush(mbfl_convert_filter *filter)
{
(*filter->filter_flush)(filter);
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.h b/ext/mbstring/libmbfl/mbfl/mbfl_convert.h
index af440becd2..31e54c61d1 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.h
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.h
@@ -69,6 +69,7 @@ MBFLAPI extern mbfl_convert_filter *mbfl_convert_filter_new2(
void *data );
MBFLAPI extern void mbfl_convert_filter_delete(mbfl_convert_filter *filter);
MBFLAPI extern int mbfl_convert_filter_feed(int c, mbfl_convert_filter *filter);
+MBFLAPI extern int mbfl_convert_filter_feed_string(mbfl_convert_filter *filter, const unsigned char *p, size_t len);
MBFLAPI extern int mbfl_convert_filter_flush(mbfl_convert_filter *filter);
MBFLAPI extern void mbfl_convert_filter_reset(mbfl_convert_filter *filter, const mbfl_encoding *from, const mbfl_encoding *to);
MBFLAPI extern void mbfl_convert_filter_copy(mbfl_convert_filter *src, mbfl_convert_filter *dist);