hashmap: use *_entry APIs to wrap container_of
Using `container_of' can be verbose and choosing names for intermediate "struct hashmap_entry" pointers is a hard problem. So introduce "*_entry" APIs inspired by similar linked-list APIs in the Linux kernel. Unfortunately, `__typeof__' is not portable C, so we need an extra parameter to specify the type. Signed-off-by: Eric Wong <e@80x24.org> Reviewed-by: Derrick Stolee <stolee@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
6bcbdfb277
commit
f0e63c4113
@ -274,23 +274,19 @@ static int find_identical_files(struct hashmap *srcs,
|
||||
struct diff_options *options)
|
||||
{
|
||||
int renames = 0;
|
||||
struct hashmap_entry *ent;
|
||||
struct diff_filespec *target = rename_dst[dst_index].two;
|
||||
struct file_similarity *p, *best = NULL;
|
||||
int i = 100, best_score = -1;
|
||||
unsigned int hash = hash_filespec(options->repo, target);
|
||||
|
||||
/*
|
||||
* Find the best source match for specified destination.
|
||||
*/
|
||||
ent = hashmap_get_from_hash(srcs,
|
||||
hash_filespec(options->repo, target),
|
||||
NULL);
|
||||
for (; ent; ent = hashmap_get_next(srcs, ent)) {
|
||||
p = hashmap_get_entry_from_hash(srcs, hash, NULL,
|
||||
struct file_similarity, entry);
|
||||
hashmap_for_each_entry_from(srcs, p, struct file_similarity, entry) {
|
||||
int score;
|
||||
struct diff_filespec *source;
|
||||
|
||||
p = container_of(ent, struct file_similarity, entry);
|
||||
source = p->filespec;
|
||||
struct diff_filespec *source = p->filespec;
|
||||
|
||||
/* False hash collision? */
|
||||
if (!oideq(&source->oid, &target->oid))
|
||||
|
Reference in New Issue
Block a user