From d94f6d6d27f41080a6502f02fe1d2a7268c11895 Mon Sep 17 00:00:00 2001 From: eidheim Date: Wed, 19 Oct 2016 09:16:02 +0200 Subject: [PATCH] Slight optimisation: less copies of shared_ptr objects --- client_http.hpp | 2 +- http_examples.cpp | 8 ++++---- https_examples.cpp | 8 ++++---- server_http.hpp | 14 +++++++------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/client_http.hpp b/client_http.hpp index 799faae..05ac640 100644 --- a/client_http.hpp +++ b/client_http.hpp @@ -145,7 +145,7 @@ namespace SimpleWeb { virtual void connect()=0; - void parse_response_header(std::shared_ptr response, std::istream& stream) const { + void parse_response_header(const std::shared_ptr &response, std::istream& stream) const { std::string line; getline(stream, line); size_t version_end=line.find(' '); diff --git a/http_examples.cpp b/http_examples.cpp index 8ab2444..dbea3a6 100644 --- a/http_examples.cpp +++ b/http_examples.cpp @@ -20,8 +20,8 @@ typedef SimpleWeb::Server HttpServer; typedef SimpleWeb::Client HttpClient; //Added for the default_resource example -void default_resource_send(const HttpServer &server, shared_ptr response, - shared_ptr ifs, shared_ptr > buffer); +void default_resource_send(const HttpServer &server, const shared_ptr &response, + const shared_ptr &ifs, const shared_ptr > &buffer); int main() { //HTTP-server at port 8080 using 1 thread @@ -167,8 +167,8 @@ int main() { return 0; } -void default_resource_send(const HttpServer &server, shared_ptr response, - shared_ptr ifs, shared_ptr > buffer) { +void default_resource_send(const HttpServer &server, const shared_ptr &response, + const shared_ptr &ifs, const shared_ptr > &buffer) { streamsize read_length; if((read_length=ifs->read(&(*buffer)[0], buffer->size()).gcount())>0) { response->write(&(*buffer)[0], read_length); diff --git a/https_examples.cpp b/https_examples.cpp index db73ebd..8642a42 100644 --- a/https_examples.cpp +++ b/https_examples.cpp @@ -20,8 +20,8 @@ typedef SimpleWeb::Server HttpsServer; typedef SimpleWeb::Client HttpsClient; //Added for the default_resource example -void default_resource_send(const HttpsServer &server, shared_ptr response, - shared_ptr ifs, shared_ptr > buffer); +void default_resource_send(const HttpsServer &server, const shared_ptr &response, + const shared_ptr &ifs, const shared_ptr > &buffer); int main() { //HTTPS-server at port 8080 using 1 thread @@ -168,8 +168,8 @@ int main() { return 0; } -void default_resource_send(const HttpsServer &server, shared_ptr response, - shared_ptr ifs, shared_ptr > buffer) { +void default_resource_send(const HttpsServer &server, const shared_ptr &response, + const shared_ptr &ifs, const shared_ptr > &buffer) { streamsize read_length; if((read_length=ifs->read(&(*buffer)[0], buffer->size()).gcount())>0) { response->write(&(*buffer)[0], read_length); diff --git a/server_http.hpp b/server_http.hpp index 1c3ba05..2b78131 100644 --- a/server_http.hpp +++ b/server_http.hpp @@ -25,7 +25,7 @@ namespace SimpleWeb { std::shared_ptr socket; - Response(std::shared_ptr socket): std::ostream(&streambuf), socket(socket) {} + Response(const std::shared_ptr &socket): std::ostream(&streambuf), socket(socket) {} public: size_t size() { @@ -174,7 +174,7 @@ namespace SimpleWeb { } ///Use this function if you need to recursively send parts of a longer message - void send(std::shared_ptr response, const std::function& callback=nullptr) const { + void send(const std::shared_ptr &response, const std::function& callback=nullptr) const { boost::asio::async_write(*response->socket, response->streambuf, [this, response, callback](const boost::system::error_code& ec, size_t /*bytes_transferred*/) { if(callback) callback(ec); @@ -195,7 +195,7 @@ namespace SimpleWeb { virtual void accept()=0; - std::shared_ptr set_timeout_on_socket(std::shared_ptr socket, long seconds) { + std::shared_ptr set_timeout_on_socket(const std::shared_ptr &socket, long seconds) { std::shared_ptr timer(new boost::asio::deadline_timer(io_service)); timer->expires_from_now(boost::posix_time::seconds(seconds)); timer->async_wait([socket](const boost::system::error_code& ec){ @@ -208,7 +208,7 @@ namespace SimpleWeb { return timer; } - void read_request_and_content(std::shared_ptr socket) { + void read_request_and_content(const std::shared_ptr &socket) { //Create new streambuf (Request::streambuf) for async_read_until() //shared_ptr is used to pass temporary objects to the asynchronous functions std::shared_ptr request(new Request()); @@ -280,7 +280,7 @@ namespace SimpleWeb { }); } - bool parse_request(std::shared_ptr request, std::istream& stream) const { + bool parse_request(const std::shared_ptr &request, std::istream& stream) const { std::string line; getline(stream, line); size_t method_end; @@ -321,7 +321,7 @@ namespace SimpleWeb { return true; } - void find_resource(std::shared_ptr socket, std::shared_ptr request) { + void find_resource(const std::shared_ptr &socket, const std::shared_ptr &request) { //Find path- and method-match, and call write_response for(auto& res: opt_resource) { if(request->method==res.first) { @@ -341,7 +341,7 @@ namespace SimpleWeb { } } - void write_response(std::shared_ptr socket, std::shared_ptr request, + void write_response(const std::shared_ptr &socket, const std::shared_ptr &request, std::function::Response>, std::shared_ptr::Request>)>& resource_function) { //Set timeout on the following boost::asio::async-read or write function