From: TOYOFUKU Chikanobu Date: 2001-07-28T06:02:46+09:00 Subject: [ruby-dev:14145] Re: BM(Boyer-Moore) search 豊福です。 まつもとさん >| m17n_hugahuga(enc, begin, p) >| begin から始まる文字列中を指す p が文字の1バイト目を >| 指しているか >|みたいのがあれば > > m17n_isleadは不要になるでしょう。となると問題は0xffの方だけ > か。あ、でもregex.cの場合に限ればBMは絞り込みだけなので「マッ > チするはずなのにしない」ってことさえなければいいのかな? > ということはそもそもisleadも不要ってことか? 0xff のことは相変わらずわかりませんが、確かに BM の絞り込みに 使われている(唯一の)islead は要らなくなりますね。 上記のインタフェースも貧乏性の私としてはさらに m17n_hugahuga(enc, begin, p, &s); /* p以前で文字先頭になる*任意の*アドレスを s に返す。 (最悪 begin を返せばよい) pに近いアドレスを返すほど後で役に立つかもしれない。 */ として p = big; ... if (j < 0) { if (m17n_hugahuga(enc, p, &big[k+1], &p)) return k+1; } としたいところです。 *** もはや用なしコードですがこの Subject のきっかけになった /* p はいつも文字の先頭を指す */ p = p0 = &big[i-llen+1]; pe = p + skip[big[i]]; while (p < pe) { p += m17n_mbclen(encode, *p); } i += p - p0; } が正常に動くかどうかどなたか教えてください。 --- 豊福 toyofuku@juice.or.jp