#pragma once #include #include #include #include #include #include #include #include #include #ifdef __cplusplus namespace nn::sl { class QuickStartApplicationSelector; class KillerNotificationSelector; namespace details { typedef struct WUT_PACKED ITitleListCacheInternal { ITitleListAccessorInternal *titleListAccessor; ILaunchedTitleListAccessorInternal *launchedTitleListAccessor; IInstalledTitleListAccessorInternal *installedTitleListAccessor; IDiscCachedTitleAccessorInternal *discCachedTitleAccessor; ISerializerInternal *titleInfoSerializer; ITimeAccessorInternal *timeAccessor; IMetaInfoAccessorInternal *metaInfoAccessor; WUT_UNKNOWN_BYTES(0x18); void *vtable; } TitleListCacheInternal; WUT_CHECK_SIZE(ITitleListCacheInternal, 0x38); WUT_CHECK_OFFSET(ITitleListCacheInternal, 0x00, titleListAccessor); WUT_CHECK_OFFSET(ITitleListCacheInternal, 0x04, launchedTitleListAccessor); WUT_CHECK_OFFSET(ITitleListCacheInternal, 0x08, installedTitleListAccessor); WUT_CHECK_OFFSET(ITitleListCacheInternal, 0x0C, discCachedTitleAccessor); WUT_CHECK_OFFSET(ITitleListCacheInternal, 0x10, titleInfoSerializer); WUT_CHECK_OFFSET(ITitleListCacheInternal, 0x14, timeAccessor); WUT_CHECK_OFFSET(ITitleListCacheInternal, 0x18, metaInfoAccessor); WUT_CHECK_OFFSET(ITitleListCacheInternal, 0x34, vtable); extern "C" ITitleListCacheInternal * __ct__Q3_2nn2sl14TitleListCacheFv(ITitleListCacheInternal *); extern "C" void Finalize__Q3_2nn2sl14TitleListCacheFv(ITitleListCacheInternal *); extern "C" nn::Result Load__Q3_2nn2sl14TitleListCacheFv(ITitleListCacheInternal *); extern "C" nn::Result Update__Q3_2nn2sl14TitleListCacheFv(ITitleListCacheInternal *); extern "C" nn::Result UpdateIfNeeded__Q3_2nn2sl14TitleListCacheFv(ITitleListCacheInternal *); extern "C" nn::Result Store__Q3_2nn2sl14TitleListCacheFv(ITitleListCacheInternal *); extern "C" nn::Result Initialize__Q3_2nn2sl14TitleListCacheFiT1(ITitleListCacheInternal *, int, int); extern "C" void Finalize__Q3_2nn2sl14TitleListCacheFv(ITitleListCacheInternal *); extern "C" void Initialize__Q3_2nn2sl14TitleListCacheFiN21( ITitleListCacheInternal *, int, int, int); extern "C" void Initialize__Q3_2nn2sl14TitleListCacheFiT1RQ3_2nn2sl18ITitleListAccessorRQ3_2nn2sl26ILaunchedTitleListAccessorRQ3_2nn2sl27IInstalledTitleListAccessorRQ3_2nn2sl24IDiscCachedTitleAccessorRQ3_2nn2sl39ISerializer__tm__20_Q3_2nn2sl9TitleInfo( ITitleListCacheInternal *, int, int, ITitleListAccessorInternal *, ILaunchedTitleListAccessorInternal *, IInstalledTitleListAccessorInternal *, IDiscCachedTitleAccessorInternal *, ISerializerInternal *); extern "C" void Initialize__Q3_2nn2sl14TitleListCacheFiN21RQ3_2nn2sl18ITitleListAccessorRQ3_2nn2sl26ILaunchedTitleListAccessorRQ3_2nn2sl27IInstalledTitleListAccessorRQ3_2nn2sl24IDiscCachedTitleAccessorRQ3_2nn2sl39ISerializer__tm__20_Q3_2nn2sl9TitleInfo( ITitleListCacheInternal *, int, int, int, ITitleListAccessorInternal *, ILaunchedTitleListAccessorInternal *, IInstalledTitleListAccessorInternal *, IDiscCachedTitleAccessorInternal *, ISerializerInternal *); extern "C" void Initialize__Q3_2nn2sl14TitleListCacheFiN21RQ3_2nn2sl18ITitleListAccessorRQ3_2nn2sl26ILaunchedTitleListAccessorRQ3_2nn2sl27IInstalledTitleListAccessorRQ3_2nn2sl24IDiscCachedTitleAccessorRQ3_2nn2sl39ISerializer__tm__20_Q3_2nn2sl9TitleInfoRQ3_2nn2sl13ITimeAccessorRQ3_2nn2sl17IMetaInfoAccessor( ITitleListCacheInternal *, int, int, int, ITitleListAccessorInternal *, ILaunchedTitleListAccessorInternal *, IInstalledTitleListAccessorInternal *, IDiscCachedTitleAccessorInternal *, ISerializerInternal *, ITimeAccessorInternal *, IMetaInfoAccessorInternal *); class ITitleListCacheBase { friend class nn::sl::QuickStartApplicationSelector; friend class nn::sl::KillerNotificationSelector; public: virtual ~ITitleListCacheBase() = default; virtual nn::Result Load() = 0; virtual nn::Result Update() = 0; virtual nn::Result UpdateIfNeeded() = 0; virtual nn::Result Store() = 0; private: virtual details::ITitleListCacheInternal * GetInternal() = 0; }; } // namespace details class TitleListCache final : public details::ITitleListCacheBase { public: TitleListCache() : mTitleListAccessor(nullptr), mLaunchedTitleListAccessor(nullptr), mInstalledTitleListAccessor(nullptr), mDiscCachedTitleAccessor(nullptr), mTitleInfoSerializer(nullptr), mTimeAccessor(nullptr), mMetaInfoAccessor(nullptr) { if (__ct__Q3_2nn2sl14TitleListCacheFv(&mInstance) != nullptr) { mTitleListAccessor = details::TitleListAccessorFromPtr(mInstance.titleListAccessor); mLaunchedTitleListAccessor = details::LaunchedTitleListAccessorFromPtr(mInstance.launchedTitleListAccessor); mInstalledTitleListAccessor = details::InstalledTitleListAccessorFromPtr(mInstance.installedTitleListAccessor); mDiscCachedTitleAccessor = details::DiscCachedTitleAccessorFromPtr(mInstance.discCachedTitleAccessor); mTitleInfoSerializer = details::SerializerFromPtr(mInstance.titleInfoSerializer); mTimeAccessor = details::TimeAccessorFromPtr(mInstance.timeAccessor); mMetaInfoAccessor = details::MetaInfoAccessorFromPtr(mInstance.metaInfoAccessor); } } ~TitleListCache() override { Finalize__Q3_2nn2sl14TitleListCacheFv(&mInstance); } details::ITitleListAccessorBase & GetTitleListAccessor() { return mTitleListAccessor; } details::ILaunchedTitleListAccessorBase & GetLaunchedTitleListAccessor() { return mLaunchedTitleListAccessor; } details::IInstalledTitleListAccessorBase & GetInstalledTitleListAccessor() { return mInstalledTitleListAccessor; } details::IDiscCachedTitleAccessorBase & GetDiscCachedTitleAccessor() { return mDiscCachedTitleAccessor; } details::ISerializerBase & GetTitleInfoSerializer() { return mTitleInfoSerializer; } details::ITimeAccessorBase & GetTimeAccessor() { return mTimeAccessor; } details::IMetaInfoAccessorBase & GetMetaInfoAccessor() { return mMetaInfoAccessor; } void Initialize(int u1, int num) { Initialize__Q3_2nn2sl14TitleListCacheFiT1(&mInstance, u1, num); } void Initialize(int u1, int num, int u3) { Initialize__Q3_2nn2sl14TitleListCacheFiN21(&mInstance, u1, num, u3); } void Initialize(int u1, int num, int u3, details::ITitleListAccessorBase &titleListAccessor, details::ILaunchedTitleListAccessorBase &launchedTitleListAccessor, details::IInstalledTitleListAccessorBase &installedTitleListAccessor, details::IDiscCachedTitleAccessorBase &discCachedTitleAccessor, details::ISerializerBase &titleInfoSerializer) { Initialize__Q3_2nn2sl14TitleListCacheFiN21RQ3_2nn2sl18ITitleListAccessorRQ3_2nn2sl26ILaunchedTitleListAccessorRQ3_2nn2sl27IInstalledTitleListAccessorRQ3_2nn2sl24IDiscCachedTitleAccessorRQ3_2nn2sl39ISerializer__tm__20_Q3_2nn2sl9TitleInfo( &mInstance, u1, num, u3, titleListAccessor.GetInternal(), launchedTitleListAccessor.GetInternal(), installedTitleListAccessor.GetInternal(), discCachedTitleAccessor.GetInternal(), titleInfoSerializer.GetInternal()); mTitleListAccessor = details::TitleListAccessorFromPtr(titleListAccessor.GetInternal()); mLaunchedTitleListAccessor = details::LaunchedTitleListAccessorFromPtr(launchedTitleListAccessor.GetInternal()); mInstalledTitleListAccessor = details::InstalledTitleListAccessorFromPtr(installedTitleListAccessor.GetInternal()); mDiscCachedTitleAccessor = details::DiscCachedTitleAccessorFromPtr(discCachedTitleAccessor.GetInternal()); mTitleInfoSerializer = details::SerializerFromPtr(titleInfoSerializer.GetInternal()); mTimeAccessor = details::TimeAccessorFromPtr(mInstance.timeAccessor); mMetaInfoAccessor = details::MetaInfoAccessorFromPtr(mInstance.metaInfoAccessor); } void Initialize(int u1, int num, details::ITitleListAccessorBase &titleListAccessor, details::ILaunchedTitleListAccessorBase &launchedTitleListAccessor, details::IInstalledTitleListAccessorBase &installedTitleListAccessor, details::IDiscCachedTitleAccessorBase &discCachedTitleAccessor, details::ISerializerBase &titleInfoSerializer) { Initialize__Q3_2nn2sl14TitleListCacheFiT1RQ3_2nn2sl18ITitleListAccessorRQ3_2nn2sl26ILaunchedTitleListAccessorRQ3_2nn2sl27IInstalledTitleListAccessorRQ3_2nn2sl24IDiscCachedTitleAccessorRQ3_2nn2sl39ISerializer__tm__20_Q3_2nn2sl9TitleInfo( &mInstance, u1, num, titleListAccessor.GetInternal(), launchedTitleListAccessor.GetInternal(), installedTitleListAccessor.GetInternal(), discCachedTitleAccessor.GetInternal(), titleInfoSerializer.GetInternal()); mTitleListAccessor = details::TitleListAccessorFromPtr(titleListAccessor.GetInternal()); mLaunchedTitleListAccessor = details::LaunchedTitleListAccessorFromPtr(launchedTitleListAccessor.GetInternal()); mInstalledTitleListAccessor = details::InstalledTitleListAccessorFromPtr(installedTitleListAccessor.GetInternal()); mDiscCachedTitleAccessor = details::DiscCachedTitleAccessorFromPtr(discCachedTitleAccessor.GetInternal()); mTitleInfoSerializer = details::SerializerFromPtr(titleInfoSerializer.GetInternal()); mTimeAccessor = details::TimeAccessorFromPtr(mInstance.timeAccessor); mMetaInfoAccessor = details::MetaInfoAccessorFromPtr(mInstance.metaInfoAccessor); } void Initialize(int u1, int u2, int u3, details::ITitleListAccessorBase &titleListAccessor, details::ILaunchedTitleListAccessorBase &launchedTitleListAccessor, details::IInstalledTitleListAccessorBase &installedTitleListAccessor, details::IDiscCachedTitleAccessorBase &discCachedTitleAccessor, details::ISerializerBase &titleInfoSerializer, details::ITimeAccessorBase &timeAccessor, details::IMetaInfoAccessorBase &metaInfoAccessor) { Initialize__Q3_2nn2sl14TitleListCacheFiN21RQ3_2nn2sl18ITitleListAccessorRQ3_2nn2sl26ILaunchedTitleListAccessorRQ3_2nn2sl27IInstalledTitleListAccessorRQ3_2nn2sl24IDiscCachedTitleAccessorRQ3_2nn2sl39ISerializer__tm__20_Q3_2nn2sl9TitleInfoRQ3_2nn2sl13ITimeAccessorRQ3_2nn2sl17IMetaInfoAccessor( &mInstance, u1, u2, u3, titleListAccessor.GetInternal(), launchedTitleListAccessor.GetInternal(), installedTitleListAccessor.GetInternal(), discCachedTitleAccessor.GetInternal(), titleInfoSerializer.GetInternal(), timeAccessor.GetInternal(), metaInfoAccessor.GetInternal()); mTitleListAccessor = details::TitleListAccessorFromPtr(titleListAccessor.GetInternal()); mLaunchedTitleListAccessor = details::LaunchedTitleListAccessorFromPtr(launchedTitleListAccessor.GetInternal()); mInstalledTitleListAccessor = details::InstalledTitleListAccessorFromPtr(installedTitleListAccessor.GetInternal()); mDiscCachedTitleAccessor = details::DiscCachedTitleAccessorFromPtr(discCachedTitleAccessor.GetInternal()); mTitleInfoSerializer = details::SerializerFromPtr(titleInfoSerializer.GetInternal()); mTimeAccessor = details::TimeAccessorFromPtr(timeAccessor.GetInternal()); mMetaInfoAccessor = details::MetaInfoAccessorFromPtr(metaInfoAccessor.GetInternal()); } void Finalize() { return Finalize__Q3_2nn2sl14TitleListCacheFv(&mInstance); } nn::Result Load() override { return Load__Q3_2nn2sl14TitleListCacheFv(&mInstance); } nn::Result Update() override { return Update__Q3_2nn2sl14TitleListCacheFv(&mInstance); } nn::Result UpdateIfNeeded() override { return UpdateIfNeeded__Q3_2nn2sl14TitleListCacheFv(&mInstance); } nn::Result Store() override { return Store__Q3_2nn2sl14TitleListCacheFv(&mInstance); } private: details::ITitleListCacheInternal * GetInternal() override { return &mInstance; } details::ITitleListCacheInternal mInstance = {}; details::TitleListAccessorFromPtr mTitleListAccessor; details::LaunchedTitleListAccessorFromPtr mLaunchedTitleListAccessor; details::InstalledTitleListAccessorFromPtr mInstalledTitleListAccessor; details::DiscCachedTitleAccessorFromPtr mDiscCachedTitleAccessor; details::SerializerFromPtr mTitleInfoSerializer; details::TimeAccessorFromPtr mTimeAccessor; details::MetaInfoAccessorFromPtr mMetaInfoAccessor; }; class TitleListCacheFromPtr final : public details::ITitleListCacheBase { public: explicit TitleListCacheFromPtr(details::ITitleListCacheInternal *ptr) : mPtrInstance(ptr) { } ~TitleListCacheFromPtr() override = default; nn::Result Load() override { return Load__Q3_2nn2sl14TitleListCacheFv(mPtrInstance); } nn::Result Update() override { return Update__Q3_2nn2sl14TitleListCacheFv(mPtrInstance); } nn::Result UpdateIfNeeded() override { return UpdateIfNeeded__Q3_2nn2sl14TitleListCacheFv(mPtrInstance); } nn::Result Store() override { return Store__Q3_2nn2sl14TitleListCacheFv(mPtrInstance); } private: details::ITitleListCacheInternal * GetInternal() override { return mPtrInstance; } details::ITitleListCacheInternal *mPtrInstance = {}; }; details::ITitleListCacheBase & GetDefaultTitleListCache(); } // namespace nn::sl #endif