Slight optimisation: less copies of shared_ptr objects

This commit is contained in:
eidheim 2016-10-19 09:16:02 +02:00
commit d94f6d6d27
4 changed files with 16 additions and 16 deletions

View file

@ -145,7 +145,7 @@ namespace SimpleWeb {
virtual void connect()=0;
void parse_response_header(std::shared_ptr<Response> response, std::istream& stream) const {
void parse_response_header(const std::shared_ptr<Response> &response, std::istream& stream) const {
std::string line;
getline(stream, line);
size_t version_end=line.find(' ');

View file

@ -20,8 +20,8 @@ typedef SimpleWeb::Server<SimpleWeb::HTTP> HttpServer;
typedef SimpleWeb::Client<SimpleWeb::HTTP> HttpClient;
//Added for the default_resource example
void default_resource_send(const HttpServer &server, shared_ptr<HttpServer::Response> response,
shared_ptr<ifstream> ifs, shared_ptr<vector<char> > buffer);
void default_resource_send(const HttpServer &server, const shared_ptr<HttpServer::Response> &response,
const shared_ptr<ifstream> &ifs, const shared_ptr<vector<char> > &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<HttpServer::Response> response,
shared_ptr<ifstream> ifs, shared_ptr<vector<char> > buffer) {
void default_resource_send(const HttpServer &server, const shared_ptr<HttpServer::Response> &response,
const shared_ptr<ifstream> &ifs, const shared_ptr<vector<char> > &buffer) {
streamsize read_length;
if((read_length=ifs->read(&(*buffer)[0], buffer->size()).gcount())>0) {
response->write(&(*buffer)[0], read_length);

View file

@ -20,8 +20,8 @@ typedef SimpleWeb::Server<SimpleWeb::HTTPS> HttpsServer;
typedef SimpleWeb::Client<SimpleWeb::HTTPS> HttpsClient;
//Added for the default_resource example
void default_resource_send(const HttpsServer &server, shared_ptr<HttpsServer::Response> response,
shared_ptr<ifstream> ifs, shared_ptr<vector<char> > buffer);
void default_resource_send(const HttpsServer &server, const shared_ptr<HttpsServer::Response> &response,
const shared_ptr<ifstream> &ifs, const shared_ptr<vector<char> > &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<HttpsServer::Response> response,
shared_ptr<ifstream> ifs, shared_ptr<vector<char> > buffer) {
void default_resource_send(const HttpsServer &server, const shared_ptr<HttpsServer::Response> &response,
const shared_ptr<ifstream> &ifs, const shared_ptr<vector<char> > &buffer) {
streamsize read_length;
if((read_length=ifs->read(&(*buffer)[0], buffer->size()).gcount())>0) {
response->write(&(*buffer)[0], read_length);

View file

@ -25,7 +25,7 @@ namespace SimpleWeb {
std::shared_ptr<socket_type> socket;
Response(std::shared_ptr<socket_type> socket): std::ostream(&streambuf), socket(socket) {}
Response(const std::shared_ptr<socket_type> &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> response, const std::function<void(const boost::system::error_code&)>& callback=nullptr) const {
void send(const std::shared_ptr<Response> &response, const std::function<void(const boost::system::error_code&)>& 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<boost::asio::deadline_timer> set_timeout_on_socket(std::shared_ptr<socket_type> socket, long seconds) {
std::shared_ptr<boost::asio::deadline_timer> set_timeout_on_socket(const std::shared_ptr<socket_type> &socket, long seconds) {
std::shared_ptr<boost::asio::deadline_timer> 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_type> socket) {
void read_request_and_content(const std::shared_ptr<socket_type> &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> request(new Request());
@ -280,7 +280,7 @@ namespace SimpleWeb {
});
}
bool parse_request(std::shared_ptr<Request> request, std::istream& stream) const {
bool parse_request(const std::shared_ptr<Request> &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_type> socket, std::shared_ptr<Request> request) {
void find_resource(const std::shared_ptr<socket_type> &socket, const std::shared_ptr<Request> &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_type> socket, std::shared_ptr<Request> request,
void write_response(const std::shared_ptr<socket_type> &socket, const std::shared_ptr<Request> &request,
std::function<void(std::shared_ptr<typename ServerBase<socket_type>::Response>,
std::shared_ptr<typename ServerBase<socket_type>::Request>)>& resource_function) {
//Set timeout on the following boost::asio::async-read or write function