[macruby-changes] [155] MacRuby/trunk/string.c
source_changes at macosforge.org
source_changes at macosforge.org
Fri Apr 18 22:01:47 PDT 2008
Revision: 155
http://trac.macosforge.org/projects/ruby/changeset/155
Author: lsansonetti at apple.com
Date: 2008-04-18 22:01:46 -0700 (Fri, 18 Apr 2008)
Log Message:
-----------
faster #count, #delete
Modified Paths:
--------------
MacRuby/trunk/string.c
Modified: MacRuby/trunk/string.c
===================================================================
--- MacRuby/trunk/string.c 2008-04-18 20:29:09 UTC (rev 154)
+++ MacRuby/trunk/string.c 2008-04-19 05:01:46 UTC (rev 155)
@@ -5306,6 +5306,7 @@
}
search_range = CFRangeMake(0, n);
+#if 0
while (search_range.length != 0
&& CFStringFindCharacterFromSet(
(CFStringRef)str,
@@ -5315,7 +5316,58 @@
&result_range)) {
(*cb)(&search_range, (const CFRange *)&result_range, str, ctx);
}
+#else
+ CFStringInlineBuffer buf;
+ CFStringInitInlineBuffer((CFStringRef)str, &buf, search_range);
+ do {
+ long i;
+ if (search_range.location + search_range.length < n) {
+ n = search_range.location + search_range.length;
+ CFStringInitInlineBuffer((CFStringRef)str, &buf, CFRangeMake(0, n));
+ }
+
+ result_range.length = 0;
+
+ for (i = search_range.location;
+ i < search_range.location + search_range.length;
+ i++) {
+
+ UniChar c;
+
+ c = CFStringGetCharacterFromInlineBuffer(&buf, i);
+ if (CFCharacterSetIsCharacterMember((CFCharacterSetRef)charset,
+ c)) {
+ if (result_range.length == 0) {
+ result_range.location = i;
+ result_range.length = 1;
+ }
+ else {
+ if (result_range.location + result_range.length == i) {
+ result_range.length++;
+ }
+ else {
+ (*cb)(&search_range, (const CFRange *)&result_range, str,
+ ctx);
+ result_range.location = i;
+ result_range.length = 1;
+ if (search_range.location + search_range.length < n) {
+ result_range.location -= n
+ - (search_range.location + search_range.length);
+ }
+ break;
+ }
+ }
+ }
+ }
+ if (result_range.length != 0) {
+ (*cb)(&search_range, (const CFRange *)&result_range, str,
+ ctx);
+ }
+ }
+ while (search_range.length != 0 && result_range.length != 0);
+#endif
+
CFRelease(charset);
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080418/4689b509/attachment.html
More information about the macruby-changes
mailing list