1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
/*
Copyright (C) 2005-2007 Feeling Software Inc.
Portions of the code are:
Copyright (C) 2005-2007 Sony Computer Entertainment America
MIT License: http://www.opensource.org/licenses/mit-license.php
*/
/**
@file FUSingleton.h
This file contains the FUSingleton template class.
*/
#ifndef _FU_SINGLETON_H_
#define _FU_SINGLETON_H_
/**
A Singleton class.
Use these macros to easily implement singletons.
A singleton is a class which has only one object of this class.
The advantage of a singleton over a static class is that the
application controls when and how the singleton is created and
destroyed. The disadvantage of a singleton is that you have one
extra memory lookup to do.
There are four functions created by the macro:
CreateSingleton: initializes the singleton.
You will need to call this function before any
attempts to access the singleton are made.
DestroySingleton: release the singleton.
As with the singleton creation, this function
needs to be called in the expected order.
GetSingleton: retrieves the singleton.
@ingroup FUtils
*/
#define DeclareSingletonClass(_SingletonClass) \
private: \
static _SingletonClass* singleton; \
public: \
static _SingletonClass* CreateSingleton(); \
static void DestroySingleton(); \
static inline _SingletonClass* GetSingleton() { return singleton; } \
private:
/** Implements once the singleton pointer container.
@param _SingletonClass The class name for the singleton class. */
#define ImplementSingletonClass(_SingletonClass) \
_SingletonClass* _SingletonClass::CreateSingleton() { \
FUAssert(singleton == NULL, return singleton); \
return singleton = new _SingletonClass(); } \
void _SingletonClass::DestroySingleton() { \
FUAssert(singleton != NULL, return); \
SAFE_DELETE(singleton); } \
_SingletonClass* _SingletonClass::singleton = NULL
#endif // _FU_SINGLETON_H_
|