From 9dfe6d1e852cb54a1bc856864f69300a4a6a1fc3 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Fri, 23 Jan 2015 18:53:37 +0100 Subject: [PATCH] use std::tuple to return multiple return values, hope for copy elision. Also, removes two cases of parameter reassignment --- Server/Connection.cpp | 5 ++--- Server/Connection.h | 22 ++++++---------------- Server/RequestParser.cpp | 13 ++++++------- Server/RequestParser.h | 6 +++--- 4 files changed, 17 insertions(+), 29 deletions(-) diff --git a/Server/Connection.cpp b/Server/Connection.cpp index 27faf004f..366bb8619 100644 --- a/Server/Connection.cpp +++ b/Server/Connection.cpp @@ -67,9 +67,8 @@ void Connection::handle_read(const boost::system::error_code &error, std::size_t // no error detected, let's parse the request CompressionType compression_type(noCompression); osrm::tribool result; - std::tie(result, std::ignore) = - RequestParser().Parse(request, incoming_data_buffer.data(), - incoming_data_buffer.data() + bytes_transferred, compression_type); + std::tie(result, compression_type) = RequestParser().Parse( + request, incoming_data_buffer.data(), incoming_data_buffer.data() + bytes_transferred); // the request has been parsed if (result == osrm::tribool::yes) diff --git a/Server/Connection.h b/Server/Connection.h index 54e4e6305..024501055 100644 --- a/Server/Connection.h +++ b/Server/Connection.h @@ -28,7 +28,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef CONNECTION_H #define CONNECTION_H -// #include "RequestParser.h" #include "Http/CompressionType.h" #include "Http/Reply.h" #include "Http/Request.h" @@ -38,30 +37,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include - #include - #include +#include +#include -//workaround for incomplete std::shared_ptr compatibility in old boost versions +// workaround for incomplete std::shared_ptr compatibility in old boost versions #if BOOST_VERSION < 105300 || defined BOOST_NO_CXX11_SMART_PTR -namespace boost { -template -const T* get_pointer(std::shared_ptr const& p) +namespace boost { - return p.get(); -} +template const T *get_pointer(std::shared_ptr const &p) { return p.get(); } -template -T* get_pointer(std::shared_ptr& p) -{ - return p.get(); -} +template T *get_pointer(std::shared_ptr &p) { return p.get(); } } // namespace boost #endif - - class RequestHandler; namespace http diff --git a/Server/RequestParser.cpp b/Server/RequestParser.cpp index b3a6beebf..89c56f1e8 100644 --- a/Server/RequestParser.cpp +++ b/Server/RequestParser.cpp @@ -36,23 +36,22 @@ RequestParser::RequestParser() : state_(method_start), header({"", ""}) {} void RequestParser::Reset() { state_ = method_start; } -std::tuple -RequestParser::Parse(Request &req, char *begin, char *end, http::CompressionType &compression_type) +std::tuple +RequestParser::Parse(Request &req, char *begin, char *end) { while (begin != end) { - osrm::tribool result = consume(req, *begin++, compression_type); + osrm::tribool result = consume(req, *begin++); if (result == osrm::tribool::yes || result == osrm::tribool::no) { - return std::make_tuple(result, begin); + return std::make_tuple(result, compression_type); } } osrm::tribool result = osrm::tribool::indeterminate; - return std::make_tuple(result, begin); + return std::make_tuple(result, compression_type); } -osrm::tribool -RequestParser::consume(Request &req, char input, http::CompressionType &compression_type) +osrm::tribool RequestParser::consume(Request &req, char input) { switch (state_) { diff --git a/Server/RequestParser.h b/Server/RequestParser.h index 9a01c4484..d177b7269 100644 --- a/Server/RequestParser.h +++ b/Server/RequestParser.h @@ -48,11 +48,10 @@ class RequestParser RequestParser(); void Reset(); - std::tuple - Parse(Request &req, char *begin, char *end, CompressionType &compression_type); + std::tuple Parse(Request &req, char *begin, char *end); private: - osrm::tribool consume(Request &req, char input, CompressionType &compression_type); + osrm::tribool consume(Request &req, char input); inline bool isChar(int c); @@ -88,6 +87,7 @@ class RequestParser } state_; Header header; + CompressionType compression_type; }; } // namespace http