ruby-changes:4008
From: ko1@a...
Date: Sat, 16 Feb 2008 11:55:22 +0900 (JST)
Subject: [ruby-changes:4008] akr - Ruby:r15498 (trunk): * encoding.c (rb_enc_strlen): moved to string.c.
akr 2008-02-16 11:55:08 +0900 (Sat, 16 Feb 2008)
New Revision: 15498
Modified files:
trunk/ChangeLog
trunk/encoding.c
trunk/string.c
Log:
* encoding.c (rb_enc_strlen): moved to string.c.
* string.c (rb_enc_strlen): use search_nonascii.
(str_strlen): don't use search_nonascii.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/string.c?r1=15498&r2=15497&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15498&r2=15497&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/encoding.c?r1=15498&r2=15497&diff_format=u
Index: encoding.c
===================================================================
--- encoding.c (revision 15497)
+++ encoding.c (revision 15498)
@@ -720,23 +720,6 @@
return rb_enc_from_encoding(enc);
}
-long
-rb_enc_strlen(const char *p, const char *e, rb_encoding *enc)
-{
- long c;
-
- if (rb_enc_mbmaxlen(enc) == rb_enc_mbminlen(enc)) {
- return (e - p) / rb_enc_mbminlen(enc);
- }
-
- for (c=0; p<e; c++) {
- int n = rb_enc_mbclen(p, e, enc);
-
- p += n;
- }
- return c;
-}
-
int
rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc)
{
Index: ChangeLog
===================================================================
--- ChangeLog (revision 15497)
+++ ChangeLog (revision 15498)
@@ -1,3 +1,10 @@
+Sat Feb 16 11:53:35 2008 Tanaka Akira <akr@f...>
+
+ * encoding.c (rb_enc_strlen): moved to string.c.
+
+ * string.c (rb_enc_strlen): use search_nonascii.
+ (str_strlen): don't use search_nonascii.
+
Sat Feb 16 11:45:31 2008 Tanaka Akira <akr@f...>
* lib/require_relative.rb: check require_relative call in eval.
Index: string.c
===================================================================
--- string.c (revision 15497)
+++ string.c (revision 15498)
@@ -588,24 +588,48 @@
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<e; c++) {
+ p += rb_enc_mbclen(p, e, enc);
+ }
+ return c;
+}
+
static long
str_strlen(VALUE str, rb_encoding *enc)
{
- long len = 0;
+ long len;
const char *p, *e;
if (single_byte_optimizable(str)) return RSTRING_LEN(str);
if (!enc) enc = STR_ENC_GET(str);
p = RSTRING_PTR(str);
e = RSTRING_END(str);
- if (rb_enc_asciicompat(enc)) {
- const char *p2 = search_nonascii(p, e);
-
- if (!p2) return RSTRING_LEN(str);
- len = p2 - p;
- p = p2;
- }
- len += rb_enc_strlen(p, e, enc);
+ len = rb_enc_strlen(p, e, enc);
if (len < 0) {
rb_raise(rb_eArgError, "invalid mbstring sequence");
}
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/