summaryrefslogtreecommitdiff
path: root/hashmap.h
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2021-03-03 15:14:38 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2021-03-03 15:14:38 +0900
commit5ff6a8462f7461075fb39cd0d6d76e6c51ffbc9f (patch)
treeae4581c010d54ff4c58c050bb38a34ed80b42eb1 /hashmap.h
parent19729fb7029c2bb287c72c7dcc5e5a293a069d09 (diff)
downloadgit-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.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/hashmap.h b/hashmap.h
index a816ad47..ab7958ae 100644
--- a/hashmap.h
+++ b/hashmap.h
@@ -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