/inc/hgl/Macro.h

https://github.com/hyzboy/CMGameEngine · C Header · 119 lines · 108 code · 11 blank · 0 comment · 18 complexity · 42b58536329e1cdbb56f1682799776c8 MD5 · raw file

  1. #ifndef HGL_MACRO_INCLUDE
  2. #define HGL_MACRO_INCLUDE
  3. namespace hgl
  4. {
  5. #define RETURN_OBJECT_OF_ARRAY(array,index,max_count) return (index<0||index>=max_count)?nullptr:array[index];
  6. #define NEW_NULL_ARRAY(name,type,count) { \
  7. name=new type[count]; \
  8. \
  9. memset(name,0,sizeof(type)*count); \
  10. }
  11. #define SAFE_CLEAR(name) { \
  12. if(name) \
  13. { \
  14. delete name; \
  15. name=nullptr; \
  16. } \
  17. }
  18. #define SAFE_CLEAR_ARRAY(name) { \
  19. if(name) \
  20. { \
  21. delete[] name; \
  22. name=nullptr; \
  23. } \
  24. }
  25. #define SAFE_CLEAR_OBJECT_ARRAY(name,num) { \
  26. if(name&&num>=0) \
  27. { \
  28. int safe_clear_object_array_number=num; \
  29. \
  30. while(safe_clear_object_array_number--) \
  31. if(name[safe_clear_object_array_number]) \
  32. delete name[safe_clear_object_array_number]; \
  33. \
  34. delete[] name; \
  35. name=nullptr; \
  36. } \
  37. }
  38. #define FREE_OBJECT_ARRAY(name,num) { \
  39. if(name&&num>=0) \
  40. { \
  41. int free_object_array_number=num; \
  42. \
  43. while(free_object_array_number--) \
  44. if(name[free_object_array_number]) \
  45. delete name[free_object_array_number]; \
  46. \
  47. hgl_free(name); \
  48. name=nullptr; \
  49. } \
  50. }
  51. #define SAFE_FREE_OBJECT_ARRAY(name,num) { \
  52. if(name) \
  53. FREE_OBJECT_ARRAY(name,num); \
  54. }
  55. #define SAFE_FREE(name) { \
  56. if(name) \
  57. hgl_free(name); \
  58. }
  59. #define SAFE_RECREATE(name,code) { \
  60. if(name) \
  61. delete name; \
  62. \
  63. name=code; \
  64. }
  65. #define ARRAY_CALL(name,num,code) { \
  66. int array_call_number=num; \
  67. \
  68. while(array_call_number--) \
  69. name[array_call_number]->code; \
  70. }
  71. #define LOAD_FUNC(type,func) type func(void *buf,int buf_size) \
  72. { \
  73. if(!buf||buf_size<=0)return 0; \
  74. \
  75. MemoryInputStream ms(buf,buf_size); \
  76. \
  77. return(func(&ms)); \
  78. } \
  79. \
  80. type func(const UTF16String &filename) \
  81. { \
  82. FileInputStream fs; \
  83. \
  84. if(fs.Open(filename)) \
  85. return(func(&fs)); \
  86. else \
  87. return 0; \
  88. }
  89. #define SAVE_FUNC(type,func) bool func(type data,void *buf,int buf_size) \
  90. { \
  91. if(!buf||buf_size<=0)return(false); \
  92. \
  93. MemoryOutputStream ms(buf,buf_size); \
  94. \
  95. return(func(data,&ms)); \
  96. } \
  97. \
  98. bool func(type data,const UTF16String &filename) \
  99. { \
  100. FileOutputStream fs; \
  101. \
  102. if(fs.CreateTrunc(filename)) \
  103. return(func(data,&fs)); \
  104. else \
  105. return(false); \
  106. }
  107. }//namespace hgl
  108. #endif//HGL_MACRO_INCLUDE