1 /** 2 * @file mem.h 3 * @author Guillaume Bour. 2002 4 5 * @version 0.1 6 * @date 28/02/2002 7 8 * memory managment 9 */ 10 #ifndef _MEM_H_ 11 #define _MEM_H_ 12 13 #include <gtk/gtk.h> 14 15 16 extern guint _alloc_cnt, _free_cnt, _null_free_cnt; 17 18 /*>>> macros */ 19 #ifdef MEMPROOF 20 # ifdef MEMSTAT 21 # define _XMEMSTAT(_func) (printf(#_func": %s::%d\n", __FILE__, __LINE__)) 22 # else 23 # define _XMEMSTAT(_func) 24 # endif 25 26 # define _XNEW(_type, _cnt) \ 27 ({ _alloc_cnt++; _XMEMSTAT(_xmem); g_new(_type, _cnt); }) 28 # define _XNEW0(_type, _cnt) \ 29 ({ _alloc_cnt++; _XMEMSTAT(_xmem0); g_new0(_type, _cnt); }) 30 # define _XSTRDUP(_str) \ 31 ({ _alloc_cnt++; _XMEMSTAT(_xstrdup); g_strdup(_str); }) 32 # define _XMEMDUP(_ptr, _size) \ 33 ({ _alloc_cnt++; _XMEMSTAT(_xmemdup); g_memdup(_ptr, _size); }) 34 # define _XFREE(_ptr) \ 35 ({ \ 36 _ptr == NULL?(_XMEMSTAT(_xfree::null),_null_free_cnt++): \ 37 (_XMEMSTAT(_xfree::notnull),_free_cnt++,g_free(_ptr)); \ 38 }) 39 40 #else 41 #define _XNEW(_type, _cnt) (g_new(_type, _cnt)) 42 #define _XNEW0(_type, _cnt) (g_new0(_type, _cnt)) 43 #define _XSTRDUP(_str) (g_strdup(_str)) 44 #define _XMEMDUP(_ptr, _size)(g_memdup(_ptr, _size)) 45 #define _XFREE(_ptr) (g_free(_ptr)) 46 #endif 47 48 #endif /* _MEM_H_ */ 49