diff options
author | Elijah Newren <newren@gmail.com> | 2023-05-16 08:34:07 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-06-21 22:39:54 +0200 |
commit | b9a7ac2c6897efbf78fd546b21986498577e3585 (patch) | |
tree | 0d411dad1f60c27936b5b86d39ab88f2e2ac7d2b | |
parent | object-store-ll.h: split this header out of object-store.h (diff) | |
download | git-b9a7ac2c6897efbf78fd546b21986498577e3585.tar.xz git-b9a7ac2c6897efbf78fd546b21986498577e3585.zip |
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>
-rw-r--r-- | decorate.c | 1 | ||||
-rw-r--r-- | dir.h | 1 | ||||
-rw-r--r-- | hash-ll.h | 19 | ||||
-rw-r--r-- | hashmap.h | 21 | ||||
-rw-r--r-- | khash.h | 1 | ||||
-rw-r--r-- | remote.h | 1 | ||||
-rw-r--r-- | serve.c | 1 |
7 files changed, 22 insertions, 23 deletions
diff --git a/decorate.c b/decorate.c index 71e79daa82..a5c43c0c14 100644 --- a/decorate.c +++ b/decorate.c @@ -3,7 +3,6 @@ * data. */ #include "git-compat-util.h" -#include "hashmap.h" #include "object.h" #include "decorate.h" @@ -1,6 +1,7 @@ #ifndef DIR_H #define DIR_H +#include "hash-ll.h" #include "hashmap.h" #include "pathspec.h" #include "statinfo.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); @@ -1,8 +1,6 @@ #ifndef HASHMAP_H #define HASHMAP_H -#include "hash-ll.h" - /* * Generic implementation of hash-based key-value mappings. * @@ -121,25 +119,6 @@ unsigned int memihash(const void *buf, size_t len); unsigned int memihash_cont(unsigned int hash_seed, const void *buf, size_t len); /* - * 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; -} - -/* * struct hashmap_entry is an opaque structure representing an entry in the * hash table. * Ideally it should be followed by an int-sized member to prevent unused @@ -26,7 +26,6 @@ #ifndef __AC_KHASH_H #define __AC_KHASH_H -#include "hashmap.h" #include "hash.h" #define AC_VERSION_KHASH_H "0.2.8" @@ -1,6 +1,7 @@ #ifndef REMOTE_H #define REMOTE_H +#include "hash-ll.h" #include "hashmap.h" #include "refspec.h" @@ -1,6 +1,7 @@ #include "git-compat-util.h" #include "repository.h" #include "config.h" +#include "hash-ll.h" #include "pkt-line.h" #include "version.h" #include "ls-refs.h" |