mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-08-18 06:55:48 +03:00
Fixed singleton implementation to work also when eepp is compiled as a dynamic library.
This commit is contained in:
@@ -150,8 +150,6 @@
|
||||
|
||||
#if EE_PLATFORM == EE_PLATFORM_WIN
|
||||
#ifdef EE_DYNAMIC
|
||||
#define EE_CALL _stdcall
|
||||
|
||||
// Windows platforms
|
||||
#ifdef EE_EXPORTS
|
||||
// From DLL side, we must export
|
||||
@@ -165,20 +163,20 @@
|
||||
#pragma warning(disable : 4251)
|
||||
#pragma warning(disable : 4244)
|
||||
#pragma warning(disable : 4996)
|
||||
#pragma warning(disable : 4311)
|
||||
#pragma warning(disable : 4312)
|
||||
#endif
|
||||
#else
|
||||
// No specific directive needed for static build
|
||||
#ifndef EE_API
|
||||
#define EE_API
|
||||
#endif
|
||||
#define EE_CALL
|
||||
#endif
|
||||
#else
|
||||
// Other platforms don't need to define anything
|
||||
#ifndef EE_API
|
||||
#define EE_API
|
||||
#endif
|
||||
#define EE_CALL
|
||||
#endif
|
||||
|
||||
#ifndef EE_USE_DOUBLES
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace EE { namespace Graphics {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cFontManager)
|
||||
|
||||
cFontManager::cFontManager() {
|
||||
}
|
||||
|
||||
|
||||
@@ -7,8 +7,9 @@
|
||||
namespace EE { namespace Graphics {
|
||||
|
||||
class EE_API cFontManager : public tResourceManager<cFont>, public tSingleton<cFontManager> {
|
||||
friend class tSingleton<cFontManager>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cFontManager)
|
||||
|
||||
cFontManager();
|
||||
|
||||
virtual ~cFontManager();
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace EE { namespace Graphics { namespace Private {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cFrameBufferManager)
|
||||
|
||||
cFrameBufferManager::cFrameBufferManager()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -7,8 +7,9 @@
|
||||
namespace EE { namespace Graphics { namespace Private {
|
||||
|
||||
class EE_API cFrameBufferManager : public tContainer<cFrameBuffer>, public tSingleton<cFrameBufferManager> {
|
||||
friend class tSingleton<cFrameBufferManager>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cFrameBufferManager)
|
||||
|
||||
cFrameBufferManager();
|
||||
|
||||
virtual ~cFrameBufferManager();
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace EE { namespace Graphics {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cGlobalBatchRenderer)
|
||||
|
||||
cGlobalBatchRenderer::cGlobalBatchRenderer() {
|
||||
AllocVertexs( 1024 );
|
||||
}
|
||||
|
||||
@@ -8,8 +8,9 @@ namespace EE { namespace Graphics {
|
||||
|
||||
/** @brief The global Batch Renderer class. This class will be used by the engine for the rendering. */
|
||||
class EE_API cGlobalBatchRenderer : public tSingleton<cGlobalBatchRenderer>, public cBatchRenderer {
|
||||
friend class tSingleton<cGlobalBatchRenderer>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cGlobalBatchRenderer)
|
||||
|
||||
cGlobalBatchRenderer();
|
||||
|
||||
~cGlobalBatchRenderer();
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
namespace EE { namespace Graphics {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cGlobalShapeGroup)
|
||||
|
||||
cGlobalShapeGroup::cGlobalShapeGroup() :
|
||||
cShapeGroup( "global" )
|
||||
{
|
||||
|
||||
@@ -7,8 +7,9 @@
|
||||
namespace EE { namespace Graphics {
|
||||
|
||||
class EE_API cGlobalShapeGroup : public cShapeGroup, public tSingleton<cGlobalShapeGroup> {
|
||||
friend class tSingleton<cGlobalShapeGroup>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cGlobalShapeGroup)
|
||||
|
||||
cGlobalShapeGroup();
|
||||
|
||||
~cGlobalShapeGroup();
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace EE { namespace Graphics {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cShaderProgramManager)
|
||||
|
||||
cShaderProgramManager::cShaderProgramManager()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -7,8 +7,9 @@
|
||||
namespace EE { namespace Graphics {
|
||||
|
||||
class EE_API cShaderProgramManager : public tResourceManager<cShaderProgram>, public tSingleton<cShaderProgramManager> {
|
||||
friend class tSingleton<cShaderProgramManager>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cShaderProgramManager)
|
||||
|
||||
cShaderProgramManager();
|
||||
|
||||
virtual ~cShaderProgramManager();
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
namespace EE { namespace Graphics {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cShapeGroupManager)
|
||||
|
||||
cShapeGroupManager::cShapeGroupManager() :
|
||||
tResourceManager<cShapeGroup>( false )
|
||||
{
|
||||
|
||||
@@ -8,8 +8,9 @@
|
||||
namespace EE { namespace Graphics {
|
||||
|
||||
class EE_API cShapeGroupManager : public tResourceManager<cShapeGroup>, public tSingleton<cShapeGroupManager> {
|
||||
friend class tSingleton<cShapeGroupManager>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cShapeGroupManager)
|
||||
|
||||
cShapeGroupManager();
|
||||
|
||||
virtual ~cShapeGroupManager();
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
namespace EE { namespace Graphics {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cTextureFactory)
|
||||
|
||||
cTextureFactory::cTextureFactory() :
|
||||
mMemSize(0)
|
||||
{
|
||||
|
||||
@@ -14,8 +14,9 @@ class cGlobalBatchRenderer;
|
||||
|
||||
/** @brief The Texture Manager Class. Here we do all the textures stuff. (Singleton Class) */
|
||||
class EE_API cTextureFactory: public tSingleton<cTextureFactory>, protected cMutex {
|
||||
friend class tSingleton<cTextureFactory>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cTextureFactory)
|
||||
|
||||
/** Create an empty texture
|
||||
* @param Width Texture Width
|
||||
* @param Height Texture Height
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace EE { namespace Graphics { namespace Private {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cVertexBufferManager)
|
||||
|
||||
cVertexBufferManager::cVertexBufferManager()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -7,8 +7,9 @@
|
||||
namespace EE { namespace Graphics { namespace Private {
|
||||
|
||||
class EE_API cVertexBufferManager : public tContainer<cVertexBuffer>, public tSingleton<cVertexBufferManager> {
|
||||
friend class tSingleton<cVertexBufferManager>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cVertexBufferManager)
|
||||
|
||||
cVertexBufferManager();
|
||||
|
||||
virtual ~cVertexBufferManager();
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
|
||||
CP_NAMESPACE_BEGIN
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cPhysicsManager)
|
||||
|
||||
cPhysicsManager::cPhysicsManager() :
|
||||
mMemoryManager( false )
|
||||
{
|
||||
|
||||
@@ -11,8 +11,9 @@ class cConstraint;
|
||||
class cSpace;
|
||||
|
||||
class CP_API cPhysicsManager : public tSingleton<cPhysicsManager> {
|
||||
friend class tSingleton<cPhysicsManager>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cPhysicsManager)
|
||||
|
||||
class cDrawSpaceOptions {
|
||||
public:
|
||||
cDrawSpaceOptions() :
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace EE { namespace System {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cLog)
|
||||
|
||||
cLog::cLog() :
|
||||
mSave( false ),
|
||||
mConsoleOutput( false ),
|
||||
|
||||
@@ -8,8 +8,9 @@
|
||||
namespace EE { namespace System {
|
||||
|
||||
class EE_API cLog : public tSingleton<cLog> {
|
||||
friend class tSingleton<cLog>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cLog)
|
||||
|
||||
void Save(const std::string& filepath = "" );
|
||||
|
||||
void Write(const std::string& Text, const bool& newLine = true);
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace EE { namespace System {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cPackManager)
|
||||
|
||||
cPackManager::cPackManager() :
|
||||
mFallback( true )
|
||||
{
|
||||
|
||||
@@ -8,8 +8,9 @@
|
||||
namespace EE { namespace System {
|
||||
|
||||
class EE_API cPackManager : public tContainer<cPack>, public tSingleton<cPackManager> {
|
||||
friend class tSingleton<cPackManager>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cPackManager)
|
||||
|
||||
cPackManager();
|
||||
|
||||
virtual ~cPackManager();
|
||||
|
||||
@@ -2,19 +2,51 @@
|
||||
#define EE_SYSTEMSINGLETON_H
|
||||
|
||||
#include "../base.hpp"
|
||||
#include <typeinfo>
|
||||
|
||||
#define SINGLETON_DECLARE_HEADERS( T ) \
|
||||
static T * CreateSingleton(); \
|
||||
\
|
||||
static T * ExistsSingleton(); \
|
||||
\
|
||||
static T * instance(); \
|
||||
\
|
||||
static void DestroySingleton();
|
||||
|
||||
#define SINGLETON_DECLARE_IMPLEMENTATION( T ) \
|
||||
template<> T* tSingleton<T>::ms_singleton = NULL; \
|
||||
\
|
||||
T* T::CreateSingleton() { \
|
||||
if ( NULL == ms_singleton ) { \
|
||||
ms_singleton = eeNew( T, () ); \
|
||||
} \
|
||||
\
|
||||
return ms_singleton; \
|
||||
} \
|
||||
\
|
||||
T * T::ExistsSingleton() { \
|
||||
return ms_singleton; \
|
||||
} \
|
||||
\
|
||||
T * T::instance() { \
|
||||
return CreateSingleton(); \
|
||||
} \
|
||||
\
|
||||
void T::DestroySingleton() { \
|
||||
eeSAFE_DELETE(ms_singleton) ; \
|
||||
}
|
||||
|
||||
namespace EE { namespace System {
|
||||
|
||||
/** @brief Template class for only one instance classes. */
|
||||
template<typename T>
|
||||
class tSingleton {
|
||||
static T* ms_singleton;
|
||||
protected:
|
||||
static T* ms_singleton;
|
||||
|
||||
public:
|
||||
/** Get the singleton pointer */
|
||||
static T* CreateSingleton() {
|
||||
if (ms_singleton == 0) {
|
||||
if ( NULL == ms_singleton ) {
|
||||
ms_singleton = eeNew( T, () );
|
||||
}
|
||||
|
||||
@@ -33,13 +65,9 @@ class tSingleton {
|
||||
|
||||
/** Destroy the singleton instance */
|
||||
static void DestroySingleton() {
|
||||
if( ms_singleton != 0 ) {
|
||||
eeDelete( ms_singleton );
|
||||
ms_singleton = 0;
|
||||
}
|
||||
eeSAFE_DELETE(ms_singleton);
|
||||
}
|
||||
};
|
||||
template <typename T> T* tSingleton <T>::ms_singleton = 0;
|
||||
|
||||
}}
|
||||
#endif
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
namespace EE { namespace UI {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cUIManager)
|
||||
|
||||
cUIManager::cUIManager() :
|
||||
mWindow( NULL ),
|
||||
mKM( NULL ),
|
||||
|
||||
@@ -9,8 +9,9 @@
|
||||
namespace EE { namespace UI {
|
||||
|
||||
class EE_API cUIManager : public tSingleton<cUIManager> {
|
||||
friend class tSingleton<cUIManager>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cUIManager)
|
||||
|
||||
cUIManager();
|
||||
|
||||
~cUIManager();
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
namespace EE { namespace UI {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cUIThemeManager)
|
||||
|
||||
cUIThemeManager::cUIThemeManager() :
|
||||
tResourceManager<cUITheme>( true ),
|
||||
mFont( NULL ),
|
||||
|
||||
@@ -9,8 +9,9 @@ namespace EE { namespace UI {
|
||||
class cUIControl;
|
||||
|
||||
class EE_API cUIThemeManager : public tResourceManager<cUITheme>, public tSingleton<cUIThemeManager> {
|
||||
friend class tSingleton<cUIThemeManager>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cUIThemeManager)
|
||||
|
||||
cUIThemeManager();
|
||||
|
||||
virtual ~cUIThemeManager();
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
|
||||
namespace EE { namespace Window {
|
||||
|
||||
SINGLETON_DECLARE_IMPLEMENTATION(cEngine)
|
||||
|
||||
cEngine::cEngine() :
|
||||
mBackend( NULL ),
|
||||
mWindow( NULL )
|
||||
|
||||
@@ -9,8 +9,9 @@ namespace EE { namespace Window {
|
||||
|
||||
/** @brief The window management class. Here the engine start working. (Singleton Class). */
|
||||
class EE_API cEngine : public tSingleton<cEngine> {
|
||||
friend class tSingleton<cEngine>;
|
||||
public:
|
||||
SINGLETON_DECLARE_HEADERS(cEngine)
|
||||
|
||||
~cEngine();
|
||||
|
||||
/** Creates a new window.
|
||||
|
||||
Reference in New Issue
Block a user