/*!****************************************************************************

 @file         PVRTSingleton.h
 @copyright    Copyright (c) Imagination Technologies Limited.
 @brief        Singleton template. 
 @details      Pattern Usage: Inherit from CPVRTSingleton
               class like this: class Foo : public CPVRTSingleton<Foo> { ... };

******************************************************************************/
#ifndef __PVRTSINGLETON__
#define __PVRTSINGLETON__

/*!****************************************************************************
 @class        CPVRTSingleton
 @brief        Singleton template.
 @details      Pattern Usage: Inherit from CPVRTSingleton class like this: 
               class Foo : public CPVRTSingleton<Foo> { ... };
******************************************************************************/
template<typename T> class CPVRTSingleton
{
private:
    /*! @brief  Constructor. */
	CPVRTSingleton(const CPVRTSingleton&);
	
    /*! @brief  Deconstructor. */
    CPVRTSingleton & operator=(const CPVRTSingleton&);

public:
	static T& inst()
	{
		static T object;
		return object;
	}

	static T* ptr()
	{
		return &inst();
	}

protected:
	CPVRTSingleton() {};
	virtual ~CPVRTSingleton() {};
};


#endif // __PVRTSINGLETON__

/*****************************************************************************
End of file (PVRTSingleton.h)
*****************************************************************************/