diff --git a/nx/include/switch/runtime/hosversion.h b/nx/include/switch/runtime/hosversion.h index 8860a07c..05611099 100644 --- a/nx/include/switch/runtime/hosversion.h +++ b/nx/include/switch/runtime/hosversion.h @@ -28,8 +28,8 @@ typedef enum { CompareResult_Unknown } CompareResult; -CompareResult cmpresNot(CompareResult in) { - // Does a not-operation. True maps to False, False maps to True. Unknown maps to Unknown. +static inline CompareResult cmpresNot(CompareResult in) { + // Does a boolean NOT operation. switch (in) { case CompareResult_False: return CompareResult_True; @@ -40,6 +40,19 @@ CompareResult cmpresNot(CompareResult in) { } } +static inline CompareResult cmpresAnd(CompareResult a, CompareResult b) { + switch (a) { + case CompareResult_False: + return CompareResult_False; + case CompareResult_True: + return b; + case CompareResult_Unknown: + if (b != CompareResult_True) + return b; + return CompareResult_Unknown; + } +} + /// Returns true if the current HOS version is equal to or above the specified major/minor/micro version. CompareResult hosversionAtLeast(u8 major, u8 minor, u8 micro); @@ -47,3 +60,8 @@ CompareResult hosversionAtLeast(u8 major, u8 minor, u8 micro); static inline CompareResult hosversionBefore(u8 major, u8 minor, u8 micro) { return cmpresNot(hosversionAtLeast(major, minor, micro)); } + +/// Returns true if the current HOS version is between the two specified major versions, i.e. [major1, major2). +static inline CompareResult hosversionBetween(u8 major0, u8 minor0, u8 micro0, u8 major1, u8 minor1, u8 micro1) { + return cmpresAnd(hosversionAtLeast(major0, minor0, micro0), hosversionBefore(major1, minor1, micro1)); +}