summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorOleg Morozenkov <omorozenkov@gmail.com>2018-06-17 22:03:01 +0300
committerGitHub <noreply@github.com>2018-06-17 22:03:01 +0300
commita854dd975f13e71338c80d85717be6fb6e8c185a (patch)
tree6db1b94ea9ca29b72f7788f7f8c62c2ae20222c2 /include
parentc8d40dccabaaa406faed6c0797a92bac811c9d0f (diff)
parentb89c8f2fc73e25f1740c191faf0c7e8b9c18c9b9 (diff)
Merge pull request #67 from JellyBrick/parser_refactor
Code optimization
Diffstat (limited to 'include')
-rw-r--r--include/tgbot/EventBroadcaster.h6
-rw-r--r--include/tgbot/TgTypeParser.h4
-rw-r--r--include/tgbot/net/HttpParser.h8
-rw-r--r--include/tgbot/net/HttpServer.h4
-rw-r--r--include/tgbot/net/TgWebhookServer.h2
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)));
}