diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2021-03-03 15:14:38 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2021-03-03 15:14:38 +0900 |
commit | 5ff6a8462f7461075fb39cd0d6d76e6c51ffbc9f (patch) | |
tree | ae4581c010d54ff4c58c050bb38a34ed80b42eb1 /hashmap.h | |
parent | 19729fb7029c2bb287c72c7dcc5e5a293a069d09 (diff) | |
download | git-5ff6a8462f7461075fb39cd0d6d76e6c51ffbc9f.tar.gz git-5ff6a8462f7461075fb39cd0d6d76e6c51ffbc9f.tar.bz2 git-5ff6a8462f7461075fb39cd0d6d76e6c51ffbc9f.zip |
Imported Upstream version 2.1.0upstream/2.1.0
Diffstat (limited to 'hashmap.h')
-rw-r--r-- | hashmap.h | 27 |
1 files changed, 27 insertions, 0 deletions
@@ -13,6 +13,17 @@ extern unsigned int strihash(const char *buf); extern unsigned int memhash(const void *buf, size_t len); extern unsigned int memihash(const void *buf, size_t len); +static inline unsigned int sha1hash(const unsigned char *sha1) +{ + /* + * Equivalent to 'return *(unsigned int *)sha1;', but safe on + * platforms that don't support unaligned reads. + */ + unsigned int hash; + memcpy(&hash, sha1, sizeof(hash)); + return hash; +} + /* data structures */ struct hashmap_entry { @@ -57,6 +68,14 @@ extern void *hashmap_put(struct hashmap *map, void *entry); extern void *hashmap_remove(struct hashmap *map, const void *key, const void *keydata); +static inline void *hashmap_get_from_hash(const struct hashmap *map, + unsigned int hash, const void *keydata) +{ + struct hashmap_entry key; + hashmap_entry_init(&key, hash); + return hashmap_get(map, &key, keydata); +} + /* hashmap_iter functions */ extern void hashmap_iter_init(struct hashmap *map, struct hashmap_iter *iter); @@ -68,4 +87,12 @@ static inline void *hashmap_iter_first(struct hashmap *map, return hashmap_iter_next(iter); } +/* string interning */ + +extern const void *memintern(const void *data, size_t len); +static inline const char *strintern(const char *string) +{ + return memintern(string, strlen(string)); +} + #endif |