00001
00010 #ifndef _MEM_H_
00011 #define _MEM_H_
00012
00013 #include <gtk/gtk.h>
00014
00015
00016 extern guint _alloc_cnt, _free_cnt, _null_free_cnt;
00017
00018
00019 #ifdef MEMPROOF
00020 # ifdef MEMSTAT
00021 # define _XMEMSTAT(_func) (printf(#_func": %s::%d\n", __FILE__, __LINE__))
00022 # else
00023 # define _XMEMSTAT(_func)
00024 # endif
00025
00026 # define _XNEW(_type, _cnt) \
00027 ({ _alloc_cnt++; _XMEMSTAT(_xmem); g_new(_type, _cnt); })
00028 # define _XNEW0(_type, _cnt) \
00029 ({ _alloc_cnt++; _XMEMSTAT(_xmem0); g_new0(_type, _cnt); })
00030 # define _XSTRDUP(_str) \
00031 ({ _alloc_cnt++; _XMEMSTAT(_xstrdup); g_strdup(_str); })
00032 # define _XMEMDUP(_ptr, _size) \
00033 ({ _alloc_cnt++; _XMEMSTAT(_xmemdup); g_memdup(_ptr, _size); })
00034 # define _XFREE(_ptr) \
00035 ({ \
00036 _ptr == NULL?(_XMEMSTAT(_xfree::null),_null_free_cnt++): \
00037 (_XMEMSTAT(_xfree::notnull),_free_cnt++,g_free(_ptr)); \
00038 })
00039
00040 #else
00041 #define _XNEW(_type, _cnt) (g_new(_type, _cnt))
00042 #define _XNEW0(_type, _cnt) (g_new0(_type, _cnt))
00043 #define _XSTRDUP(_str) (g_strdup(_str))
00044 #define _XMEMDUP(_ptr, _size)(g_memdup(_ptr, _size))
00045 #define _XFREE(_ptr) (g_free(_ptr))
00046 #endif
00047
00048 #endif