1 /*---------------------------------------------------------------------------*
2
3 Copyright (C) 2009-2013 Nintendo. All rights reserved.
4
5 These coded instructions, statements, and computer programs contain
6 proprietary information of Nintendo of America Inc. and/or Nintendo
7 Company Ltd., and are protected by Federal copyright law. They may
8 not be disclosed to third parties or copied or duplicated in any form,
9 in whole or in part, without the prior written consent of Nintendo.
10
11 *---------------------------------------------------------------------------*/
12 template <Result::LegacyLevel TLevel, Result::Summary TSummary, Result::Module TModule, int TDescription>
13 struct Result::Const : public Result
14 {
15 static const Result::LegacyLevel Level = TLevel;
16 static const Result::Summary Summary = TSummary;
17 static const Result::Module Module = TModule;
18 static const int Description = TDescription;
19
20 static const bit32 Value = TemplateMakeLegacyResult<TLevel, TSummary, TModule, TDescription>::Value;
21
ConstConst22 Const() : Result(Value) {}
23
IncludesConst24 static bool Includes(Result result) { return result.GetValue() == Value; }
25 friend bool operator<=(Result lhs, const Const<TLevel, TSummary, TModule, TDescription>& rhs) { return Includes(lhs); }
26 friend bool operator>=(const Const<TLevel, TSummary, TModule, TDescription>, Result rhs) { return Includes(rhs); }
27 };
28
29 template <Result::LegacyLevel TLevel, Result::Summary TSummary, Result::Module TModule>
30 struct Result::Const_LSM : public Result
31 {
32 static const Result::LegacyLevel Level = TLevel;
33 static const Result::Summary Summary = TSummary;
34 static const Result::Module Module = TModule;
35
36 template <int TDescription>
37 struct Const : public Result::Const<TLevel, TSummary, TModule, TDescription> {};
38
Const_LSMConst_LSM39 Const_LSM(int description) : Result(TLevel, TSummary, TModule, description) {}
40
IncludesConst_LSM41 bool Includes(Result result) { return result == *this; }
42 friend bool operator<=(Result lhs, const Const_LSM<TLevel, TSummary, TModule>&) { return Includes(lhs); }
43 friend bool operator>=(const Const_LSM<TLevel, TSummary, TModule>&, Result rhs) { return Includes(rhs); }
44 };
45
46 template <Result::LegacyLevel TLevel, Result::Module TModule>
47 struct Result::Const_LM : public Result
48 {
49 static const Result::LegacyLevel Level = TLevel;
50 static const Result::Module Module = TModule;
51
52 template <Result::Summary TSummary, int TDescription>
53 struct Const : public Result::Const<TLevel, TSummary, TModule, TDescription> {};
54
Const_LMConst_LM55 Const_LM(Result::Summary summary, int description) : Result(TLevel, summary, TModule, description) {}
56
IncludesConst_LM57 bool Includes(Result result) { return result == *this; }
58 friend bool operator<=(Result lhs, const Const_LM<TLevel, TModule>&) { return Includes(lhs); }
59 friend bool operator>=(const Const_LM<TLevel, TModule>&, Result rhs) { return Includes(rhs); }
60 };
61
62 template <Result::LegacyLevel TLevel>
63 struct Result::Const_L : public Result
64 {
65 static const Result::LegacyLevel Level = TLevel;
66
67 template <Result::Summary TSummary, Result::Module TModule, int TDescription>
68 struct Const : public Result::Const<TLevel, TSummary, TModule, TDescription> {};
69
Const_LConst_L70 Const_L(Result::Summary summary, Result::Module module, int description) : Result(TLevel, summary, module, description) {}
71
IncludesConst_L72 bool Includes(Result result) { return result == *this; }
73 friend bool operator<=(Result lhs, const Const_L<TLevel>&) { return Includes(lhs); }
74 friend bool operator>=(const Const_L<TLevel>&, Result rhs) { return Includes(rhs); }
75 };
76
77 #define NN_DEFINE_RESULT_CONST(name, level, summary, module, description) \
78 typedef ::nn::Result::Const<(level), (summary), (module), (description)> name
79
80 #define NN_DEFINE_RESULT_FUNC_LSM(name, level, summary, module) \
81 typedef ::nn::Result::Const_LSM<(level), (summary), (module)> name
82
83 #define NN_DEFINE_RESULT_CONST_LSM(name, f, description) \
84 typedef f::Const<(description)> name
85
86 #define NN_DEFINE_RESULT_FUNC_LM(name, level, module) \
87 typedef ::nn::Result::Const_LM<(level), (module)> name
88
89 #define NN_DEFINE_RESULT_CONST_LM(name, f, summary, description) \
90 typedef f::Const<(summary), (description)> name
91
92 #define NN_DEFINE_RESULT_FUNC_L(name, level) \
93 typedef ::nn::Result::Const_L<(level)> name
94
95 #define NN_DEFINE_RESULT_CONST_L(name, f, summary, module, description) \
96 typedef f::Const<(summary), (module), (description)> name
97
MakeInfoResult(Result::Summary summary,Result::Module module,int description)98 inline Result MakeInfoResult(Result::Summary summary, Result::Module module, int description)
99 { return Result(Result::LEVEL_INFO, summary, module, description); }
MakeFatalResult(Result::Summary summary,Result::Module module,int description)100 inline Result MakeFatalResult(Result::Summary summary, Result::Module module, int description)
101 { return Result(Result::LEVEL_FATAL, summary, module, description); }
MakeResetResult(Result::Summary summary,Result::Module module,int description)102 inline Result MakeResetResult(Result::Summary summary, Result::Module module, int description)
103 { return Result(Result::LEVEL_RESET, summary, module, description); }
MakeReInitResult(Result::Summary summary,Result::Module module,int description)104 inline Result MakeReInitResult(Result::Summary summary, Result::Module module, int description)
105 { return Result(Result::LEVEL_REINIT, summary, module, description); }
MakeUsageResult(Result::Summary summary,Result::Module module,int description)106 inline Result MakeUsageResult(Result::Summary summary, Result::Module module, int description)
107 { return Result(Result::LEVEL_USAGE, summary, module, description); }
MakePermanentResult(Result::Summary summary,Result::Module module,int description)108 inline Result MakePermanentResult(Result::Summary summary, Result::Module module, int description)
109 { return Result(Result::LEVEL_PERMANENT, summary, module, description); }
MakeTemporaryResult(Result::Summary summary,Result::Module module,int description)110 inline Result MakeTemporaryResult(Result::Summary summary, Result::Module module, int description)
111 { return Result(Result::LEVEL_TEMPORARY, summary, module, description); }
MakeStatusResult(Result::Summary summary,Result::Module module,int description)112 inline Result MakeStatusResult(Result::Summary summary, Result::Module module, int description)
113 { return Result(Result::LEVEL_STATUS, summary, module, description); }
114