From 45ec39f77bf4c7f980cd66847798853988873964 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Sat, 23 Dec 2023 17:52:20 -0600 Subject: [PATCH] [ox/std] Add Result::orVal --- deps/ox/src/ox/std/error.hpp | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/deps/ox/src/ox/std/error.hpp b/deps/ox/src/ox/std/error.hpp index a3de8952..af36c104 100644 --- a/deps/ox/src/ox/std/error.hpp +++ b/deps/ox/src/ox/std/error.hpp @@ -264,6 +264,54 @@ struct [[nodiscard]] Result { return f(std::move(value)); } + /** + * Returns parameter alt if Result contains an error. + * @param alt + * @return value of Result or alt + */ + constexpr T orVal(T &&alt) & noexcept { + if (error) { + return std::move(alt); + } + return value; + } + + /** + * Returns parameter alt if Result contains an error. + * @param alt + * @return value of Result or alt + */ + constexpr T orVal(T &&alt) && noexcept { + if (error) { + return std::move(alt); + } + return std::move(value); + } + + /** + * Returns parameter alt if Result contains an error. + * @param alt + * @return value of Result or alt + */ + constexpr T orVal(T const&alt) & noexcept { + if (error) { + return alt; + } + return value; + } + + /** + * Returns parameter alt if Result contains an error. + * @param alt + * @return value of Result or alt + */ + constexpr T orVal(T const&alt) && noexcept { + if (error) { + return alt; + } + return std::move(value); + } + }; namespace detail {