convert hashmap comparison functions to oideq()
The comparison functions used for hashmaps don't care about strict ordering; they only want to compare entries for equality. Let's use the oideq() function instead, which can potentially be better optimized. Note that unlike the previous patches mass-converting calls like "!oidcmp()", this patch could actually provide an improvement even with the current implementation. Those comparison functions are passed around as function pointers, so at compile-time the compiler cannot realize that the caller (which is in another file completely) will treat the return value as a boolean. Note that this does change the return values in quite a subtle way (it's still an int, but now the sign bit is irrelevant for ordering). Because of their funny hashmap-specific signature, it's unlikely that any of these static functions would be reused for more generic ordering. But to be double-sure, let's stop using "cmp" in their names. Calling them "eq" doesn't quite work either, because the hashmap convention is actually _inverted_. "0" means "same", and non-zero means "different". So I've called them "neq" by convention here. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
67947c34ae
commit
cc00e5ce6b
@ -62,7 +62,7 @@ static const char *prio_names[] = {
|
||||
N_("head"), N_("lightweight"), N_("annotated"),
|
||||
};
|
||||
|
||||
static int commit_name_cmp(const void *unused_cmp_data,
|
||||
static int commit_name_neq(const void *unused_cmp_data,
|
||||
const void *entry,
|
||||
const void *entry_or_key,
|
||||
const void *peeled)
|
||||
@ -70,7 +70,7 @@ static int commit_name_cmp(const void *unused_cmp_data,
|
||||
const struct commit_name *cn1 = entry;
|
||||
const struct commit_name *cn2 = entry_or_key;
|
||||
|
||||
return oidcmp(&cn1->peeled, peeled ? peeled : &cn2->peeled);
|
||||
return !oideq(&cn1->peeled, peeled ? peeled : &cn2->peeled);
|
||||
}
|
||||
|
||||
static inline struct commit_name *find_commit_name(const struct object_id *peeled)
|
||||
@ -596,7 +596,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
|
||||
return cmd_name_rev(args.argc, args.argv, prefix);
|
||||
}
|
||||
|
||||
hashmap_init(&names, commit_name_cmp, NULL, 0);
|
||||
hashmap_init(&names, commit_name_neq, NULL, 0);
|
||||
for_each_rawref(get_name, NULL);
|
||||
if (!hashmap_get_size(&names) && !always)
|
||||
die(_("No names found, cannot describe anything."));
|
||||
|
Reference in New Issue
Block a user