17b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!****************************************************************************
27b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
37b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @file         PVRTSingleton.h
47b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @copyright    Copyright (c) Imagination Technologies Limited.
57b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @brief        Singleton template.
67b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @details      Pattern Usage: Inherit from CPVRTSingleton
77b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens               class like this: class Foo : public CPVRTSingleton<Foo> { ... };
87b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
97b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens******************************************************************************/
107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#ifndef __PVRTSINGLETON__
117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#define __PVRTSINGLETON__
127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!****************************************************************************
147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @class        CPVRTSingleton
157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @brief        Singleton template.
167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @details      Pattern Usage: Inherit from CPVRTSingleton class like this:
177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens               class Foo : public CPVRTSingleton<Foo> { ... };
187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens******************************************************************************/
197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenstemplate<typename T> class CPVRTSingleton
207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{
217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensprivate:
227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    /*! @brief  Constructor. */
237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	CPVRTSingleton(const CPVRTSingleton&);
247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    /*! @brief  Deconstructor. */
267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens    CPVRTSingleton & operator=(const CPVRTSingleton&);
277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenspublic:
297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	static T& inst()
307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	{
317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens		static T object;
327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens		return object;
337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	}
347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	static T* ptr()
367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	{
377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens		return &inst();
387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	}
397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensprotected:
417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	CPVRTSingleton() {};
427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens	virtual ~CPVRTSingleton() {};
437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens};
447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#endif // __PVRTSINGLETON__
477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*****************************************************************************
497b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensEnd of file (PVRTSingleton.h)
507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/
517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens
52