aboutsummaryrefslogtreecommitdiff
path: root/include/Key.hpp
diff options
context:
space:
mode:
authorAleksi Lindeman <0xdec05eba@gmail.com>2018-02-13 00:46:46 +0100
committerAleksi Lindeman <0xdec05eba@gmail.com>2018-02-13 00:46:54 +0100
commit9cd9c99e4bb4bbace8ba2d4a2dbd6830750ad521 (patch)
tree2fa81b1f61f2fd04e99c832e5dee8dd2af6cf333 /include/Key.hpp
parentf24cd8b5708bdaf538508bfbca837299cecfba5b (diff)
Add database storage (in memory), need to store it on disk later
Diffstat (limited to 'include/Key.hpp')
-rw-r--r--include/Key.hpp31
1 files changed, 30 insertions, 1 deletions
diff --git a/include/Key.hpp b/include/Key.hpp
index 505050d..f7a600b 100644
--- a/include/Key.hpp
+++ b/include/Key.hpp
@@ -1,6 +1,7 @@
#pragma once
#include <opendht/infohash.h>
+#include <unordered_map>
namespace odhtdb
{
@@ -12,4 +13,32 @@ namespace odhtdb
dht::InfoHash hashedKey;
};
-} \ No newline at end of file
+
+ // Source: https://stackoverflow.com/a/11414104 (public license)
+ static unsigned int fnvHash(const unsigned char *key, int len)
+ {
+ unsigned int h = 2166136261;
+ for (int i = 0; i < len; i++)
+ h = (h * 16777619) ^ key[i];
+ return h;
+ }
+
+ struct KeyHash
+ {
+ size_t operator()(const Key &key) const
+ {
+ return fnvHash(key.hashedKey.data(), key.hashedKey.size());
+ }
+ };
+
+ struct KeyCompare
+ {
+ bool operator()(const Key &lhs, const Key &rhs) const
+ {
+ return lhs.hashedKey == rhs.hashedKey;
+ }
+ };
+
+ template <typename ValueType>
+ using KeyMap = std::unordered_map<Key, ValueType, KeyHash, KeyCompare>;
+}