From 2896b9302422f1cd94e70dc7cdbf1f325e04bc3e Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Thu, 21 May 2015 23:15:15 -0400 Subject: [PATCH] Added move assignment operators to sockets. --- Jupiter/SecureSocket.cpp | 8 ++++++++ Jupiter/SecureSocket.h | 8 ++++++++ Jupiter/Socket.cpp | 7 +++++++ Jupiter/Socket.h | 8 ++++++++ Jupiter/TCPSocket.cpp | 12 ++++++++++++ Jupiter/TCPSocket.h | 2 ++ Jupiter/UDPSocket.cpp | 29 ++++++++++++++++++++++++++--- Jupiter/UDPSocket.h | 4 ++++ Release/Jupiter.lib | Bin 266046 -> 268028 bytes 9 files changed, 75 insertions(+), 3 deletions(-) diff --git a/Jupiter/SecureSocket.cpp b/Jupiter/SecureSocket.cpp index 7c79244..11e9e2f 100644 --- a/Jupiter/SecureSocket.cpp +++ b/Jupiter/SecureSocket.cpp @@ -33,6 +33,14 @@ Jupiter::SecureSocket::SSLData::~SSLData() if (Jupiter::SecureSocket::SSLData::context != nullptr) SSL_CTX_free(Jupiter::SecureSocket::SSLData::context); } +Jupiter::SecureSocket &Jupiter::SecureSocket::operator=(Jupiter::SecureSocket &&source) +{ + Jupiter::Socket::operator=(std::move(source)); + Jupiter::SecureSocket::SSLdata_ = source.SSLdata_; + source.SSLdata_ = nullptr; + return *this; +} + Jupiter::SecureSocket::SecureSocket() : Jupiter::Socket() { Jupiter::SecureSocket::SSLdata_ = new Jupiter::SecureSocket::SSLData(); diff --git a/Jupiter/SecureSocket.h b/Jupiter/SecureSocket.h index 7637829..79f6a59 100644 --- a/Jupiter/SecureSocket.h +++ b/Jupiter/SecureSocket.h @@ -156,6 +156,14 @@ namespace Jupiter */ bool initSSL(); + /** + * @brief Move assignment operator for the Socket class + * + * @param source Socket to move data from + * @return Reference to this socket. + */ + SecureSocket &SecureSocket::operator=(SecureSocket &&source); + /** * @brief Default constructor for the SecureSocket class. * This constructor will set the buffer size to 4096 chars. diff --git a/Jupiter/Socket.cpp b/Jupiter/Socket.cpp index c1bd591..b58440c 100644 --- a/Jupiter/Socket.cpp +++ b/Jupiter/Socket.cpp @@ -79,6 +79,13 @@ Jupiter::Socket::Data::~Data() if (Jupiter::Socket::Data::buff != nullptr) delete[] Jupiter::Socket::Data::buff; } +Jupiter::Socket &Jupiter::Socket::operator=(Jupiter::Socket &&source) +{ + Jupiter::Socket::data_ = source.data_; + source.data_ = nullptr; + return *this; +} + Jupiter::Socket::Socket() : Jupiter::Socket::Socket(4096) { } diff --git a/Jupiter/Socket.h b/Jupiter/Socket.h index a6c0522..7fcf528 100644 --- a/Jupiter/Socket.h +++ b/Jupiter/Socket.h @@ -497,6 +497,14 @@ namespace Jupiter */ static bool cleanup(); + /** + * @brief Move assignment operator for the Socket class + * + * @param source Socket to move data from + * @return Reference to this socket. + */ + Socket &Socket::operator=(Socket &&source); + /** * @brief Default constructor for the Socket class. * This constructor will set the buffer size to 4096 chars. diff --git a/Jupiter/TCPSocket.cpp b/Jupiter/TCPSocket.cpp index 6f70a0f..c7dae51 100644 --- a/Jupiter/TCPSocket.cpp +++ b/Jupiter/TCPSocket.cpp @@ -24,6 +24,12 @@ void setSocketTCP(Jupiter::Socket *sock) /** TCPSocket Implementation */ +Jupiter::TCPSocket &Jupiter::TCPSocket::operator=(Jupiter::TCPSocket &&source) +{ + Jupiter::Socket::operator=(std::move(source)); + return *this; +} + Jupiter::TCPSocket::TCPSocket() : Socket() { setSocketTCP(this); @@ -41,6 +47,12 @@ Jupiter::TCPSocket::TCPSocket(Jupiter::Socket &&source) : Socket(std::move(sourc /** SecureTCPSocket Implementation */ +Jupiter::SecureTCPSocket &Jupiter::SecureTCPSocket::operator=(Jupiter::SecureTCPSocket &&source) +{ + Jupiter::SecureSocket::operator=(std::move(source)); + return *this; +} + Jupiter::SecureTCPSocket::SecureTCPSocket() : SecureSocket() { setSocketTCP(this); diff --git a/Jupiter/TCPSocket.h b/Jupiter/TCPSocket.h index 1f9c2b3..c4a9608 100644 --- a/Jupiter/TCPSocket.h +++ b/Jupiter/TCPSocket.h @@ -36,6 +36,7 @@ namespace Jupiter class JUPITER_API TCPSocket : public Socket { public: + TCPSocket &TCPSocket::operator=(TCPSocket &&source); TCPSocket(); TCPSocket(const TCPSocket &) = delete; TCPSocket(size_t bufferSize); @@ -49,6 +50,7 @@ namespace Jupiter class JUPITER_API SecureTCPSocket : public SecureSocket { public: + SecureTCPSocket &SecureTCPSocket::operator=(SecureTCPSocket &&source); SecureTCPSocket(); SecureTCPSocket(const SecureTCPSocket &) = delete; SecureTCPSocket(size_t bufferSize); diff --git a/Jupiter/UDPSocket.cpp b/Jupiter/UDPSocket.cpp index 54c338f..b27ec9c 100644 --- a/Jupiter/UDPSocket.cpp +++ b/Jupiter/UDPSocket.cpp @@ -15,8 +15,31 @@ #include #endif // _WIN32 -Jupiter::UDPSocket::UDPSocket() +void setSocketUDP(Jupiter::Socket *sock) { - this->setType(SOCK_DGRAM); - this->setProtocol(IPPROTO_UDP); + sock->setType(SOCK_DGRAM); + sock->setProtocol(IPPROTO_UDP); +} + +/** UDPSocket Implementation */ + +Jupiter::UDPSocket &Jupiter::UDPSocket::operator=(Jupiter::UDPSocket &&source) +{ + Jupiter::Socket::operator=(std::move(source)); + return *this; +} + +Jupiter::UDPSocket::UDPSocket() : Socket() +{ + setSocketUDP(this); +} + +Jupiter::UDPSocket::UDPSocket(size_t bufferSize) : Socket(bufferSize) +{ + setSocketUDP(this); +} + +Jupiter::UDPSocket::UDPSocket(Jupiter::Socket &&source) : Socket(std::move(source)) +{ + setSocketUDP(this); } \ No newline at end of file diff --git a/Jupiter/UDPSocket.h b/Jupiter/UDPSocket.h index d176b97..7ecd0a5 100644 --- a/Jupiter/UDPSocket.h +++ b/Jupiter/UDPSocket.h @@ -35,7 +35,11 @@ namespace Jupiter class JUPITER_API UDPSocket : public Socket { public: + UDPSocket &UDPSocket::operator=(UDPSocket &&source); UDPSocket(); + UDPSocket(const UDPSocket &) = delete; + UDPSocket(size_t bufferSize); + UDPSocket(Jupiter::Socket &&source); }; } diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index 452025bb1a9e06740aa94fa313f9bf61b2549312..00849a16cfbf275400e85562151e460c6172853f 100644 GIT binary patch delta 34187 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 KRh|p+6#X9%`8#O<