File dialog code CEGUISingletonX.h         A Common File Dialog window for CEGUI - singletonX

CEGUISingletonX.h

#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