wut v1.9.1
Wii U Toolchain
Loading...
Searching...
No Matches
LaunchInfoDatabase.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef __cplusplus
4
5#include <wut.h>
6#include <nn/result.h>
7#include <nn/sl/FileStream.h>
8#include <nn/sl/sl_cpp.h>
9#include <optional>
10
11namespace nn::sl
12{
13namespace details
14{
25WUT_CHECK_SIZE(LaunchInfoDatabaseInternal, 0x1C);
26WUT_CHECK_OFFSET(LaunchInfoDatabaseInternal, 0x00, currentIdPtr);
27WUT_CHECK_OFFSET(LaunchInfoDatabaseInternal, 0x04, entryCountPtr);
28WUT_CHECK_OFFSET(LaunchInfoDatabaseInternal, 0x08, maxEntriesPtr);
29WUT_CHECK_OFFSET(LaunchInfoDatabaseInternal, 0x0C, pDatabase);
30WUT_CHECK_OFFSET(LaunchInfoDatabaseInternal, 0x10, entriesPtr);
31WUT_CHECK_OFFSET(LaunchInfoDatabaseInternal, 0x14, systemTablePtr);
32WUT_CHECK_OFFSET(LaunchInfoDatabaseInternal, 0x18, systemTableNum);
33
34extern "C" LaunchInfoDatabaseInternal *
36extern "C" nn::Result
38extern "C" nn::Result
40extern "C" nn::Result
42extern "C" nn::Result
44extern "C" void
46extern "C" uint32_t
48extern "C" void
50extern "C" uint64_t
52extern "C" uint64_t
54extern "C" nn::Result
56extern "C" nn::Result
58extern "C" uint32_t
60extern "C" nn::Result
62} // namespace details
63
65{
66public:
68 {
69 __ct__Q3_2nn2sl18LaunchInfoDatabaseFv(&mInstance);
70 }
71
73 {
74 Finalize();
75 }
76
77 void
79 {
80 // Only actually call finalize if the database is still loaded, otherwise we might trigger an assertion.
81 if (mInstance.pDatabase != nullptr) {
82 Finalize__Q3_2nn2sl18LaunchInfoDatabaseFv(&mInstance);
83 }
84 }
85
88 {
89 if (mInstance.pDatabase != nullptr) { // Avoid triggering an assertion
91 }
92 return Load__Q3_2nn2sl18LaunchInfoDatabaseFRQ3_2nn2sl7IStreamQ3_2nn2sl6Region(&mInstance, fileStream.GetInternal(), region);
93 }
94
97 {
98 if (mInstance.pDatabase == nullptr) { // Avoid triggering an assertion
100 }
101 return Store__Q3_2nn2sl18LaunchInfoDatabaseCFRQ3_2nn2sl7IStream(&mInstance, fileStream.GetInternal());
102 }
103
105 LoadInitial(int maxEntries, nn::sl::Region region)
106 {
107 if (mInstance.pDatabase != nullptr) { // Avoid triggering an assertion
109 }
110 return LoadInitial__Q3_2nn2sl18LaunchInfoDatabaseFUiQ3_2nn2sl6Region(&mInstance, maxEntries, region);
111 }
112
114 GetLaunchInfoById(nn::sl::LaunchInfo *launchInfo, uint64_t id) const
115 {
116 if (mInstance.pDatabase == nullptr) { // Avoid triggering an assertion
118 }
119 return GetLaunchInfoById__Q3_2nn2sl18LaunchInfoDatabaseCFPQ3_2nn2sl10LaunchInfoUL((details::LaunchInfoDatabaseInternal *)&mInstance, launchInfo, id);
120 }
121
122 [[nodiscard]] std::optional<uint32_t>
124 {
125 if (mInstance.pDatabase == nullptr) { // Avoid triggering an assertion
126 return {};
127 }
129 }
130
131 [[nodiscard]] std::optional<uint64_t>
133 {
134 if (mInstance.pDatabase == nullptr) { // Avoid triggering an assertion
135 return {};
136 }
138 }
139
140 [[nodiscard]] std::optional<uint64_t>
141 Register(const nn::sl::LaunchInfo &launchInfo)
142 {
143 if (mInstance.pDatabase == nullptr) { // Avoid triggering an assertion
144 return {};
145 }
147 }
148
149 [[nodiscard]] nn::Result
150 Unregister(uint64_t id)
151 {
152 if (mInstance.pDatabase == nullptr) { // Avoid triggering an assertion
154 }
156 }
157
158 void
160 {
161 if (mInstance.pDatabase == nullptr) { // Avoid triggering an assertion
162 return;
163 }
165 }
166
167 static nn::Result
168 LoadInitial(LaunchInfoDatabase &launchDatabase, uint32_t maxEntries, nn::sl::LaunchInfoDatabaseEntry *defaultEntries, uint32_t defaultEntryNum)
169 {
170 if (launchDatabase.mInstance.pDatabase != nullptr) { // Avoid triggering an assertion
172 }
173 return details::__CPR84__LoadInitial__Q3_2nn2sl18LaunchInfoDatabaseFUiPCQ4_2nn2slJ22J5EntryT1(&launchDatabase.mInstance, maxEntries, defaultEntries, defaultEntryNum);
174 }
175
176 static uint32_t
177 ListLaunchInfos(const LaunchInfoDatabase &launchDatabase, nn::sl::LaunchInfoDatabaseEntry *entriesOut, uint32_t num)
178 {
179 if (launchDatabase.mInstance.pDatabase == nullptr) { // Avoid triggering an assertion
180 return 0;
181 }
183 }
184
185 static nn::Result
186 Load(LaunchInfoDatabase &launchDatabase, nn::sl::details::IStreamBase &fileStream, nn::sl::LaunchInfoDatabaseEntry *defaultEntries, uint32_t defaultEntryNum)
187 {
188 if (launchDatabase.mInstance.pDatabase != nullptr) { // Avoid triggering an assertion
190 }
191 return details::__CPR93__Load__Q3_2nn2sl18LaunchInfoDatabaseFRQ3_2nn2sl7IStreamPCQ4_2nn2slJ15J5EntryUi(&launchDatabase.mInstance, fileStream.GetInternal(), defaultEntries, defaultEntryNum);
192 }
193
194private:
196};
197
198} // namespace nn::sl
199
200#endif
Result value type used by nn libraries.
Definition result.h:70
@ LEVEL_FATAL
Definition result.h:75
@ RESULT_MODULE_NN_SL
Definition result.h:116
std::optional< uint64_t > GetCurrentId() const
nn::Result Unregister(uint64_t id)
nn::Result GetLaunchInfoById(nn::sl::LaunchInfo *launchInfo, uint64_t id) const
static uint32_t ListLaunchInfos(const LaunchInfoDatabase &launchDatabase, nn::sl::LaunchInfoDatabaseEntry *entriesOut, uint32_t num)
static nn::Result Load(LaunchInfoDatabase &launchDatabase, nn::sl::details::IStreamBase &fileStream, nn::sl::LaunchInfoDatabaseEntry *defaultEntries, uint32_t defaultEntryNum)
std::optional< uint32_t > GetEntryCount() const
nn::Result Store(nn::sl::details::IStreamBase &fileStream)
nn::Result LoadInitial(int maxEntries, nn::sl::Region region)
nn::Result Load(nn::sl::details::IStreamBase &fileStream, nn::sl::Region region)
static nn::Result LoadInitial(LaunchInfoDatabase &launchDatabase, uint32_t maxEntries, nn::sl::LaunchInfoDatabaseEntry *defaultEntries, uint32_t defaultEntryNum)
std::optional< uint64_t > Register(const nn::sl::LaunchInfo &launchInfo)
nn::Result LoadInitial__Q3_2nn2sl18LaunchInfoDatabaseFUiQ3_2nn2sl6Region(LaunchInfoDatabaseInternal *, int, nn::sl::Region)
uint32_t GetEntryCount__Q3_2nn2sl18LaunchInfoDatabaseCFv(LaunchInfoDatabaseInternal *)
nn::Result Store__Q3_2nn2sl18LaunchInfoDatabaseCFRQ3_2nn2sl7IStream(LaunchInfoDatabaseInternal *, nn::sl::details::IStreamInternal *)
nn::Result __CPR84__LoadInitial__Q3_2nn2sl18LaunchInfoDatabaseFUiPCQ4_2nn2slJ22J5EntryT1(LaunchInfoDatabaseInternal *, uint32_t max_entries, nn::sl::LaunchInfoDatabaseEntry *defaultEntries, uint32_t defaultEntryNum)
nn::Result __CPR93__Load__Q3_2nn2sl18LaunchInfoDatabaseFRQ3_2nn2sl7IStreamPCQ4_2nn2slJ15J5EntryUi(LaunchInfoDatabaseInternal *, details::IStreamInternal *stream, nn::sl::LaunchInfoDatabaseEntry *defaultEntries, uint32_t defaultEntryNum)
void Finalize__Q3_2nn2sl18LaunchInfoDatabaseFv(LaunchInfoDatabaseInternal *)
uint64_t GetCurrentId__Q3_2nn2sl18LaunchInfoDatabaseCFv(LaunchInfoDatabaseInternal *)
uint32_t __CPR86__ListLaunchInfos__Q3_2nn2sl18LaunchInfoDatabaseCFPQ4_2nn2slJ26J5EntryUi(LaunchInfoDatabaseInternal *, nn::sl::LaunchInfoDatabaseEntry *entriesOut, uint32_t num)
uint64_t Register__Q3_2nn2sl18LaunchInfoDatabaseFRCQ3_2nn2sl10LaunchInfo(LaunchInfoDatabaseInternal *, const nn::sl::LaunchInfo &)
nn::Result Load__Q3_2nn2sl18LaunchInfoDatabaseFRQ3_2nn2sl7IStreamQ3_2nn2sl6Region(LaunchInfoDatabaseInternal *, nn::sl::details::IStreamInternal *, nn::sl::Region)
nn::Result GetLaunchInfoById__Q3_2nn2sl18LaunchInfoDatabaseCFPQ3_2nn2sl10LaunchInfoUL(LaunchInfoDatabaseInternal *, nn::sl::LaunchInfo *, uint64_t titleId)
LaunchInfoDatabaseInternal * __ct__Q3_2nn2sl18LaunchInfoDatabaseFv(LaunchInfoDatabaseInternal *)
nn::Result Unregister__Q3_2nn2sl18LaunchInfoDatabaseFUL(LaunchInfoDatabaseInternal *, uint64_t)
void Clear__Q3_2nn2sl18LaunchInfoDatabaseFv(LaunchInfoDatabaseInternal *)