From 503f624f277ea20c6a5bc2712cb62077a5ff86e8 Mon Sep 17 00:00:00 2001 From: akr Date: Sat, 16 Feb 2008 02:55:08 +0000 Subject: * encoding.c (rb_enc_strlen): moved to string.c. * string.c (rb_enc_strlen): use search_nonascii. (str_strlen): don't use search_nonascii. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@15498 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- string.c | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) (limited to 'string.c') diff --git a/string.c b/string.c index 4ce365f1f..0fcf3fcc9 100644 --- a/string.c +++ b/string.c @@ -588,24 +588,48 @@ rb_str_init(int argc, VALUE *argv, VALUE str) return str; } +long +rb_enc_strlen(const char *p, const char *e, rb_encoding *enc) +{ + long c; + const char *q; + + if (rb_enc_mbmaxlen(enc) == rb_enc_mbminlen(enc)) { + return (e - p) / rb_enc_mbminlen(enc); + } + else if (rb_enc_asciicompat(enc)) { + c = 0; + while (p < e) { + if (ISASCII(*p)) { + q = search_nonascii(p, e); + if (!q) + return c + (e - p); + c += q - p; + p = q; + } + p += rb_enc_mbclen(p, e, enc); + c++; + } + return c; + } + + for (c=0; p