aboutsummaryrefslogtreecommitdiffstats
path: root/include/crow/ci_map.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/crow/ci_map.h')
-rw-r--r--include/crow/ci_map.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/include/crow/ci_map.h b/include/crow/ci_map.h
new file mode 100644
index 0000000..155d54f
--- /dev/null
+++ b/include/crow/ci_map.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include <boost/algorithm/string/predicate.hpp>
+#include <boost/functional/hash.hpp>
+#include <unordered_map>
+
+namespace crow
+{
+ struct ci_hash
+ {
+ size_t operator()(const std::string& key) const
+ {
+ std::size_t seed = 0;
+ std::locale locale;
+
+ for(auto c : key)
+ {
+ boost::hash_combine(seed, std::toupper(c, locale));
+ }
+
+ return seed;
+ }
+ };
+
+ struct ci_key_eq
+ {
+ bool operator()(const std::string& l, const std::string& r) const
+ {
+ return boost::iequals(l, r);
+ }
+ };
+
+ using ci_map = std::unordered_multimap<std::string, std::string, ci_hash, ci_key_eq>;
+}