00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _MACROS_
00019 #define _MACROS_
00020
00021
00022 #define SAFE_DELETE(p) if(p) { delete p; p = 0; }
00023 #define SAFE_DELETE_ARRAY(p) if(p) { delete [] p; p = 0; }
00024
00025 #define MMIOFOURCC(a, b, c, d) (d << 24 | c << 16 | b << 8 | a)
00026 #define MAX_CHAR 0x7f
00027
00028 #define WSTRING(text) std::wstring(text)
00029 #define STRING(text) std::string(text)
00030
00031 #define UNIQUEID unsigned int
00032
00033 #define ENGINE_CREATE_SEFFECT(engine, name, file, fxvar) \
00034 {\
00035 SoundResource res(name, file); \
00036 ResourceHandlePtr pResourceHandle = engine##->GetResourceCache()->Get(&##res); \
00037 \
00038 if(pResourceHandle != 0) \
00039 {\
00040 SoundResourceHandlePtr pSoundResourceHandle = boost::static_pointer_cast<SoundResourceHandle>(pResourceHandle);\
00041 if(pSoundResourceHandle->PrepareSoundResource())\
00042 {\
00043 fxvar = engine##->GetAudio()->CreateSoundEffect(pSoundResourceHandle);\
00044 }\
00045 assert(fxvar != 0 && "Couldn't create sound effect");\
00046 }\
00047 else\
00048 assert(false && "Resourcehandle could not be created!.");\
00049 }
00050
00051 #define ENGINE_DESTROY_SEFFECT(engine, fxvar) \
00052 engine##->GetAudio()->DestroySoundEffect(fxvar);
00053
00054 #define GET_PIXEL_POINT(engine, iP1, iP2, oP1, oP2) \
00055 \
00056 {\
00057 Vector2 p = GetPixelCoordinate(engine##->GetRenderer()->GetResolution(), iP1, iP2); \
00058 oP1 = p._x; \
00059 oP2 = p._y; \
00060 }\
00061
00062 #define FOREACH(container_type, iterator_name, container) \
00063 for(container_type##::const_iterator iterator_name = container.begin(); iterator_name != container.end(); ++iterator_name)
00064
00065
00066 #define FOREACH2(container_type, iterator_name, container) \
00067 for(container_type##::iterator iterator_name = container.begin(); iterator_name != container.end(); ++iterator_name)
00068
00069 #define MATH_PI8 0.39269908f
00070 #define MATH_PI4 0.78539816f
00071 #define MATH_PI2 1.57079633f
00072 #define MATH_PI 3.14159265f
00073 #define MATH_2PI 6.28318531f
00074
00075
00076
00077 #define CONCAT(...) __VA_ARGS__
00078
00079 #define REGISTER_CREATEABLE(factory_name, base_class_name, class_name, object_name, constructor_args) \
00080 class class_name##Creator \
00081 {\
00082 public:\
00083 static base_class_name##* Create() \
00084 {\
00085 return new class_name(constructor_args);\
00086 }\
00087 class_name##Creator()\
00088 {\
00089 factory_name##Register(object_name, Create);\
00090 }\
00091 };\
00092 static class_name##Creator g_##class_name##CreatorInstance;
00093
00094 #define REGISTER_FACTORY(factory_name, base_class_name) \
00095 typedef FactoryTemplate<std::string, base_class_name, StringHasher> factory_name##Type;\
00096 inline factory_name##Type & Get##factory_name##Instance() \
00097 {\
00098 static factory_name##Type instance; \
00099 return instance; \
00100 }\
00101 inline void factory_name##Register(const std::string& name, base_class_name * (*creator)())\
00102 {\
00103 Get##factory_name##Instance().RegisterType(name, creator);\
00104 }\
00105 template<class T>\
00106 inline T * factory_name##Create(const std::string& name) \
00107 {\
00108 return Get##factory_name##Instance().CreateObject<T>(name);\
00109 }\
00110
00111 #define INIT1(name1,val1) ,name1(val1)
00112 #define INIT2(name1,val1, name2,val2) INIT1(name1,val1), name2(val2)
00113 #define INIT3(name1,val1, name2,val2, name3,val3) INIT2(name1,val1, name2,val2), name3(val3)
00114 #define INIT4(name1,val1, name2,val2, name3,val3, name4,val4) INIT3(name1,val1, name2,val2, name3,val3), name4(val4)
00115 #define INIT5(name1,val1, name2,val2, name3,val3, name4,val4, name5,val5) INIT4(name1,val1, name2,val2, name3,val3, name4,val4), name5(val5)
00116 #define INIT6(name1,val1, name2,val2, name3,val3, name4,val4, name5,val5, name6,val6) INIT5(name1,val1, name2,val2, name3,val3, name4,val4, name5,val5), name6(val6)
00117 #define INIT7(name1,val1, name2,val2, name3,val3, name4,val4, name5,val5, name6,val6, name7,val7) INIT6(name1,val1, name2,val2, name3,val3, name4,val4, name5,val5, name6,val6), name7(val7)
00118 #define INIT8(name1,val1, name2,val2, name3,val3, name4,val4, name5,val5, name6,val6, name7,val7, name8,val8) INIT7(name1,val1, name2,val2, name3,val3, name4,val4, name5,val5, name6,val6, name7,val7), name8(val8)
00119
00120 #define DEFINE_STL_TYPE(type,name)\
00121 typedef type name;\
00122 typedef type##::iterator name##Iterator;\
00123 typedef type##::const_iterator name##ConstIterator;
00124
00125 #endif