1 /***************************************************************************** 2 * $LastChangedDate: 2011-04-09 21:58:06 -0400 (Sat, 09 Apr 2011) $ 3 * @file 4 * @author Jim E. Brooks http://www.palomino3d.org 5 * @brief Singleton base class. 6 *//* 7 * LEGAL: COPYRIGHT (C) 2010 JIM E. BROOKS 8 * THIS SOURCE CODE IS RELEASED UNDER THE TERMS 9 * OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2). 10 *****************************************************************************/ 11 12 #ifndef BASE_SINGLETON_HH 13 #define BASE_SINGLETON_HH 1 14 15 namespace base { 16 17 //////////////////////////////////////////////////////////////////////////////// 18 /// @brief Singleton base class. 19 /// 20 class Singleton 21 { 22 PREVENT_COPYING(Singleton) 23 protected: Singleton(void)24 Singleton( void ) { } ~Singleton()25 ~Singleton() { } 26 27 #if COMPILE_THREADS 28 # define AUTO_LOCK_GET_INSTANCE AutoLock<RushLock> autolock( &msGetInstanceLock ) 29 # define AUTO_LOCK_SINGLETON AutoLock<FastLock> autolock( &msSingletonLock ) 30 #else 31 # define AUTO_LOCK_GET_INSTANCE 32 # define AUTO_LOCK_SINGLETON 33 #endif 34 35 #define DEFINE_GetInstance( CLASS ) \ 36 CLASS_METHOD CLASS& GetInstance( void ) \ 37 { \ 38 AUTO_LOCK_GET_INSTANCE; \ 39 if ( UX( msInstance == NULL ) ) \ 40 msInstance = new CLASS; \ 41 return *msInstance; \ 42 } 43 44 #define DECLARE_SINGLETON_CLASS_VARS( CLASS ) \ 45 CLASS_VAR CLASS* msInstance; 46 47 #define DEFINE_SINGLETON_CLASS_VARS( CLASS ) \ 48 CLASS* CLASS::msInstance; 49 50 }; 51 52 } // namespace base 53 54 #endif // BASE_SINGLETON_HH 55