@ -153,6 +153,48 @@ constexpr ResultCode ResultSuccess(0);
*/
*/
constexpr ResultCode ResultUnknown ( UINT32_MAX ) ;
constexpr ResultCode ResultUnknown ( UINT32_MAX ) ;
/**
* A ResultRange defines an inclusive range of error descriptions within an error module .
* This can be used to check whether the description of a given ResultCode falls within the range .
* The conversion function returns a ResultCode with its description set to description_start .
*
* An example of how it could be used :
* \ code
* constexpr ResultRange ResultCommonError { ErrorModule : : Common , 0 , 9999 } ;
*
* ResultCode Example ( int value ) {
* const ResultCode result = OtherExample ( value ) ;
*
* // This will only evaluate to true if result.module is ErrorModule::Common and
* // result.description is in between 0 and 9999 inclusive.
* if ( ResultCommonError . Includes ( result ) ) {
* // This returns ResultCode{ErrorModule::Common, 0};
* return ResultCommonError ;
* }
*
* return ResultSuccess ;
* }
* \ endcode
*/
class ResultRange {
public :
consteval ResultRange ( ErrorModule module , u32 description_start , u32 description_end_ )
: code { module , description_start } , description_end { description_end_ } { }
[[nodiscard]] consteval operator ResultCode ( ) const {
return code ;
}
[[nodiscard]] constexpr bool Includes ( ResultCode other ) const {
return code . module = = other . module & & code . description < = other . description & &
other . description < = description_end ;
}
private :
ResultCode code ;
u32 description_end ;
} ;
/**
/**
* This is an optional value type . It holds a ` ResultCode ` and , if that code is ResultSuccess , it
* This is an optional value type . It holds a ` ResultCode ` and , if that code is ResultSuccess , it
* also holds a result of type ` T ` . If the code is an error code ( not ResultSuccess ) , then trying
* also holds a result of type ` T ` . If the code is an error code ( not ResultSuccess ) , then trying