/*
* Ascent MMORPG Server
* Copyright (C) 2005-2007 Ascent Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
#ifndef WOWSERVER_SINGLETON_H
#define WOWSERVER_SINGLETON_H
#include "Errors.h"
/// Should be placed in the appropriate .cpp file somewhere
#define initialiseSingleton( type ) \
template <> type * Singleton < type > :: mSingleton = 0
/// To be used as a replacement for initialiseSingleton( )
/// Creates a file-scoped Singleton object, to be retrieved with getSingleton
#define createFileSingleton( type ) \
initialiseSingleton( type ); \
type the##type
template < class type > class SERVER_DECL Singleton {
public:
/// Constructor
Singleton( ) {
/// If you hit this assert, this singleton already exists -- you can't create another one!
WPAssert( mSingleton == 0 );
mSingleton = static_cast(this);
}
/// Destructor
virtual ~Singleton( ) {
mSingleton = 0;
}
/// Retrieve the singleton object, if you hit this assert this singleton object doesn't exist yet
static type & getSingleton( ) { WPAssert( mSingleton ); return *mSingleton; }
/// Retrieve a pointer to the singleton object
static type * getSingletonPtr( ) { return mSingleton; }
protected:
/// Singleton pointer, must be set to 0 prior to creating the object
static type * mSingleton;
};
#endif