History: File dialog code CEGUISingletonX.h
Source of version: 3 (current)
Copy to clipboard
__CEGUISingletonX.h__
{CODE(wrap="1", colors="c++")}#ifndef _CEGUI_SINGLETON_X_H_
#define _CEGUI_SINGLETON_X_H_
#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4786)
#endif
namespace CEGUI
{
/*************************************************************************
Class: CEGUISingletonX
Alternative for the existing CEGUI Singleton class. This one doesn't
require the Singleton to be explicitly instantiated by 'new'.
*************************************************************************/
template<class T>
class CEGUISingletonX
{
private:
class _InstPtr
{
public:
_InstPtr() : m_ptr(0) {}
~_InstPtr() { delete m_ptr; }
T* get() { return m_ptr; }
void Set(T* p)
{
if(p!= 0)
{
delete m_ptr;
m_ptr = p;
}
}
private:
T* m_ptr;
};
static _InstPtr sm_ptr;
CEGUISingletonX();
CEGUISingletonX(const CEGUISingletonX&);
CEGUISingletonX& operator=(const CEGUISingletonX&);
public:
static T& getSingleton()
{
if(sm_ptr.get() == 0)
{
sm_ptr.Set(new T());
}
return *sm_ptr.get();
}
static T* getSingletonPtr()
{
if(sm_ptr.get() == 0)
{
sm_ptr.Set(new T());
}
return sm_ptr.get();
}
};
}
#endif{CODE}