Removes Result class.
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Deukhoofd 2020-12-11 17:16:36 +01:00
parent e35129ceed
commit 1119012158
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
1 changed files with 0 additions and 91 deletions

View File

@ -1,91 +0,0 @@
#ifndef ARBUTILS_RESULT_HPP
#define ARBUTILS_RESULT_HPP
namespace ArbUt {
/// @brief Whether the result was okay, or was an error
enum class ResultStatus : uint8_t { Ok, Error };
/// @brief Simple data class to return a functions success or failure.
/// @tparam T The potential return value of the function.
template <class T> class Result {
public:
/// @brief Return a success, along with the success value.
/// @param value The value to return.
/// @return The result class
inline static Result Ok(T value) { return Result(ResultStatus::Ok, value); }
/// @brief Return an error, along with an error message.
/// @param message The error message to return
/// @return The result class
inline static Result Error(const std::string& message) { return Result(message); }
/// @brief Implicitly return a success result with a value.
/// @param value The value to return.
inline Result(const T& value) : Result(ResultStatus::Ok, value) {}
/// @brief Copy constructor
/// @param rhs The object to construct from.
Result(const Result& rhs) : _resultStatus(rhs._resultStatus) {
if (_resultStatus == ResultStatus::Ok) {
_resultValue = rhs._resultValue;
} else {
_errorMessage = rhs._errorMessage;
}
}
/// @brief Copy operator.
inline Result<T>& operator=(const Result<T>& rhs) {
if (this == &rhs) {
return *this;
}
_resultStatus = rhs._resultStatus;
if (_resultStatus == ResultStatus::Ok) {
_resultValue = rhs._resultValue;
} else {
_errorMessage = rhs._errorMessage;
}
return *this;
}
~Result() {
if (_resultStatus == ResultStatus::Error) {
_errorMessage.operator~();
}
}
/// @brief Returns whether or not the function succeeded,
/// @return Whether or not the function succeeded.
[[nodiscard]] inline ResultStatus GetStatus() const noexcept { return _resultStatus; }
/// @brief The value of the result if it was successful.
/// @return The value of the result if it was successful.
inline const T& GetValue() const noexcept {
Assert(_resultStatus == ResultStatus::Ok);
return _resultValue;
}
/// @brief The value of the result if it was successful.
/// @return The value of the result if it was successful.
inline T& GetValue() noexcept {
Assert(_resultStatus == ResultStatus::Ok);
return _resultValue;
}
/// @brief Returns the error message if it errored.
/// @return The error message if it errored.
[[nodiscard]] inline const std::string& GetErrorMessage() const noexcept {
Assert(_resultStatus == ResultStatus::Error);
return _errorMessage;
}
private:
Result(ResultStatus result, const T& value) : _resultStatus(result), _resultValue(value) {}
explicit Result(const std::string& error) : _resultStatus(ResultStatus::Error), _errorMessage(error) {}
ResultStatus _resultStatus;
union {
T _resultValue;
std::string _errorMessage{};
};
};
}
#endif // ARBUTILS_RESULT_HPP