Commit b66415aa authored by octal's avatar octal

Merge branch 'danielmoraes-master'

parents b8571847 0452a7e2
# Build files
build
# Compiled Object files # Compiled Object files
*.slo *.slo
*.lo *.lo
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
#pragma once #pragma once
#include <functional>
#include <algorithm>
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
#include <memory> #include <memory>
...@@ -16,6 +18,21 @@ namespace Pistache { ...@@ -16,6 +18,21 @@ namespace Pistache {
namespace Http { namespace Http {
namespace Header { namespace Header {
std::string
toLowercase(std::string str);
struct LowercaseHash {
size_t operator()(const std::string& key) const {
return std::hash<std::string>{}(toLowercase(key));
}
};
struct LowercaseEqual {
bool operator()(const std::string& left, const std::string& right) const {
return toLowercase(left) == toLowercase(right);
}
};
class Collection { class Collection {
public: public:
...@@ -94,7 +111,12 @@ public: ...@@ -94,7 +111,12 @@ public:
private: private:
std::pair<bool, std::shared_ptr<Header>> getImpl(const std::string& name) const; std::pair<bool, std::shared_ptr<Header>> getImpl(const std::string& name) const;
std::unordered_map<std::string, std::shared_ptr<Header>> headers; std::unordered_map<
std::string,
std::shared_ptr<Header>,
LowercaseHash,
LowercaseEqual
> headers;
std::unordered_map<std::string, Raw> rawHeaders; std::unordered_map<std::string, Raw> rawHeaders;
}; };
......
...@@ -16,7 +16,12 @@ namespace Http { ...@@ -16,7 +16,12 @@ namespace Http {
namespace Header { namespace Header {
namespace { namespace {
std::unordered_map<std::string, Registry::RegistryFunc> registry; std::unordered_map<
std::string,
Registry::RegistryFunc,
LowercaseHash,
LowercaseEqual
> registry;
} }
RegisterHeader(Accept); RegisterHeader(Accept);
...@@ -35,6 +40,12 @@ RegisterHeader(Location); ...@@ -35,6 +40,12 @@ RegisterHeader(Location);
RegisterHeader(Server); RegisterHeader(Server);
RegisterHeader(UserAgent); RegisterHeader(UserAgent);
std::string
toLowercase(std::string str) {
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
return str;
}
void void
Registry::registerHeader(std::string name, Registry::RegistryFunc func) Registry::registerHeader(std::string name, Registry::RegistryFunc func)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment