fast-import: insert new object entries at start of hash bucket

More often than not, find_object is called for recently inserted objects.
Optimise for this case by inserting new entries at the start of the chain.
This doesn't affect the cost of new inserts but reduces the cost of find
and insert for existing object entries.

Signed-off-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
David Barr 2010-11-23 01:53:48 -06:00 коммит произвёл Junio C Hamano
Родитель 593ce2bea5
Коммит b7c1ce4f14
1 изменённых файлов: 2 добавлений и 7 удалений

Просмотреть файл

@ -539,22 +539,17 @@ static struct object_entry *insert_object(unsigned char *sha1)
{
unsigned int h = sha1[0] << 8 | sha1[1];
struct object_entry *e = object_table[h];
struct object_entry *p = NULL;
while (e) {
if (!hashcmp(sha1, e->idx.sha1))
return e;
p = e;
e = e->next;
}
e = new_object(sha1);
e->next = NULL;
e->next = object_table[h];
e->idx.offset = 0;
if (p)
p->next = e;
else
object_table[h] = e;
object_table[h] = e;
return e;
}