Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

PhxSingleton.h

00001 #ifndef PHX_SINGLETON_H
00002 #define PHX_SINGLETON_H
00003 
00004 #if PHX_COMPILER == COMPILER_MSVC
00005 // Turn off warnings generated by this singleton implementation
00006 #   pragma warning (disable : 4311)
00007 #   pragma warning (disable : 4312)
00008 #endif
00009 
00010 namespace Phx {
00013         template <typename T> class PhxSingleton
00014         {
00015         protected:
00016 
00017                 static T* ms_Singleton;
00018 
00019         public:
00020                 PhxSingleton( void )
00021                 {
00022                         assert( !ms_Singleton );
00023 #if defined( _MSC_VER ) && _MSC_VER < 1200       
00024                         int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1;
00025                         ms_Singleton = (T*)((int)this + offset);
00026 #else
00027                         ms_Singleton = static_cast< T* >( this );
00028 #endif
00029                 }
00030                 ~PhxSingleton( void )
00031                 {  assert( ms_Singleton );  ms_Singleton = 0;  }
00032                 static T& getSingleton( void )
00033                 {       assert( ms_Singleton );  return ( *ms_Singleton ); }
00034                 static T* getSingletonPtr( void )
00035                 { return ms_Singleton; }
00036         };
00037 }
00038 
00039 
00040 #endif

Generated on Wed Dec 21 22:05:37 2005 for Phoenix OSFS by  doxygen 1.4.2