diff --git a/macos/tool_return.h b/macos/tool_return.h index 8eec676..7e34df6 100644 --- a/macos/tool_return.h +++ b/macos/tool_return.h @@ -3,6 +3,8 @@ #include "errors.h" #include +#include + namespace MacOS { @@ -215,6 +217,11 @@ namespace MacOS { return f(std::move(_value)); } + template + T value_or_error(typename std::enable_if::value>::type * = 0) const { + return _error ? _error : _value; + } + }; template<> diff --git a/toolbox/mm.cpp b/toolbox/mm.cpp index 8997650..1cb84b3 100644 --- a/toolbox/mm.cpp +++ b/toolbox/mm.cpp @@ -936,10 +936,7 @@ namespace MM Log("%04x DisposePtr(%08x)\n", trap, mcptr); - - auto rv = Native::DisposePtr(mcptr); - - return rv.error(); //SetMemError(error); + return Native::DisposePtr(mcptr).error(); } uint32_t GetPtrSize(uint16_t trap) @@ -1093,7 +1090,6 @@ namespace MM Log("%04x ReallocHandle(%08x, %08x)\n", trap, hh, logicalSize); return Native::ReallocHandle(hh, logicalSize).error(); - } @@ -1122,8 +1118,7 @@ namespace MM Log("%04x GetHandleSize(%08x)\n", trap, hh); - auto rv = Native::GetHandleSize(hh); - return rv ? rv.value() : rv.error(); + return Native::GetHandleSize(hh).value_or_error(); } uint16_t SetHandleSize(uint16_t trap) @@ -1212,9 +1207,7 @@ namespace MM Log("%04x HGetState(%08x)\n", trap, hh); - auto rv = Native::HGetState(hh); - return rv ? rv.value() : rv.error(); - //return Native::HGetState(hh).then([](const tool_return &rv){ return rv ? *rv : rv.error(); }); + return Native::HGetState(hh).value_or_error(); } uint16_t HSetState(uint16_t trap)