Go to the source code of this file.
◆ SEAD_SINGLETON_DISPOSER
| #define SEAD_SINGLETON_DISPOSER |
( |
| CLASS | ) |
|
Value: public: \
static CLASS* instance() { return sInstance; } \
static void deleteInstance(); \
\
protected: \
{ \
public: \
~SingletonDisposer_() override; \
\
static SingletonDisposer_* sStaticDisposer; \
}; \
\
private: \
CLASS(const CLASS&); \
const CLASS& operator=(const CLASS&); \
\
protected: \
u32 mSingletonDisposerBuf_[sizeof(SingletonDisposer_) / sizeof(u32)]; \
\
static CLASS* sInstance; \
\
friend class SingletonDisposer_;
Definition seadDisposer.h:12
IDisposer()
Definition seadDisposer.cpp:14
Definition seadAssert.h:44
◆ SEAD_CREATE_SINGLETON_INSTANCE
| #define SEAD_CREATE_SINGLETON_INSTANCE |
( |
| CLASS | ) |
|
Value:
{ \
CLASS::SingletonDisposer_* staticDisposer = CLASS::SingletonDisposer_::sStaticDisposer; \
CLASS* instance = CLASS::sInstance; \
\
if (CLASS::sInstance == nullptr) \
{ \
instance = reinterpret_cast<CLASS*>(new(heap, 4) u8[sizeof(CLASS)]); \
\
\
staticDisposer = reinterpret_cast<CLASS::SingletonDisposer_*>(instance->mSingletonDisposerBuf_); \
\
CLASS::SingletonDisposer_::sStaticDisposer = new (staticDisposer) SingletonDisposer_(); \
CLASS::sInstance = new (instance) CLASS; \
} \
else \
{ \
\
} \
\
return CLASS::sInstance; \
}
◆ SEAD_DELETE_SINGLETON_INSTANCE
| #define SEAD_DELETE_SINGLETON_INSTANCE |
( |
| CLASS | ) |
|
Value: void CLASS::deleteInstance() \
{ \
CLASS::SingletonDisposer_* staticDisposer = CLASS::SingletonDisposer_::sStaticDisposer; \
if (CLASS::SingletonDisposer_::sStaticDisposer != nullptr) \
{ \
CLASS::SingletonDisposer_::sStaticDisposer = nullptr; \
staticDisposer->~SingletonDisposer_(); \
\
if (CLASS::sInstance != nullptr) \
delete CLASS::sInstance; \
\
CLASS::sInstance = nullptr; \
} \
}
◆ SEAD_SINGLETON_DISPOSER_IMPL
| #define SEAD_SINGLETON_DISPOSER_IMPL |
( |
| CLASS | ) |
|
Value: CLASS* CLASS::sInstance = nullptr; \
CLASS::SingletonDisposer_* CLASS::SingletonDisposer_::sStaticDisposer = nullptr; \
\
SEAD_CREATE_SINGLETON_INSTANCE(CLASS) \
SEAD_DELETE_SINGLETON_INSTANCE(CLASS) \
\
CLASS::SingletonDisposer_::~SingletonDisposer_() \
{ \
if (this == sStaticDisposer) \
{ \
sStaticDisposer = nullptr; \
CLASS::sInstance->~CLASS(); \
CLASS::sInstance = nullptr; \
} \
}