aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDylan Reid <dgreid@gmail.com>2010-07-05 23:11:17 -0400
committerJunio C Hamano <gitster@pobox.com>2010-07-05 23:27:41 -0700
commitb4cf0f1784362fb4aa2383d8d5d829caa92ca3a0 (patch)
tree3b9717d07e1c72b3cad17fb4c930c03e1f111052
parent6b097788f88a29d6e171af7a9e87117cf992e833 (diff)
downloadgit-b4cf0f1784362fb4aa2383d8d5d829caa92ca3a0.tar.gz
git-b4cf0f1784362fb4aa2383d8d5d829caa92ca3a0.tar.xz
xdiff: optimise for no whitespace difference when ignoring whitespace.
In xdl_recmatch, do the memcmp to check if the two lines are equal before checking if whitespace flags are set. If the lines are identical, then there is no need to check if they differ only in whitespace. This makes the common case (there is no whitespace difference) faster. It costs the case where lines are the same length and contain whitespace differences, but the common case is more than 20% faster. Signed-off-by: Dylan Reid <dgreid@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--xdiff/xutils.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/xdiff/xutils.c b/xdiff/xutils.c
index bc12f2989..22f9bd692 100644
--- a/xdiff/xutils.c
+++ b/xdiff/xutils.c
@@ -190,8 +190,10 @@ int xdl_recmatch(const char *l1, long s1, const char *l2, long s2, long flags)
{
int i1, i2;
+ if (s1 == s2 && !memcmp(l1, l2, s1))
+ return 1;
if (!(flags & XDF_WHITESPACE_FLAGS))
- return s1 == s2 && !memcmp(l1, l2, s1);
+ return 0;
i1 = 0;
i2 = 0;