patience diff: remove unnecessary string comparisons
xdl_prepare_env() calls xdl_classify_record() which arranges for the hashes of non-matching lines to be different so lines can be tested for equality by comparing just their hashes. This reduces the time taken to calculate the diff of v2.28.0 to v2.29.0 by ~3-4%. Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
e4f4299859
commit
204aa2d24d
@ -90,7 +90,7 @@ static void insert_record(xpparam_t const *xpp, int line, struct hashmap *map,
|
||||
{
|
||||
xrecord_t **records = pass == 1 ?
|
||||
map->env->xdf1.recs : map->env->xdf2.recs;
|
||||
xrecord_t *record = records[line - 1], *other;
|
||||
xrecord_t *record = records[line - 1];
|
||||
/*
|
||||
* After xdl_prepare_env() (or more precisely, due to
|
||||
* xdl_classify_record()), the "ha" member of the records (AKA lines)
|
||||
@ -104,11 +104,7 @@ static void insert_record(xpparam_t const *xpp, int line, struct hashmap *map,
|
||||
int index = (int)((record->ha << 1) % map->alloc);
|
||||
|
||||
while (map->entries[index].line1) {
|
||||
other = map->env->xdf1.recs[map->entries[index].line1 - 1];
|
||||
if (map->entries[index].hash != record->ha ||
|
||||
!xdl_recmatch(record->ptr, record->size,
|
||||
other->ptr, other->size,
|
||||
map->xpp->flags)) {
|
||||
if (map->entries[index].hash != record->ha) {
|
||||
if (++index >= map->alloc)
|
||||
index = 0;
|
||||
continue;
|
||||
@ -253,8 +249,7 @@ static int match(struct hashmap *map, int line1, int line2)
|
||||
{
|
||||
xrecord_t *record1 = map->env->xdf1.recs[line1 - 1];
|
||||
xrecord_t *record2 = map->env->xdf2.recs[line2 - 1];
|
||||
return xdl_recmatch(record1->ptr, record1->size,
|
||||
record2->ptr, record2->size, map->xpp->flags);
|
||||
return record1->ha == record2->ha;
|
||||
}
|
||||
|
||||
static int patience_diff(mmfile_t *file1, mmfile_t *file2,
|
||||
|
Loading…
Reference in New Issue
Block a user