Am 5/1/2013 22:34, schrieb Jeff King:
> struct object *lookup_object(const unsigned char *sha1)
> {
> - unsigned int i;
> + unsigned int i, first;
> struct object *obj;
>
> if (!obj_hash)
> return NULL;
>
> - i = hashtable_index(sha1);
> + first = i = hashtable_index(sha1);
> while ((obj = obj_hash[i]) != NULL) {
> if (!hashcmp(sha1, obj->sha1))
> break;
> @@ -85,6 +85,11 @@ struct object *lookup_object(const unsigned char *sha1)
> if (i == obj_hash_size)
> i = 0;
> }
> + if (obj && i != first) {
> + struct object *tmp = obj_hash[i];
> + obj_hash[i] = obj_hash[first];
> + obj_hash[first] = tmp;
> + }
> return obj;
> }
This is one of the places where I think the code does not speak for itself
and a comment is warranted: The new if statement is not about correctness,
but about optimization:
/*
* Move object to where we started to look for it
* so that we do not need to walk the hash table
* the next time we look for it.
*/
or something.
-- Hannes
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html