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)
commitfb62eb7fab97cea880ea7fe4f341a4dfad14ab48
tree281d1b9daeb9a1d0a7ecd86b1e03d686a3394633
parentc123b7c5fb596d93cd015645212c379fc3c381d5
grep -w: forward to next possible position after rejected match

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>
grep.c