Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
diffcore-rename.c: use new hash map implementation
author
Karsten Blees
<karsten.blees@gmail.com>
Thu, 14 Nov 2013 19:20:26 +0000
(20:20 +0100)
committer
Junio C Hamano
<gitster@pobox.com>
Mon, 18 Nov 2013 21:04:23 +0000
(13:04 -0800)
Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diffcore-rename.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
7c85f8a
)
diff --git
a/diffcore-rename.c
b/diffcore-rename.c
index cfeb408ea79d3350b97d0e429648526c5f666c7e..9b4f068eb390d9b9d53bdd91f8983432f6ec4563 100644
(file)
--- a/
diffcore-rename.c
+++ b/
diffcore-rename.c
@@
-4,7
+4,7
@@
#include "cache.h"
#include "diff.h"
#include "diffcore.h"
#include "cache.h"
#include "diff.h"
#include "diffcore.h"
-#include "hash.h"
+#include "hash
map
.h"
#include "progress.h"
/* Table of rename/copy destinations */
#include "progress.h"
/* Table of rename/copy destinations */
@@
-243,9
+243,9
@@
static int score_compare(const void *a_, const void *b_)
}
struct file_similarity {
}
struct file_similarity {
+ struct hashmap_entry entry;
int index;
struct diff_filespec *filespec;
int index;
struct diff_filespec *filespec;
- struct file_similarity *next;
};
static unsigned int hash_filespec(struct diff_filespec *filespec)
};
static unsigned int hash_filespec(struct diff_filespec *filespec)
@@
-260,21
+260,22
@@
static unsigned int hash_filespec(struct diff_filespec *filespec)
return hash;
}
return hash;
}
-static int find_identical_files(struct hash
_table
*srcs,
+static int find_identical_files(struct hash
map
*srcs,
int dst_index,
struct diff_options *options)
{
int renames = 0;
struct diff_filespec *target = rename_dst[dst_index].two;
int dst_index,
struct diff_options *options)
{
int renames = 0;
struct diff_filespec *target = rename_dst[dst_index].two;
- struct file_similarity *p, *best;
+ struct file_similarity *p, *best
, dst
;
int i = 100, best_score = -1;
/*
* Find the best source match for specified destination.
*/
best = NULL;
int i = 100, best_score = -1;
/*
* Find the best source match for specified destination.
*/
best = NULL;
- for (p = lookup_hash(hash_filespec(target), srcs); p; p = p->next) {
+ hashmap_entry_init(&dst, hash_filespec(target));
+ for (p = hashmap_get(srcs, &dst, NULL); p; p = hashmap_get_next(srcs, p)) {
int score;
struct diff_filespec *source = p->filespec;
int score;
struct diff_filespec *source = p->filespec;
@@
-309,34
+310,15
@@
static int find_identical_files(struct hash_table *srcs,
return renames;
}
return renames;
}
-static
int free_similarity_list(void *p, void *unused
)
+static
void insert_file_table(struct hashmap *table, int index, struct diff_filespec *filespec
)
{
{
- while (p) {
- struct file_similarity *entry = p;
- p = entry->next;
- free(entry);
- }
- return 0;
-}
-
-static void insert_file_table(struct hash_table *table, int index, struct diff_filespec *filespec)
-{
- void **pos;
- unsigned int hash;
struct file_similarity *entry = xmalloc(sizeof(*entry));
entry->index = index;
entry->filespec = filespec;
struct file_similarity *entry = xmalloc(sizeof(*entry));
entry->index = index;
entry->filespec = filespec;
- entry->next = NULL;
-
- hash = hash_filespec(filespec);
- pos = insert_hash(hash, entry, table);
- /* We already had an entry there? */
- if (pos) {
- entry->next = *pos;
- *pos = entry;
- }
+ hashmap_entry_init(entry, hash_filespec(filespec));
+ hashmap_add(table, entry);
}
/*
}
/*
@@
-349,11
+331,10
@@
static void insert_file_table(struct hash_table *table, int index, struct diff_f
static int find_exact_renames(struct diff_options *options)
{
int i, renames = 0;
static int find_exact_renames(struct diff_options *options)
{
int i, renames = 0;
- struct hash
_table
file_table;
+ struct hash
map
file_table;
/* Add all sources to the hash table */
/* Add all sources to the hash table */
- init_hash(&file_table);
- preallocate_hash(&file_table, rename_src_nr);
+ hashmap_init(&file_table, NULL, rename_src_nr);
for (i = 0; i < rename_src_nr; i++)
insert_file_table(&file_table, i, rename_src[i].p->one);
for (i = 0; i < rename_src_nr; i++)
insert_file_table(&file_table, i, rename_src[i].p->one);
@@
-361,11
+342,8
@@
static int find_exact_renames(struct diff_options *options)
for (i = 0; i < rename_dst_nr; i++)
renames += find_identical_files(&file_table, i, options);
for (i = 0; i < rename_dst_nr; i++)
renames += find_identical_files(&file_table, i, options);
- /* Free source file_similarity chains */
- for_each_hash(&file_table, free_similarity_list, options);
-
- /* .. and free the hash data structure */
- free_hash(&file_table);
+ /* Free the hash data structure and entries */
+ hashmap_free(&file_table, 1);
return renames;
}
return renames;
}