wut  v1.7.0
Wii U Toolchain
ITitleIconCacheDetails.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <nn/result.h>
4 #include <nn/sl/sl_cpp.h>
5 #include <wut.h>
6 
7 #ifdef __cplusplus
8 
9 namespace nn::sl {
10  class DataCreator;
11  namespace details {
12  class ITitleIconCacheBase;
14 
15  struct WUT_PACKED ITitleIconCacheInternal;
16 
21 
22  typedef struct WUT_PACKED ITitleIconCacheInternalVTable {
23  ITitleIconCacheBase *instance; // this is normally padding
24  WUT_UNKNOWN_BYTES(0x4);
25  WUT_UNKNOWN_BYTES(0x4);
26  void *destructor;
27  WUT_UNKNOWN_BYTES(0x4);
29  WUT_UNKNOWN_BYTES(0x4);
31  WUT_UNKNOWN_BYTES(0x4);
33  WUT_UNKNOWN_BYTES(0x4);
36  WUT_CHECK_SIZE(ITitleIconCacheInternalVTable, 0x30);
37  WUT_CHECK_OFFSET(ITitleIconCacheInternalVTable, 0x14, LoadFn);
38  WUT_CHECK_OFFSET(ITitleIconCacheInternalVTable, 0x1c, UpdateFn);
39  WUT_CHECK_OFFSET(ITitleIconCacheInternalVTable, 0x24, StoreFn);
40  WUT_CHECK_OFFSET(ITitleIconCacheInternalVTable, 0x2C, GetFn);
41 
42  typedef struct WUT_PACKED ITitleIconCacheInternal {
45  WUT_CHECK_SIZE(ITitleIconCacheInternal, 0x04);
46  WUT_CHECK_OFFSET(ITitleIconCacheInternal, 0x00, vtable);
47 
49  friend class nn::sl::DataCreator;
50 
51  public:
52  ITitleIconCacheBase() = default;
53 
54  virtual ~ITitleIconCacheBase() = default;
55 
56  virtual nn::Result Load() = 0;
57 
58  virtual nn::Result Update(nn::sl::TitleInfo *titleInfos, int num) = 0;
59 
60  virtual nn::Result Store() = 0;
61 
62  virtual void Get(nn::sl::IconInfo *iconInfos, int num) const = 0;
63 
64  private:
65  virtual details::ITitleIconCacheInternal *GetInternal() = 0;
66  };
67 
69  public:
70  explicit TitleIconCacheFromPtr(details::ITitleIconCacheInternal *ptr) : mInstancePtr(ptr) {
71  }
72  nn::Result Load() override {
73  if (!mInstancePtr) {
75  }
76  return mInstancePtr->vtable->LoadFn(mInstancePtr);
77  }
78 
79  nn::Result Update(nn::sl::TitleInfo *titleInfos, int num) override {
80  if (!mInstancePtr) {
82  }
83  return mInstancePtr->vtable->UpdateFn(mInstancePtr, titleInfos, num);
84  }
85 
86  nn::Result Store() override {
87  if (!mInstancePtr) {
89  }
90  return mInstancePtr->vtable->StoreFn(mInstancePtr);
91  }
92 
93  void Get(nn::sl::IconInfo *iconInfos, int num) const override {
94  if (!mInstancePtr) {
95  return;
96  }
97  mInstancePtr->vtable->GetFn(mInstancePtr, iconInfos, num);
98  }
99 
100  private:
101  details::ITitleIconCacheInternal *GetInternal() override {
102  return mInstancePtr;
103  }
104 
105  details::ITitleIconCacheInternal *mInstancePtr;
106  };
107  } // namespace details
108 
109 
110 } // namespace nn::sl
111 
112 #endif
Result value type used by nn libraries.
Definition: result.h:68
@ LEVEL_FATAL
Definition: result.h:73
@ RESULT_MODULE_NN_SL
Definition: result.h:114
virtual nn::Result Update(nn::sl::TitleInfo *titleInfos, int num)=0
virtual void Get(nn::sl::IconInfo *iconInfos, int num) const =0
TitleIconCacheFromPtr(details::ITitleIconCacheInternal *ptr)
void Get(nn::sl::IconInfo *iconInfos, int num) const override
nn::Result Update(nn::sl::TitleInfo *titleInfos, int num) override
struct nn::sl::details::ITitleIconCacheInternal ITitleIconCacheInternal
void(* TitleIconCache_GetFn)(ITitleIconCacheInternal *, IconInfo *, int)
struct nn::sl::details::ITitleIconCacheInternalVTable ITitleIconCacheInternalVTable
nn::Result(* TitleIconCache_UpdateFn)(ITitleIconCacheInternal *, TitleInfo *, int)
nn::Result(* TitleIconCache_LoadFn)(ITitleIconCacheInternal *)
nn::Result(* TitleIconCache_StoreFn)(ITitleIconCacheInternal *)
ITitleIconCacheInternalVTable * vtable