mirror of
https://github.com/git/git.git
synced 2024-12-05 16:04:29 +08:00
11f944dd6b
For the find_exact_renames() function, this allows us to pass the diff_options structure pointer to the low-level routines. We will use that to distinguish between the "rename" and "copy" cases. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
44 lines
1.1 KiB
C
44 lines
1.1 KiB
C
#ifndef HASH_H
|
|
#define HASH_H
|
|
|
|
/*
|
|
* These are some simple generic hash table helper functions.
|
|
* Not necessarily suitable for all users, but good for things
|
|
* where you want to just keep track of a list of things, and
|
|
* have a good hash to use on them.
|
|
*
|
|
* It keeps the hash table at roughly 50-75% free, so the memory
|
|
* cost of the hash table itself is roughly
|
|
*
|
|
* 3 * 2*sizeof(void *) * nr_of_objects
|
|
*
|
|
* bytes.
|
|
*
|
|
* FIXME: on 64-bit architectures, we waste memory. It would be
|
|
* good to have just 32-bit pointers, requiring a special allocator
|
|
* for hashed entries or something.
|
|
*/
|
|
struct hash_table_entry {
|
|
unsigned int hash;
|
|
void *ptr;
|
|
};
|
|
|
|
struct hash_table {
|
|
unsigned int size, nr;
|
|
struct hash_table_entry *array;
|
|
};
|
|
|
|
extern void *lookup_hash(unsigned int hash, const struct hash_table *table);
|
|
extern void **insert_hash(unsigned int hash, void *ptr, struct hash_table *table);
|
|
extern int for_each_hash(const struct hash_table *table, int (*fn)(void *, void *), void *data);
|
|
extern void free_hash(struct hash_table *table);
|
|
|
|
static inline void init_hash(struct hash_table *table)
|
|
{
|
|
table->size = 0;
|
|
table->nr = 0;
|
|
table->array = NULL;
|
|
}
|
|
|
|
#endif
|