1 #ifndef SINGLETON_H_INCLUDED
\r
2 #define SINGLETON_H_INCLUDED
\r
7 static T* ms_singleton;
\r
11 assert(!ms_singleton);
\r
12 //use a cunning trick to get the singleton pointing to the start of the whole, rather than
\r
13 //the start of the Singleton part of the object
\r
14 // This used to say "int" instead of long, but that breaks
\r
15 // on 64 bit linux at least
\r
16 long offset = (long)(T*)1 - (long)(Singleton <T>*)(T*)1;
\r
17 ms_singleton = (T*)((long)this + offset);
\r
21 assert(ms_singleton);
\r
24 static inline T& GetSingleton()
\r
26 assert(ms_singleton);
\r
27 return *ms_singleton;
\r
29 static inline T* GetSingletonPtr()
\r
31 assert(ms_singleton);
\r
32 return ms_singleton;
\r
36 template <typename T> T* Singleton <T>::ms_singleton = 0;
\r