Slight optimisation: less copies of shared_ptr objects
This commit is contained in:
parent
1c904b018f
commit
d94f6d6d27
4 changed files with 16 additions and 16 deletions
|
|
@ -145,7 +145,7 @@ namespace SimpleWeb {
|
||||||
|
|
||||||
virtual void connect()=0;
|
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;
|
std::string line;
|
||||||
getline(stream, line);
|
getline(stream, line);
|
||||||
size_t version_end=line.find(' ');
|
size_t version_end=line.find(' ');
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ typedef SimpleWeb::Server<SimpleWeb::HTTP> HttpServer;
|
||||||
typedef SimpleWeb::Client<SimpleWeb::HTTP> HttpClient;
|
typedef SimpleWeb::Client<SimpleWeb::HTTP> HttpClient;
|
||||||
|
|
||||||
//Added for the default_resource example
|
//Added for the default_resource example
|
||||||
void default_resource_send(const HttpServer &server, shared_ptr<HttpServer::Response> response,
|
void default_resource_send(const HttpServer &server, const shared_ptr<HttpServer::Response> &response,
|
||||||
shared_ptr<ifstream> ifs, shared_ptr<vector<char> > buffer);
|
const shared_ptr<ifstream> &ifs, const shared_ptr<vector<char> > &buffer);
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
//HTTP-server at port 8080 using 1 thread
|
//HTTP-server at port 8080 using 1 thread
|
||||||
|
|
@ -167,8 +167,8 @@ int main() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void default_resource_send(const HttpServer &server, shared_ptr<HttpServer::Response> response,
|
void default_resource_send(const HttpServer &server, const shared_ptr<HttpServer::Response> &response,
|
||||||
shared_ptr<ifstream> ifs, shared_ptr<vector<char> > buffer) {
|
const shared_ptr<ifstream> &ifs, const shared_ptr<vector<char> > &buffer) {
|
||||||
streamsize read_length;
|
streamsize read_length;
|
||||||
if((read_length=ifs->read(&(*buffer)[0], buffer->size()).gcount())>0) {
|
if((read_length=ifs->read(&(*buffer)[0], buffer->size()).gcount())>0) {
|
||||||
response->write(&(*buffer)[0], read_length);
|
response->write(&(*buffer)[0], read_length);
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ typedef SimpleWeb::Server<SimpleWeb::HTTPS> HttpsServer;
|
||||||
typedef SimpleWeb::Client<SimpleWeb::HTTPS> HttpsClient;
|
typedef SimpleWeb::Client<SimpleWeb::HTTPS> HttpsClient;
|
||||||
|
|
||||||
//Added for the default_resource example
|
//Added for the default_resource example
|
||||||
void default_resource_send(const HttpsServer &server, shared_ptr<HttpsServer::Response> response,
|
void default_resource_send(const HttpsServer &server, const shared_ptr<HttpsServer::Response> &response,
|
||||||
shared_ptr<ifstream> ifs, shared_ptr<vector<char> > buffer);
|
const shared_ptr<ifstream> &ifs, const shared_ptr<vector<char> > &buffer);
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
//HTTPS-server at port 8080 using 1 thread
|
//HTTPS-server at port 8080 using 1 thread
|
||||||
|
|
@ -168,8 +168,8 @@ int main() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void default_resource_send(const HttpsServer &server, shared_ptr<HttpsServer::Response> response,
|
void default_resource_send(const HttpsServer &server, const shared_ptr<HttpsServer::Response> &response,
|
||||||
shared_ptr<ifstream> ifs, shared_ptr<vector<char> > buffer) {
|
const shared_ptr<ifstream> &ifs, const shared_ptr<vector<char> > &buffer) {
|
||||||
streamsize read_length;
|
streamsize read_length;
|
||||||
if((read_length=ifs->read(&(*buffer)[0], buffer->size()).gcount())>0) {
|
if((read_length=ifs->read(&(*buffer)[0], buffer->size()).gcount())>0) {
|
||||||
response->write(&(*buffer)[0], read_length);
|
response->write(&(*buffer)[0], read_length);
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ namespace SimpleWeb {
|
||||||
|
|
||||||
std::shared_ptr<socket_type> socket;
|
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:
|
public:
|
||||||
size_t size() {
|
size_t size() {
|
||||||
|
|
@ -174,7 +174,7 @@ namespace SimpleWeb {
|
||||||
}
|
}
|
||||||
|
|
||||||
///Use this function if you need to recursively send parts of a longer message
|
///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*/) {
|
boost::asio::async_write(*response->socket, response->streambuf, [this, response, callback](const boost::system::error_code& ec, size_t /*bytes_transferred*/) {
|
||||||
if(callback)
|
if(callback)
|
||||||
callback(ec);
|
callback(ec);
|
||||||
|
|
@ -195,7 +195,7 @@ namespace SimpleWeb {
|
||||||
|
|
||||||
virtual void accept()=0;
|
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));
|
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->expires_from_now(boost::posix_time::seconds(seconds));
|
||||||
timer->async_wait([socket](const boost::system::error_code& ec){
|
timer->async_wait([socket](const boost::system::error_code& ec){
|
||||||
|
|
@ -208,7 +208,7 @@ namespace SimpleWeb {
|
||||||
return timer;
|
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()
|
//Create new streambuf (Request::streambuf) for async_read_until()
|
||||||
//shared_ptr is used to pass temporary objects to the asynchronous functions
|
//shared_ptr is used to pass temporary objects to the asynchronous functions
|
||||||
std::shared_ptr<Request> request(new Request());
|
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;
|
std::string line;
|
||||||
getline(stream, line);
|
getline(stream, line);
|
||||||
size_t method_end;
|
size_t method_end;
|
||||||
|
|
@ -321,7 +321,7 @@ namespace SimpleWeb {
|
||||||
return true;
|
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
|
//Find path- and method-match, and call write_response
|
||||||
for(auto& res: opt_resource) {
|
for(auto& res: opt_resource) {
|
||||||
if(request->method==res.first) {
|
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::function<void(std::shared_ptr<typename ServerBase<socket_type>::Response>,
|
||||||
std::shared_ptr<typename ServerBase<socket_type>::Request>)>& resource_function) {
|
std::shared_ptr<typename ServerBase<socket_type>::Request>)>& resource_function) {
|
||||||
//Set timeout on the following boost::asio::async-read or write function
|
//Set timeout on the following boost::asio::async-read or write function
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue