wildmatch: advance faster in <asterisk> + <literal> patterns
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Tue, 1 Jan 2013 02:44:10 +0000 (09:44 +0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 1 Jan 2013 23:32:37 +0000 (15:32 -0800)
commit6f1a31f0aae6dbd5414b81fb6c0f4ff087146fc5
treeb65e9ec331a8edc4c26b6742ca7b8023a36a0e88
parent46983441ae17b34abee2954b87efeeefbe0768b3
wildmatch: advance faster in <asterisk> + <literal> patterns

Normally when we match "*X" on "abcX", we call dowild("X", "abcX"),
dowild("X", "bcX"), dowild("X", "cX") and dowild("X", "X"). Only the
last call may have a chance of matching. By skipping the text before
"X", we can eliminate the first three useless calls.

compat, '*/*/*' on linux-2.6.git file list 2000 times, before:
wildmatch 7s 985049us
fnmatch   2s 735541us or 34.26% faster

and after:
wildmatch 4s 492549us
fnmatch   0s 888263us or 19.77% slower

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t3070-wildmatch.sh
wildmatch.c