diff --git a/http/src/network/protocol/http/request/request.hpp b/http/src/network/protocol/http/request/request.hpp index 6e0ed0aeb..6f7f492dd 100644 --- a/http/src/network/protocol/http/request/request.hpp +++ b/http/src/network/protocol/http/request/request.hpp @@ -30,9 +30,8 @@ struct request : request_base { request(request const&); request& operator=(request); - // Then we lift the swap and equals implementation. - using request_base::swap; - using request_base::equals; + virtual void swap(request& other); + virtual bool equals(request const& other) const; // From message_base... // Mutators diff --git a/http/src/network/protocol/http/request/request.ipp b/http/src/network/protocol/http/request/request.ipp index f9cf74c6c..6abc1ecfc 100644 --- a/http/src/network/protocol/http/request/request.ipp +++ b/http/src/network/protocol/http/request/request.ipp @@ -161,6 +161,16 @@ request& request::operator=(request rhs) { return *this; } +void request::swap(request& other ) { + using std::swap; + swap(pimpl_, other.pimpl_); + request_storage_base::swap(other); +} + +bool request::equals(request const& other) const { + return pimpl_->equals(*other.pimpl_) && request_storage_base::equals(other); +} + // From message_base... // Mutators void request::set_destination(std::string const& destination) { diff --git a/http/test/request_base_test.cpp b/http/test/request_base_test.cpp index 4af6125bf..fced4c39d 100644 --- a/http/test/request_base_test.cpp +++ b/http/test/request_base_test.cpp @@ -42,8 +42,8 @@ TEST(request_test, request_storage_flow) { ASSERT_EQ(bytes_read, sizeof(data)); std::string flattened; simple.flatten(flattened); - ASSERT_EQ(flattened, std::string(output, sizeof(data))); - ASSERT_EQ(std::string(data, sizeof(data)), std::string(output, sizeof(data))); + ASSERT_EQ(flattened, output); + ASSERT_EQ(std::string(data, sizeof(data)), output); simple.clear(); } @@ -58,9 +58,8 @@ TEST(request_test, request_storage_copy) { ASSERT_EQ(bytes_read, sizeof(quick_brown)); std::string flattened; copy.flatten(flattened); - ASSERT_EQ(flattened, std::string(output, sizeof(quick_brown))); - ASSERT_EQ(std::string(quick_brown, sizeof(quick_brown)), - std::string(output, sizeof(quick_brown))); + ASSERT_EQ(flattened, output); + ASSERT_EQ(std::string(quick_brown, sizeof(quick_brown)), output); copy.clear(); flattened.clear(); original.flatten(flattened); diff --git a/http/test/request_test.cpp b/http/test/request_test.cpp index 40cdf6077..280fef86b 100644 --- a/http/test/request_test.cpp +++ b/http/test/request_test.cpp @@ -19,6 +19,21 @@ TEST(message_test, request_construction) { http::request other(request); } +TEST(message_test, request_swap) { + network::uri tmp_uri; + network::uri request_uri("http://www.google.com/"); + network::uri other_uri("http://www.google.it/"); + http::request request(request_uri); + http::request other(other_uri); + + request.swap(other); + + request.get_uri(tmp_uri); + ASSERT_EQ(tmp_uri, other_uri); + other.get_uri(tmp_uri); + ASSERT_EQ(tmp_uri, request_uri); +} + TEST(message_test, request_value_semantics) { // First let's default construct a request. http::request original;