------------KCp9piFTOi5tPjFIS3F3Sk Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: 7bit On Fri, 12 Sep 2008 02:16:51 +1000, NARUSE, Yui <naruse / airemix.jp> wrote: > > If you split your patch into small atomic patches, > your patch will be merged rapidly. > Unfortunately this is very time consuming because string.c is changing every day lately! Some of the things in my previous patch have already been done by Matz. As a start I have attached 2 "atomic" patches to string.c. These are: substr.pat: Improves the speed of rb_str_substr(), mainly for single byte encodings, and also (less so) for fixed-width char multi-byte encodings. rb_str_substr is used frequently so even minor improvement in speed is good. split.pat: Improves the speed of String#split when the parameter is a string (at least twice as fast). Note: this patch breaks the test suite but only because of exceptions raised. The new implementation will NOT raise an error when running s.split(s2) when s is a broken string, This is COMPATIBLE with the other string methods, but INCOMPATIBLE with the previous split implementation which converted s2 to a regexp. I'll try to get the other things I have done to you later. Cheers Mike ------------KCp9piFTOi5tPjFIS3F3Sk Content-Disposition: attachment; filename=substr.pat Content-Type: application/octet-stream; name=substr.pat Content-Transfer-Encoding: Base64 SW5kZXg6IHN0cmluZy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN0cmluZy5j CShyZXZpc2lvbiAxOTM3NCkKKysrIHN0cmluZy5jCSh3b3JraW5nIGNvcHkpCkBA IC0xMTIsNyArMTEyLDcgQEAKIAogI2RlZmluZSBTVFJfRU5DX0dFVChzdHIpIHJi X2VuY19mcm9tX2luZGV4KEVOQ09ESU5HX0dFVChzdHIpKQogCi1zdGF0aWMgaW50 CitzdGF0aWMgaW5saW5lIGludAogc2luZ2xlX2J5dGVfb3B0aW1pemFibGUoVkFM VUUgc3RyKQogewogICAgIHJiX2VuY29kaW5nICplbmM7CkBAIC0xMTk0LDcgKzEx OTQsNyBAQAogICAgIHJldHVybiAoY2hhciopcDsKIH0KIAotc3RhdGljIGNoYXIq CitzdGF0aWMgaW5saW5lIGNoYXIqCiBzdHJfbnRoKGNvbnN0IGNoYXIgKnAsIGNv bnN0IGNoYXIgKmUsIGludCBudGgsIHJiX2VuY29kaW5nICplbmMsIGludCBzaW5n bGVieXRlKQogewogICAgIGlmIChzaW5nbGVieXRlKQpAQCAtMTIwOCw3ICsxMjA4 LDcgQEAKIH0KIAogLyogY2hhciBvZmZzZXQgdG8gYnl0ZSBvZmZzZXQgKi8KLXN0 YXRpYyBpbnQKK3N0YXRpYyBpbmxpbmUgaW50CiBzdHJfb2Zmc2V0KGNvbnN0IGNo YXIgKnAsIGNvbnN0IGNoYXIgKmUsIGludCBudGgsIHJiX2VuY29kaW5nICplbmMs IGludCBzaW5nbGVieXRlKQogewogICAgIGNvbnN0IGNoYXIgKnBwID0gc3RyX250 aChwLCBlLCBudGgsIGVuYywgc2luZ2xlYnl0ZSk7CkBAIC0xMjgzLDEyICsxMjgz LDI3IEBACiAgICAgcmJfZW5jb2RpbmcgKmVuYyA9IFNUUl9FTkNfR0VUKHN0cik7 CiAgICAgVkFMVUUgc3RyMjsKICAgICBjaGFyICpwLCAqcyA9IFJTVFJJTkdfUFRS KHN0ciksICplID0gcyArIFJTVFJJTkdfTEVOKHN0cik7Ci0gICAgaW50IHNpbmds ZWJ5dGU7CiAKICAgICBpZiAobGVuIDwgMCkgcmV0dXJuIFFuaWw7CiAgICAgaWYg KCFSU1RSSU5HX0xFTihzdHIpKSB7CiAJbGVuID0gMDsKICAgICB9CisgICAgaWYg KHNpbmdsZV9ieXRlX29wdGltaXphYmxlKHN0cikpIHsKKwlpZiAoYmVnID4gUlNU UklOR19MRU4oc3RyKSkgcmV0dXJuIFFuaWw7CisJaWYgKGJlZyA8IDApIHsKKwkg ICAgYmVnICs9IFJTVFJJTkdfTEVOKHN0cik7CisJICAgIGlmIChiZWcgPCAwKSBy ZXR1cm4gUW5pbDsKKwl9CisJaWYgKGJlZyArIGxlbiA+IFJTVFJJTkdfTEVOKHN0 cikpCisJICAgIGxlbiA9IFJTVFJJTkdfTEVOKHN0cikgLSBiZWc7CisJaWYgKGxl biA8PSAwKSB7CisJICAgIGxlbiA9IDA7CisJICAgIHAgPSAwOworCX0KKwllbHNl CisJICAgIHAgPSBzICsgYmVnOworCWdvdG8gc3ViOworICAgIH0KICAgICBpZiAo YmVnIDwgMCkgewogCWlmIChsZW4gPiAtYmVnKSBsZW4gPSAtYmVnOwogCWlmICgt YmVnICogcmJfZW5jX21ibWF4bGVuKGVuYykgPCBSU1RSSU5HX0xFTihzdHIpIC8g OCkgewpAQCAtMTMwOSw3ICsxMzI0LDYgQEAKICAgICBlbHNlIGlmIChiZWcgPiAw ICYmIGJlZyA+IHN0cl9zdHJsZW4oc3RyLCBlbmMpKSB7CiAJcmV0dXJuIFFuaWw7 CiAgICAgfQotICAgIHNpbmdsZWJ5dGUgPSBzaW5nbGVfYnl0ZV9vcHRpbWl6YWJs ZShzdHIpOwogICAgIGlmIChsZW4gPT0gMCkgewogCXAgPSAwOwogICAgIH0KQEAg LTEzMjAsMTcgKzEzMzQsMjQgQEAKICAgICAgICAgbGVuID0gc3RyX3V0Zjhfb2Zm c2V0KHAsIGUsIGxlbik7CiAgICAgfQogI2VuZGlmCi0gICAgZWxzZSBpZiAoKHAg PSBzdHJfbnRoKHMsIGUsIGJlZywgZW5jLCBzaW5nbGVieXRlKSkgPT0gZSkgewot CWxlbiA9IDA7Ci0gICAgfQogICAgIGVsc2UgaWYgKHJiX2VuY19tYm1heGxlbihl bmMpID09IHJiX2VuY19tYm1pbmxlbihlbmMpKSB7Ci0gICAgICAgIGlmIChsZW4g KiByYl9lbmNfbWJtYXhsZW4oZW5jKSA+IGUgLSBwKQorCWludCBjaGFyX3N6ID0g cmJfZW5jX21ibWF4bGVuKGVuYyk7CisKKwlwID0gcyArIGJlZyAqIGNoYXJfc3o7 CisJaWYgKHAgPiBlKSB7CisJICAgIHAgPSBlOworCSAgICBsZW4gPSAwOworCX0K KyAgICAgICAgZWxzZSBpZiAobGVuICogY2hhcl9zeiA+IGUgLSBwKQogICAgICAg ICAgICAgbGVuID0gZSAtIHA7CiAgICAgICAgIGVsc2UKLQkgICAgbGVuICo9IHJi X2VuY19tYm1heGxlbihlbmMpOworCSAgICBsZW4gKj0gY2hhcl9zejsKICAgICB9 CisgICAgZWxzZSBpZiAoKHAgPSBzdHJfbnRoKHMsIGUsIGJlZywgZW5jLCAwKSkg PT0gZSkgeworCWxlbiA9IDA7CisgICAgfQogICAgIGVsc2UgewotCWxlbiA9IHN0 cl9vZmZzZXQocCwgZSwgbGVuLCBlbmMsIHNpbmdsZWJ5dGUpOworCWxlbiA9IHN0 cl9vZmZzZXQocCwgZSwgbGVuLCBlbmMsIDApOwogICAgIH0KICAgc3ViOgogICAg IGlmIChsZW4gPiBSU1RSSU5HX0VNQkVEX0xFTl9NQVggJiYgYmVnICsgbGVuID09 IFJTVFJJTkdfTEVOKHN0cikpIHsK ------------KCp9piFTOi5tPjFIS3F3Sk Content-Disposition: attachment; filename=split.pat Content-Type: application/octet-stream; name=split.pat Content-Transfer-Encoding: Base64 SW5kZXg6IHN0cmluZy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN0cmluZy5j CShyZXZpc2lvbiAxOTM3NCkKKysrIHN0cmluZy5jCSh3b3JraW5nIGNvcHkpCkBA IC00OTkxLDcgKzQ5OTEsNyBAQAogICAgIHJiX2VuY29kaW5nICplbmM7CiAgICAg VkFMVUUgc3BhdDsKICAgICBWQUxVRSBsaW1pdDsKLSAgICBpbnQgYXdrX3NwbGl0 ID0gUWZhbHNlOworICAgIGVudW0ge2F3aywgc3RyaW5nLCByZWdleHB9IHNwbGl0 X3R5cGU7CiAgICAgbG9uZyBiZWcsIGVuZCwgaSA9IDA7CiAgICAgaW50IGxpbSA9 IDA7CiAgICAgVkFMVUUgcmVzdWx0LCB0bXA7CkBAIC01MDEzLDM3ICs1MDEzLDQx IEBACiAJICAgIHNwYXQgPSByYl9mczsKIAkgICAgZ290byBmc19zZXQ7CiAJfQot CWF3a19zcGxpdCA9IFF0cnVlOworCXNwbGl0X3R5cGUgPSBhd2s7CiAgICAgfQog ICAgIGVsc2UgewogICAgICAgZnNfc2V0OgogCWlmIChUWVBFKHNwYXQpID09IFRf U1RSSU5HKSB7CiAJICAgIHJiX2VuY29kaW5nICplbmMyID0gU1RSX0VOQ19HRVQo c3BhdCk7CiAKLQkgICAgaWYgKHJiX2VuY19tYm1pbmxlbihlbmMyKSA9PSAxKSB7 CisJICAgIHNwbGl0X3R5cGUgPSBzdHJpbmc7CisJICAgIGlmIChSU1RSSU5HX0xF TihzcGF0KSA9PSAwKSB7CisJCS8qIFNwZWNpYWwgY2FzZSAtIHNwbGl0IGludG8g Y2hhcnMgKi8KKwkJc3BhdCA9IHJiX3JlZ19yZWdjb21wKHNwYXQpOworCQlzcGxp dF90eXBlID0gcmVnZXhwOworCSAgICB9CisJICAgIGVsc2UgaWYgKHJiX2VuY19t Ym1pbmxlbihlbmMyKSA9PSAxKSB7CiAJCWlmIChSU1RSSU5HX0xFTihzcGF0KSA9 PSAxICYmIFJTVFJJTkdfUFRSKHNwYXQpWzBdID09ICcgJyl7Ci0JCSAgICBhd2tf c3BsaXQgPSBRdHJ1ZTsKKwkJICAgIHNwbGl0X3R5cGUgPSBhd2s7CiAJCX0KIAkg ICAgfQogCSAgICBlbHNlIHsKIAkJaW50IGw7CiAJCWlmIChyYl9lbmNfYXNjZ2V0 KFJTVFJJTkdfUFRSKHNwYXQpLCBSU1RSSU5HX0VORChzcGF0KSwgJmwsIGVuYzIp ID09ICcgJyAmJgogCQkgICAgUlNUUklOR19MRU4oc3BhdCkgPT0gbCkgewotCQkg ICAgYXdrX3NwbGl0ID0gUXRydWU7CisJCSAgICBzcGxpdF90eXBlID0gYXdrOwog CQl9CiAJICAgIH0KLQkgICAgaWYgKCFhd2tfc3BsaXQpIHsKLQkJc3BhdCA9IHJi X3JlZ19yZWdjb21wKHJiX3JlZ19xdW90ZShzcGF0KSk7Ci0JICAgIH0KIAl9CiAJ ZWxzZSB7CiAJICAgIHNwYXQgPSBnZXRfcGF0KHNwYXQsIDEpOworCSAgICBzcGxp dF90eXBlID0gcmVnZXhwOwogCX0KICAgICB9CiAKICAgICByZXN1bHQgPSByYl9h cnlfbmV3KCk7CiAgICAgYmVnID0gMDsKLSAgICBpZiAoYXdrX3NwbGl0KSB7Cisg ICAgaWYgKHNwbGl0X3R5cGUgPT0gYXdrKSB7CiAJY2hhciAqcHRyID0gUlNUUklO R19QVFIoc3RyKTsKIAljaGFyICplcHRyID0gUlNUUklOR19FTkQoc3RyKTsKIAlj aGFyICpicHRyID0gcHRyOwpAQCAtNTA3Nyw2ICs1MDgxLDMwIEBACiAJICAgIH0K IAl9CiAgICAgfQorICAgIGVsc2UgaWYgKHNwbGl0X3R5cGUgPT0gc3RyaW5nKSB7 CisJY2hhciAqcHRyID0gUlNUUklOR19QVFIoc3RyKTsKKwljaGFyICplcHRyID0g UlNUUklOR19FTkQoc3RyKTsKKwljaGFyICpzcHRyID0gUlNUUklOR19QVFIoc3Bh dCk7CisJaW50IHNsZW4gPSBSU1RSSU5HX0xFTihzcGF0KTsKKworCWlmIChpc19i cm9rZW5fc3RyaW5nKHNwYXQpKSB7CisJICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJv ciwgImludmFsaWQgYnl0ZSBzZXF1ZW5jZSBpbiAlcyIsIHJiX2VuY19uYW1lKFNU Ul9FTkNfR0VUKHNwYXQpKSk7CisJfQorCWVuYyA9IHJiX2VuY19jaGVjayhzdHIs IHNwYXQpOworCXdoaWxlIChwdHIgPCBlcHRyICYmCisJICAgICAgIChlbmQgPSBy Yl9tZW1zZWFyY2goc3B0ciwgc2xlbiwgcHRyLCBlcHRyIC0gcHRyLCBlbmMpKSA+ PSAwKSB7CisJICAgIC8qIENoZWNrIHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgYSBj aGFyICovCisJICAgIGNoYXIgKnQgPSByYl9lbmNfcmlnaHRfY2hhcl9oZWFkKHB0 ciwgcHRyICsgZW5kLCBlcHRyLCBlbmMpOworCSAgICBpZiAodCAhPSBwdHIgKyBl bmQpIHsKKwkJcHRyID0gdDsKKwkJY29udGludWU7CisJICAgIH0KKwkgICAgcmJf YXJ5X3B1c2gocmVzdWx0LCByYl9zdHJfc3Vic3RyKHN0ciwgcHRyIC0gUlNUUklO R19QVFIoc3RyKSwgZW5kKSk7CisJICAgIHB0ciArPSBlbmQgKyBzbGVuOworCSAg ICBpZiAoIU5JTF9QKGxpbWl0KSAmJiBsaW0gPD0gKytpKSBicmVhazsKKwl9CisJ YmVnID0gcHRyIC0gUlNUUklOR19QVFIoc3RyKTsKKyAgICB9CiAgICAgZWxzZSB7 CiAJbG9uZyBzdGFydCA9IGJlZzsKIAlsb25nIGlkeDsK ------------KCp9piFTOi5tPjFIS3F3Sk--