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