Commit 8c5de009 authored by liuminghang's avatar liuminghang

use string in unordered_map

parent 942f0dd6
...@@ -436,22 +436,20 @@ std::ostream& operator<<(std::ostream& os, const RedisResponse& response) { ...@@ -436,22 +436,20 @@ std::ostream& operator<<(std::ostream& os, const RedisResponse& response) {
return os; return os;
} }
bool RedisService::AddCommandHandler(const std::string& name, RedisCommandHandler* handler) { bool RedisService::AddCommandHandler(const butil::StringPiece& name,
butil::StringPiece name_piece(name); RedisCommandHandler* handler) {
auto it = _command_map.find(name_piece); std::string lcname = StringToLowerASCII(name.as_string());
auto it = _command_map.find(lcname);
if (it != _command_map.end()) { if (it != _command_map.end()) {
LOG(ERROR) << "redis command name=" << name << " exist"; LOG(ERROR) << "redis command name=" << name << " exist";
return false; return false;
} }
_command_map[lcname] = handler;
_all_commands.push_back(name);
name_piece = _all_commands.back();
_command_map[name_piece] = handler;
return true; return true;
} }
RedisCommandHandler* RedisService::FindCommandHandler(const butil::StringPiece& name) const { RedisCommandHandler* RedisService::FindCommandHandler(const butil::StringPiece& name) const {
auto it = _command_map.find(name); auto it = _command_map.find(name.as_string());
if (it != _command_map.end()) { if (it != _command_map.end()) {
return it->second; return it->second;
} }
......
...@@ -222,16 +222,14 @@ public: ...@@ -222,16 +222,14 @@ public:
virtual ~RedisService() {} virtual ~RedisService() {}
// Call this function to register `handler` that can handle command `name`. // Call this function to register `handler` that can handle command `name`.
bool AddCommandHandler(const std::string& name, RedisCommandHandler* handler); bool AddCommandHandler(const butil::StringPiece& name, RedisCommandHandler* handler);
// This function should not be touched by user and used by brpc deverloper only. // This function should not be touched by user and used by brpc deverloper only.
RedisCommandHandler* FindCommandHandler(const butil::StringPiece& name) const; RedisCommandHandler* FindCommandHandler(const butil::StringPiece& name) const;
private: private:
typedef BUTIL_HASH_NAMESPACE::hash<butil::StringPiece> StringPieceHasher; typedef std::unordered_map<std::string, RedisCommandHandler*> CommandMap;
typedef std::unordered_map<butil::StringPiece, RedisCommandHandler*, StringPieceHasher> CommandMap;
CommandMap _command_map; CommandMap _command_map;
std::list<std::string> _all_commands;
}; };
enum RedisCommandHandlerResult { enum RedisCommandHandlerResult {
......
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