14 #ifndef NN_OLV_OLV_RESULT_H_
15 #define NN_OLV_OLV_RESULT_H_
21 #include <nn/Result.h>
29 class Result :
public nn::Result
32 static const bit32 MASK_FAIL_BIT = 0x80000000u;
34 static const s32 SIZE_DESCRIPTION = 20;
35 static const s32 SIZE_MODULE = 9;
36 static const s32 SIZE_LEVEL = 3;
38 static const s32 SHIFTS_DESCRIPTION = 0;
39 static const s32 SHIFTS_MODULE = SHIFTS_DESCRIPTION + SIZE_DESCRIPTION;
40 static const s32 SHIFTS_LEVEL = SHIFTS_MODULE + SIZE_MODULE;
43 static const u32 MASK_NEGATIVE_LEVEL = (~0u) << SIZE_LEVEL;
45 #define NN_RESULT_H_MAKE_MASK(size, shift) (((~0u) >> (32 - (size))) << (shift))
46 #define NN_RESULT_H_MAKE_MASK_HELPER(c) \
47 static const u32 MASK_ ## c = NN_RESULT_H_MAKE_MASK(SIZE_ ## c, SHIFTS_ ## c)
48 NN_RESULT_H_MAKE_MASK_HELPER(DESCRIPTION);
49 NN_RESULT_H_MAKE_MASK_HELPER(MODULE);
50 NN_RESULT_H_MAKE_MASK_HELPER(LEVEL);
51 #undef NN_RESULT_H_MAKE_MASK_HELPER
52 #undef NN_RESULT_H_MAKE_MASK
54 #define NN_RESULT_H_MAKE_MAX(size) ((~0u) >> (32 - (size)))
55 #define NN_RESULT_H_MAKE_MAX_HELPER(c) \
56 static const s32 MAX_ ## c = NN_RESULT_H_MAKE_MAX(SIZE_ ## c)
57 NN_RESULT_H_MAKE_MAX_HELPER(DESCRIPTION);
58 NN_RESULT_H_MAKE_MAX_HELPER(MODULE);
59 NN_RESULT_H_MAKE_MAX_HELPER(LEVEL);
60 #undef NN_RESULT_H_MAKE_MAX_HELPER
61 #undef NN_RESULT_H_MAKE_MAX
83 DESCRIPTION_SUCCESS = 0,
84 DESCRIPTION_INVALID_RESULT_VALUE = MAX_DESCRIPTION - 0
89 template <nn::Result::Level TLevel,
int TSummary,
int TModule,
int TDescription,
int TDescriptionEx>
friend struct ConstRangeBase;
94 m_CodeEx( static_cast<u32>(
95 ((static_cast<u32>(MAX_LEVEL) << SHIFTS_LEVEL) & MASK_LEVEL) |
96 ((static_cast<u32>(MAX_MODULE) << SHIFTS_MODULE) & MASK_MODULE) |
97 ((static_cast<u32>(MAX_DESCRIPTION) << SHIFTS_DESCRIPTION) & MASK_DESCRIPTION) ))
100 Result(nn::Result::Level level, nn::Result::Summary summary, nn::Result::Module module,
int description,
int descriptionEx)
101 : nn::Result(level, summary, module, description),
102 m_CodeEx( static_cast<u32>(
103 ((static_cast<u32>(ConvertLevel(level)) << SHIFTS_LEVEL) & MASK_LEVEL) |
104 ((static_cast<u32>(module) << SHIFTS_MODULE) & MASK_MODULE) |
105 ((static_cast<u32>(descriptionEx) << SHIFTS_DESCRIPTION) & MASK_DESCRIPTION) ))
114 int GetDescription()
const
116 return static_cast<int>( GetCodeBitsEx(MASK_DESCRIPTION, SHIFTS_DESCRIPTION) );
124 u32 GetPrintableBits()
const {
return m_CodeEx; }
134 bool operator ==(
const Result& rhs)
const {
return this->m_CodeEx == rhs.m_CodeEx; }
144 bool operator !=(
const Result& rhs)
const {
return this->m_CodeEx != rhs.m_CodeEx; }
146 template <nn::Result::Level TLevel, nn::Result::Summary TSummary, Result::Module TModule,
int TDescription,
int TDescriptionEx>
struct ConstRangeBase;
147 template <nn::Result::Level TLevel, nn::Result::Summary TSummary, nn::Result::Module TModule,
int TDescription,
int TDescriptionMin,
int TDescriptionMax,
int TDescriptionEx,
int TDescriptionExStart,
int TDescriptionExEnd>
struct ConstRange;
150 nn::olv::Result::Level ConvertLevel(nn::Result::Level level)
const
154 case nn::Result::LEVEL_SUCCESS:
155 return nn::olv::Result::LEVEL_SUCCESS;
156 case nn::Result::LEVEL_FATAL:
157 return nn::olv::Result::LEVEL_FATAL;
158 case nn::Result::LEVEL_USAGE:
159 return nn::olv::Result::LEVEL_USAGE;
161 return nn::olv::Result::LEVEL_STATUS;
165 u32 GetCodeBitsEx(u32 mask, s32 shift)
const
167 return ((m_CodeEx & mask) >> shift);
176 operator Result()
const {
return Result((nn::Result::Level)0, (nn::Result::Summary)0, (nn::Result::Module)0, 0, 0); }
179 template <nn::Result::Level TLevel, nn::Result::Summary TSummary, nn::Result::Module TModule,
int TDescription,
int TDescriptionEx>
180 struct Result::ConstRangeBase
182 static const nn::Result::Level Level = TLevel;
183 static const nn::Result::Summary Summary = TSummary;
184 static const nn::Result::Module Module = TModule;
185 static const int Description = TDescription;
186 static const int DescriptionEx = TDescriptionEx;
188 operator Result()
const {
return Result(Level, Summary, Module, Description, DescriptionEx); }
191 template <nn::Result::Level TLevel, nn::Result::Summary TSummary, nn::Result::Module TModule,
int TDescription,
int TDescriptionMin,
int TDescriptionMax,
int TDescriptionEx,
int TDescriptionExStart,
int TDescriptionExEnd>
192 struct Result::ConstRange :
public Result::ConstRangeBase<TLevel, TSummary, TModule, TDescription, TDescriptionEx>
194 static const int DescriptionMin = TDescriptionMin;
195 static const int DescriptionMax = TDescriptionMax;
196 static const int DescriptionExStart = TDescriptionExStart;
197 static const int DescriptionExEnd = TDescriptionExEnd;
199 static bool Includes(nn::Result result)
201 return result.GetModule() == TModule && TDescriptionMin <= result.GetDescription() && result.GetDescription() < TDescriptionMax;
203 static bool IncludesEx(Result result)
205 return result.GetModule() == TModule && (TDescriptionExStart <= result.GetDescription() && result.GetDescription() < TDescriptionExEnd);
208 friend bool operator<=(nn::Result lhs,
const ConstRange&) {
return ConstRange::Includes(lhs); }
209 friend bool operator>=(
const ConstRange&, nn::Result rhs) {
return ConstRange::Includes(rhs); }
210 friend bool operator<=(Result lhs,
const ConstRange&) {
return ConstRange::IncludesEx(lhs); }
211 friend bool operator>=(
const ConstRange&, Result rhs) {
return ConstRange::IncludesEx(rhs); }
214 #define NN_OLV_DEFINE_RESULT_CONST_RANGE(name, level, summary, module, errorCode, errorCodeMin, errorCodeMax) \
215 typedef ::nn::olv::Result::ConstRange<(level), (summary), (module), (errorCode / 100), (errorCodeMin / 100), (errorCodeMax / 100), (errorCode * 128), (errorCodeMin * 128), (errorCodeMax * 128)> name
226 NN_OLV_DEFINE_RESULT_CONST_RANGE(
228 nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_NN_OLV, 100, 100, 200
235 NN_OLV_DEFINE_RESULT_CONST_RANGE(
237 nn::Result::LEVEL_USAGE, nn::Result::SUMMARY_INVALID_ARGUMENT, nn::Result::MODULE_NN_OLV, 200, 200, 300
244 NN_OLV_DEFINE_RESULT_CONST_RANGE(
246 nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_CANCELLED, nn::Result::MODULE_NN_OLV, 300, 300, 400
253 NN_OLV_DEFINE_RESULT_CONST_RANGE(
255 nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_NN_OLV, 1000, 1000, 2000
262 NN_OLV_DEFINE_RESULT_CONST_RANGE(
263 ResultLibraryPermanentError,
264 nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_NN_OLV, 1000, 1000, 1100
271 NN_OLV_DEFINE_RESULT_CONST_RANGE(
272 ResultLibraryTemporaryError,
273 nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_NN_OLV, 1100, 1100, 2000
280 NN_OLV_DEFINE_RESULT_CONST_RANGE(
282 nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_NN_OLV, 2000, 2000, 5000
289 NN_OLV_DEFINE_RESULT_CONST_RANGE(
290 ResultNetworkDataError,
291 nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_WRONG_ARGUMENT, nn::Result::MODULE_NN_OLV, 2000, 2000, 3000
298 NN_OLV_DEFINE_RESULT_CONST_RANGE(
299 ResultNetworkLibraryError,
300 nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_NN_OLV, 3000, 3000, 4000
307 NN_OLV_DEFINE_RESULT_CONST_RANGE(
308 ResultNetworkHttpError,
309 nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_NN_OLV, 4000, 4000, 5000
316 NN_OLV_DEFINE_RESULT_CONST_RANGE(
318 nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_NN_OLV, 5000, 5000, 6000
325 NN_OLV_DEFINE_RESULT_CONST_RANGE(
326 ResultServerPermanentError,
327 nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_NN_OLV, 5000, 5000, 5100
334 NN_OLV_DEFINE_RESULT_CONST_RANGE(
335 ResultServerTemporaryError,
336 nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_INVALID_STATE, nn::Result::MODULE_NN_OLV, 5100, 5100, 6000
345 #endif // __cplusplus
347 #endif // NN_OLV_OLV_RESULT_H_