hash-ll, hashmap: move oidhash() to hash-ll
oidhash() was used by both hashmap and khash, which makes sense. However, the location of this function in hashmap.[ch] meant that khash.h had to depend upon hashmap.h, making people unfamiliar with khash think that it was built upon hashmap. (Or at least, I personally was confused for a while about this in the past.) Move this function to hash-ll, so that khash.h can stop depending upon hashmap.h. This has another benefit as well: it allows us to remove hashmap.h's dependency on hash-ll.h. While some callers of hashmap.h were making use of oidhash, most were not, so this change provides another way to reduce the number of includes. Diff best viewed with `--color-moved`. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
a034e9106f
commit
b9a7ac2c68
19
hash-ll.h
19
hash-ll.h
@ -270,6 +270,25 @@ static inline void oid_set_algo(struct object_id *oid, const struct git_hash_alg
|
||||
oid->algo = hash_algo_by_ptr(algop);
|
||||
}
|
||||
|
||||
/*
|
||||
* Converts a cryptographic hash (e.g. SHA-1) into an int-sized hash code
|
||||
* for use in hash tables. Cryptographic hashes are supposed to have
|
||||
* uniform distribution, so in contrast to `memhash()`, this just copies
|
||||
* the first `sizeof(int)` bytes without shuffling any bits. Note that
|
||||
* the results will be different on big-endian and little-endian
|
||||
* platforms, so they should not be stored or transferred over the net.
|
||||
*/
|
||||
static inline unsigned int oidhash(const struct object_id *oid)
|
||||
{
|
||||
/*
|
||||
* Equivalent to 'return *(unsigned int *)oid->hash;', but safe on
|
||||
* platforms that don't support unaligned reads.
|
||||
*/
|
||||
unsigned int hash;
|
||||
memcpy(&hash, oid->hash, sizeof(hash));
|
||||
return hash;
|
||||
}
|
||||
|
||||
const char *empty_tree_oid_hex(void);
|
||||
const char *empty_blob_oid_hex(void);
|
||||
|
||||
|
Reference in New Issue
Block a user