Added support for completely disabling noexcept using MIJIN_TEST_NO_NOEXCEPT (for testing).

This commit is contained in:
2024-08-29 00:01:23 +02:00
parent a43f92fb58
commit 9ba097fc2f
41 changed files with 643 additions and 564 deletions

View File

@@ -30,32 +30,32 @@ inline constexpr socket_handle_t INVALID_SOCKET_HANDLE = -1;
class Socket
{
protected:
Socket() noexcept = default;
Socket(const Socket&) noexcept = default;
Socket(Socket&&) noexcept = default;
Socket() MIJIN_NOEXCEPT = default;
Socket(const Socket&) MIJIN_NOEXCEPT = default;
Socket(Socket&&) MIJIN_NOEXCEPT = default;
Socket& operator=(const Socket&) noexcept = default;
Socket& operator=(Socket&&) noexcept = default;
Socket& operator=(const Socket&) MIJIN_NOEXCEPT = default;
Socket& operator=(Socket&&) MIJIN_NOEXCEPT = default;
public:
virtual ~Socket() noexcept = default;
virtual ~Socket() MIJIN_NOEXCEPT = default;
virtual Stream& getStream() noexcept = 0;
virtual Stream& getStream() MIJIN_NOEXCEPT = 0;
};
class ServerSocket
{
protected:
ServerSocket() noexcept = default;
ServerSocket(const ServerSocket&) noexcept = default;
ServerSocket(ServerSocket&&) noexcept = default;
ServerSocket() MIJIN_NOEXCEPT = default;
ServerSocket(const ServerSocket&) MIJIN_NOEXCEPT = default;
ServerSocket(ServerSocket&&) MIJIN_NOEXCEPT = default;
ServerSocket& operator=(const ServerSocket&) noexcept = default;
ServerSocket& operator=(ServerSocket&&) noexcept = default;
ServerSocket& operator=(const ServerSocket&) MIJIN_NOEXCEPT = default;
ServerSocket& operator=(ServerSocket&&) MIJIN_NOEXCEPT = default;
public:
virtual ~ServerSocket() noexcept = default;
virtual ~ServerSocket() MIJIN_NOEXCEPT = default;
virtual void close() noexcept = 0;
virtual Task<StreamResult<std::unique_ptr<Socket>>> c_waitForConnection() noexcept = 0;
virtual void close() MIJIN_NOEXCEPT = 0;
virtual Task<StreamResult<std::unique_ptr<Socket>>> c_waitForConnection() MIJIN_NOEXCEPT = 0;
};
class TCPStream : public Stream
@@ -74,9 +74,9 @@ public:
bool isAtEnd() override;
StreamFeatures getFeatures() override;
StreamError open(ip_address_t address, std::uint16_t port) noexcept;
void close() noexcept;
[[nodiscard]] bool isOpen() const noexcept { return handle_ != INVALID_SOCKET_HANDLE; }
StreamError open(ip_address_t address, std::uint16_t port) MIJIN_NOEXCEPT;
void close() MIJIN_NOEXCEPT;
[[nodiscard]] bool isOpen() const MIJIN_NOEXCEPT { return handle_ != INVALID_SOCKET_HANDLE; }
private:
void setNoblock(bool async);
@@ -88,10 +88,10 @@ class TCPSocket : public Socket
private:
TCPStream stream_;
public:
TCPStream& getStream() noexcept override;
TCPStream& getStream() MIJIN_NOEXCEPT override;
StreamError open(ip_address_t address, std::uint16_t port) noexcept { return stream_.open(address, port); }
StreamError open(std::string_view addressText, std::uint16_t port) noexcept
StreamError open(ip_address_t address, std::uint16_t port) MIJIN_NOEXCEPT { return stream_.open(address, port); }
StreamError open(std::string_view addressText, std::uint16_t port) MIJIN_NOEXCEPT
{
if (Optional<ip_address_t> address = ipAddressFromString(addressText); !address.empty())
{
@@ -99,8 +99,8 @@ public:
}
return StreamError::UNKNOWN_ERROR;
}
void close() noexcept { stream_.close(); }
[[nodiscard]] bool isOpen() const noexcept { return stream_.isOpen(); }
void close() MIJIN_NOEXCEPT { stream_.close(); }
[[nodiscard]] bool isOpen() const MIJIN_NOEXCEPT { return stream_.isOpen(); }
friend class TCPServerSocket;
};
@@ -110,8 +110,8 @@ class TCPServerSocket : public ServerSocket
private:
socket_handle_t handle_ = INVALID_SOCKET_HANDLE;
public:
StreamError setup(ip_address_t address, std::uint16_t port) noexcept;
StreamError setup(std::string_view addressText, std::uint16_t port) noexcept
StreamError setup(ip_address_t address, std::uint16_t port) MIJIN_NOEXCEPT;
StreamError setup(std::string_view addressText, std::uint16_t port) MIJIN_NOEXCEPT
{
if (Optional<ip_address_t> address = ipAddressFromString(addressText); !address.empty())
{
@@ -119,10 +119,10 @@ public:
}
return StreamError::UNKNOWN_ERROR;
}
void close() noexcept override;
[[nodiscard]] bool isListening() const noexcept { return handle_ >= 0; }
void close() MIJIN_NOEXCEPT override;
[[nodiscard]] bool isListening() const MIJIN_NOEXCEPT { return handle_ >= 0; }
Task<StreamResult<std::unique_ptr<Socket>>> c_waitForConnection() noexcept override;
Task<StreamResult<std::unique_ptr<Socket>>> c_waitForConnection() MIJIN_NOEXCEPT override;
};
}