40namespace pointer_arena {
46typedef void* (*SingletonCreator)();
56#if BIO_COMPACT_POINTER_STORAGE
57 #define BIO_SINGLETON_CREATE_INSTANCE(className) \
58 void* storage = ::bio::pointer_arena::Allocate( \
60 __alignof__(className)); \
63 throw ::std::bad_alloc(); \
65 return new (storage) className();
67 #define BIO_SINGLETON_CREATE_INSTANCE(className) \
68 return new className();
78#define BIO_SINGLETON(className, baseClass) \
81 virtual public ::bio::ThreadSafe \
84 static className& Instance() \
86 return *static_cast<className*>( \
87 ::bio::GetOrCreateSingleton( \
89 &className::CreateInstance)); \
92 static void* CreateInstance() \
94 BIO_SINGLETON_CREATE_INSTANCE(className) \
99 className(className const &); \
100 void operator=(className const &); \
void * Allocate(::std::size_t bytes, ::std::size_t align)
Definition PointerArena.cpp:2157
Definition FinalCell.h:29
void *(* SingletonCreator)()
Definition SingletonMacros.h:46
void * GetOrCreateSingleton(const char *key, SingletonCreator creator)
Definition SingletonRegistry.cpp:86