#define GLOBAL_VP(type, name, param) \ name() \ { \ static type x param; \ return x; \ } #define GLOBAL_VARP(type, name, param) \ type& GLOBAL_VP(type, name, param) #define GLOBAL_V(type, name) GLOBAL_VP(type, name, init_) #define GLOBAL_VAR(type, name) type& GLOBAL_V(type, name) #define GLOBAL_VP_INIT(type, name, param) \ name() \ { \ static type x param; \ return x; \ } \ INITBLOCK { name(); } #define GLOBAL_VARP_INIT(type, name, param) \ type& GLOBAL_VP_INIT(type, name, param) #define GLOBAL_V_INIT(type, name) GLOBAL_VP_INIT(type, name, init_) #define GLOBAL_VAR_INIT(type, name) type& GLOBAL_V_INIT(type, name) // DEPRECATED! (USE ONCELOCK_) #define INIT_LOCKV(init, code) \ if(!init) { \ static StaticCriticalSection cs; \ CriticalSection::Lock __(cs); \ if(!init) { \ init = true; \ code \ } \ } // DEPRECATED! (USE ONCELOCK) #define INIT_LOCK(code) \ static bool init; \ INIT_LOCKV(init, code)