diff options
author | Oleg Morozenkov <omorozenkov@gmail.com> | 2018-06-17 22:03:01 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-17 22:03:01 +0300 |
commit | a854dd975f13e71338c80d85717be6fb6e8c185a (patch) | |
tree | 6db1b94ea9ca29b72f7788f7f8c62c2ae20222c2 /include | |
parent | c8d40dccabaaa406faed6c0797a92bac811c9d0f (diff) | |
parent | b89c8f2fc73e25f1740c191faf0c7e8b9c18c9b9 (diff) |
Merge pull request #67 from JellyBrick/parser_refactor
Code optimization
Diffstat (limited to 'include')
-rw-r--r-- | include/tgbot/EventBroadcaster.h | 6 | ||||
-rw-r--r-- | include/tgbot/TgTypeParser.h | 4 | ||||
-rw-r--r-- | include/tgbot/net/HttpParser.h | 8 | ||||
-rw-r--r-- | include/tgbot/net/HttpServer.h | 4 | ||||
-rw-r--r-- | include/tgbot/net/TgWebhookServer.h | 2 |
5 files changed, 14 insertions, 10 deletions
diff --git a/include/tgbot/EventBroadcaster.h b/include/tgbot/EventBroadcaster.h index 5a41c70..0a4ebe9 100644 --- a/include/tgbot/EventBroadcaster.h +++ b/include/tgbot/EventBroadcaster.h @@ -26,7 +26,7 @@ #include <string> #include <functional> #include <vector> -#include <map> +#include <unordered_map> #include "tgbot/types/Message.h" #include "tgbot/types/InlineQuery.h" @@ -133,7 +133,7 @@ private: } inline bool broadcastCommand(const std::string command, const Message::Ptr message) const { - std::map<std::string, MessageListener>::const_iterator iter = _onCommandListeners.find(command); + std::unordered_map<std::string, MessageListener>::const_iterator iter = _onCommandListeners.find(command); if (iter == _onCommandListeners.end()) { return false; } @@ -162,7 +162,7 @@ private: } std::vector<MessageListener> _onAnyMessageListeners; - std::map<std::string, MessageListener> _onCommandListeners; + std::unordered_map<std::string, MessageListener> _onCommandListeners; std::vector<MessageListener> _onUnknownCommandListeners; std::vector<MessageListener> _onNonCommandMessageListeners; std::vector<InlineQueryListener> _onInlineQueryListeners; diff --git a/include/tgbot/TgTypeParser.h b/include/tgbot/TgTypeParser.h index a24184a..6df9f36 100644 --- a/include/tgbot/TgTypeParser.h +++ b/include/tgbot/TgTypeParser.h @@ -314,6 +314,7 @@ public: template<typename T> std::vector<std::shared_ptr<T>> parseJsonAndGetArray(JsonToTgTypeFunc<T> parseFunc, const boost::property_tree::ptree& data) const { std::vector<std::shared_ptr<T>> result; + result.reserve(data.size()); for (const std::pair<const std::string, boost::property_tree::ptree>& innerTreeItem : data) { result.push_back((this->*parseFunc)(innerTreeItem.second)); } @@ -327,6 +328,7 @@ public: if (treeItem == data.not_found()) { return result; } + result.reserve(treeItem->second.size()); for (const std::pair<const std::string, boost::property_tree::ptree>& innerTreeItem : treeItem->second) { result.push_back(parseFunc(innerTreeItem.second)); } @@ -340,6 +342,7 @@ public: if (treeItem == data.not_found()) { return result; } + result.reserve(treeItem->second.size()); for (const std::pair<const std::string, boost::property_tree::ptree>& innerTreeItem : treeItem->second) { result.push_back((this->*parseFunc)(innerTreeItem.second)); } @@ -353,6 +356,7 @@ public: if (treeItem == data.not_found()) { return result; } + result.reserve(treeItem->second.size()); for (const std::pair<const std::string, boost::property_tree::ptree>& innerTreeItem : treeItem->second) { std::vector<std::shared_ptr<T>> innerResult; for (const std::pair<const std::string, boost::property_tree::ptree>& innerInnerTreeItem : innerTreeItem.second) { diff --git a/include/tgbot/net/HttpParser.h b/include/tgbot/net/HttpParser.h index ec4c077..d40619a 100644 --- a/include/tgbot/net/HttpParser.h +++ b/include/tgbot/net/HttpParser.h @@ -24,7 +24,7 @@ #define TGBOT_HTTPPARSER_H #include <string> -#include <map> +#include <unordered_map> #include <vector> #include "tgbot/net/Url.h" @@ -43,7 +43,7 @@ public: std::string generateWwwFormUrlencoded(const std::vector<HttpReqArg>& args); std::string generateResponse(const std::string& data, const std::string& mimeType = "text/plain", short unsigned statusCode = 200, const std::string& statusStr = "OK", bool isKeepAlive = false); - inline std::string parseRequest(const std::string& data, std::map<std::string, std::string>& headers) { + inline std::string parseRequest(const std::string& data, std::unordered_map<std::string, std::string>& headers) { return parseHttp(true, data, headers); } @@ -51,7 +51,7 @@ public: return parseHttp(true, data); } - inline std::string parseResponse(const std::string& data, std::map<std::string, std::string>& headers) { + inline std::string parseResponse(const std::string& data, std::unordered_map<std::string, std::string>& headers) { return parseHttp(false, data, headers); } @@ -60,7 +60,7 @@ public: } private: - std::string parseHttp(bool isRequest, const std::string& data, std::map<std::string, std::string>& headers); + std::string parseHttp(bool isRequest, const std::string& data, std::unordered_map<std::string, std::string>& headers); std::string parseHttp(bool isRequest, const std::string& data); }; diff --git a/include/tgbot/net/HttpServer.h b/include/tgbot/net/HttpServer.h index e760e29..34cd9c7 100644 --- a/include/tgbot/net/HttpServer.h +++ b/include/tgbot/net/HttpServer.h @@ -43,7 +43,7 @@ protected: class Connection; public: - typedef std::function<std::string (const std::string&, const std::map<std::string, std::string>)> ServerHandler; + typedef std::function<std::string (const std::string&, const std::unordered_map<std::string, std::string>)> ServerHandler; HttpServer(std::shared_ptr<boost::asio::basic_socket_acceptor<Protocol>> acceptor, const ServerHandler& handler) : _acceptor(acceptor), _handler(handler) { } @@ -80,7 +80,7 @@ protected: void start() { data.reserve(10240); socket->async_receive(data, [this]() { - std::map<std::string, std::string> headers; + std::unordered_map<std::string, std::string> headers; std::string body = HttpParser::getInstance().parseResponse(data, headers); socket->async_send(_handler(body, headers)); }); diff --git a/include/tgbot/net/TgWebhookServer.h b/include/tgbot/net/TgWebhookServer.h index 9352e82..696d126 100644 --- a/include/tgbot/net/TgWebhookServer.h +++ b/include/tgbot/net/TgWebhookServer.h @@ -37,7 +37,7 @@ public: TgWebhookServer(std::shared_ptr<boost::asio::basic_socket_acceptor<Protocol>> acceptor, const typename HttpServer<Protocol>::ServerHandler& handler) = delete; TgWebhookServer(std::shared_ptr<boost::asio::basic_socket_acceptor<Protocol>> acceptor, const std::string& path, const EventHandler* eventHandler) : - HttpServer<Protocol>(acceptor, [eventHandler, &path](const std::string& data, const std::map<std::string, std::string>& headers) -> std::string { + HttpServer<Protocol>(acceptor, [eventHandler, &path](const std::string& data, const std::unordered_map<std::string, std::string>& headers) -> std::string { if (headers.at("method") == "POST" && headers.at("path") == path) { eventHandler->handleUpdate(TgTypeParser::getInstance().parseJsonAndGetUpdate(TgTypeParser::getInstance().parseJson(data))); } |