[PATCH] Myers matcher performance improvement
- From: Piotr Piastucki <leech miranda gmail com>
- To: meld-list <meld-list gnome org>
- Subject: [PATCH] Myers matcher performance improvement
- Date: Fri, 03 Feb 2012 12:33:44 +0100
Hi,
I am attaching a patch with a small change in Myers matcher code that
remove some operations from the inner loops and results in about 10%
performance improvement.
Regards,
Piotr
>From 1f86605a58dcb073331688a82d3de56a1cf8fa02 Mon Sep 17 00:00:00 2001
From: Piotr Piastucki <the_leech users berlios de>
Date: Thu, 2 Feb 2012 23:25:29 +0100
Subject: [PATCH] Myers matcher performance improvement
Slightly change inner loops to improve performance by about 10%
---
meld/matchers.py | 27 ++++++++++++++++++---------
1 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/meld/matchers.py b/meld/matchers.py
index 7ed4f7b..f92d743 100644
--- a/meld/matchers.py
+++ b/meld/matchers.py
@@ -232,11 +232,14 @@ class MyersSequenceMatcher(difflib.SequenceMatcher):
yv, node = t
else:
yv += 1
- snake = x = yv - km + middle
- while x < m and yv < n and a[x] == b[yv]:
+ x = yv - km + middle
+ if x < m and yv < n and a[x] == b[yv]:
+ snake = x
x += 1
yv += 1
- if x != snake:
+ while x < m and yv < n and a[x] == b[yv]:
+ x += 1
+ yv += 1
snake = x - snake
snakes.append((node, x - snake, yv - snake, snake))
node = len(snakes) - 1
@@ -249,11 +252,14 @@ class MyersSequenceMatcher(difflib.SequenceMatcher):
if yh <= t[0]:
yh, node = t
yh += 1
- snake = x = yh - km + middle
- while x < m and yh < n and a[x] == b[yh]:
+ x = yh - km + middle
+ if x < m and yh < n and a[x] == b[yh]:
+ snake = x
x += 1
yh += 1
- if x != snake:
+ while x < m and yh < n and a[x] == b[yh]:
+ x += 1
+ yh += 1
snake = x - snake
snakes.append((node, x - snake, yh - snake, snake))
node = len(snakes) - 1
@@ -264,11 +270,14 @@ class MyersSequenceMatcher(difflib.SequenceMatcher):
else:
y, node = fp[delta - 1]
y += 1
- snake = x = y - delta + middle
- while x < m and y < n and a[x] == b[y]:
+ x = y - delta + middle
+ if x < m and y < n and a[x] == b[y]:
+ snake = x
x += 1
y += 1
- if x != snake:
+ while x < m and y < n and a[x] == b[y]:
+ x += 1
+ y += 1
snake = x - snake
snakes.append((node, x - snake, y - snake, snake))
node = len(snakes) - 1
--
1.7.5.4
[Date Prev][
Date Next] [Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]