grep -w: forward to next possible position after rejected match
authorRené Scharfe <rene.scharfe@lsrfire.ath.cx>
Fri, 9 Jan 2009 23:08:40 +0000 (00:08 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sat, 10 Jan 2009 05:33:35 +0000 (21:33 -0800)
grep -w accepts matches between non-word characters, only. If a match
from regexec() doesn't meet this criteria, grep continues its search
after the first character of that match.

We can be a bit smarter here and skip all positions that follow a word
character first, as they can't match our criteria. This way we can
consume characters quite cheaply and don't need to special-case the
handling of the beginning of a line.

Here's a contrived example command on msysgit (best of five runs):

$ time git grep -w ...... v1.6.1 >/dev/null

real 0m1.611s
user 0m0.000s
sys 0m0.015s

With the patch it's quite a bit faster:

$ time git grep -w ...... v1.6.1 >/dev/null

real 0m1.179s
user 0m0.000s
sys 0m0.015s

More common search patterns will gain a lot less, but it's a nice clean
up anyway.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
No differences found