/Users/huttone/Devel/sedflux-new/sedflux/trunk/ew/utils/eh_mem.h

Go to the documentation of this file.
00001 #ifndef __EH_MEM_H__
00002 #define __EH_MEM_H__
00003 
00004 #include <glib.h>
00005 #include <utils/eh_types.h>
00006 
00007 #define EH_MEM_LEAK_START { glong __s = eh_mem_in_use(), __e;
00008 #define EH_MEM_LEAK_END_WARN  __e = eh_mem_in_use(); if ( __e!=__s ) { eh_watch_lng( __s ); eh_watch_lng(__e);  } }
00009 #define EH_MEM_LEAK_END_FATAL __e = eh_mem_in_use(); if ( __e!=__s ) { eh_watch_lng( __s ); eh_watch_lng(__e);  eh_exit(0); } }
00010 
00011 #define eh_compiler_require(exp) extern char _compiler_require[(exp)?1:-1]
00012 
00013 #define API_ENTRY
00014 #define LOCAL static
00015 
00016 #define IS_POWER_2(x) ( !((x)&((x)-1)) )
00017 
00018 #define USE_WIN_ASSERT static char source_file[] = __FILE__; \
00019    int static _do_win_assert( int line_no ) {         \
00020       report_win_assert( source_file , line_no );     \
00021       win_assert( line_no );                          \
00022       return( 0 );                                    \
00023    }
00024 #define assert_error _do_win_assert( __LINE__ )
00025 #define win_assert( exp ) if ( !(exp) ) { assert_error; } else
00026 void API_ENTRY report_win_assert( char *file_name , int line_no );
00027 
00028 #define USE_MY_VTABLE
00029 
00030 gpointer API_ENTRY eh_malloc         ( gsize    w_size   , Class_Desc desc , const char* file    , int line_no );
00031 gpointer API_ENTRY eh_realloc        ( gpointer old      , gsize w_size , const char *file , int line_no );
00032 void     API_ENTRY eh_walk_heap      ( void );
00033 gboolean API_ENTRY eh_is_ptr_ok      ( gpointer mem    );
00034 gpointer API_ENTRY eh_malloc_c_style ( gsize    w_size );
00035 gpointer API_ENTRY eh_calloc_c_style ( gsize    n_blocks , gsize n_block_bytes );
00036 gpointer API_ENTRY eh_realloc_c_style( gpointer mem      , gsize w_size );
00037 
00038 #if defined( USE_MY_VTABLE )
00039 glong    API_ENTRY eh_mem_in_use( void );
00040 void*    API_ENTRY eh_free_mem       ( gpointer    mem  );
00041 void     API_ENTRY eh_heap_dump      ( const char* file );
00042 void     API_ENTRY eh_free_c_style   ( gpointer    mem  );
00043 
00044 #define eh_new( type , n ) ( (type*)eh_malloc( ((gsize)(sizeof(type)))*((gsize)(n)) , \
00045                                                 G_STRINGIFY(type) , \
00046                                                 __FILE__   , \
00047                                                 __LINE__ ) )
00048 #define eh_new0( type , n ) ( (type*)eh_malloc( ((gsize)(sizeof(type)))*((gsize)(n)) , \
00049                                                 G_STRINGIFY(type) , \
00050                                                 __FILE__ , \
00051                                                 __LINE__ ) )
00052 #define eh_renew( type , old , n ) ( (type*)eh_realloc( (old) , \
00053                                                         ((gsize)sizeof(type))*((gsize)(n)) , \
00054                                                         __FILE__ , \
00055                                                         __LINE__ ) )
00056 #define eh_free( mem ) ( (mem) = eh_free_mem( mem ) )
00057 
00058 #else
00059 
00060 #define eh_new( type , n )         ( g_new0( type , n ) )
00061 #define eh_new0( type , n )        ( g_new0( type , n ) )
00062 #define eh_renew( type , old , n ) ( g_renew( type , old , n ) )
00063 #define eh_free( mem )             ( g_free( mem ) )
00064 #define eh_free_mem                ( g_free )
00065 #define eh_free_c_style            ( g_free )
00066 #define eh_heap_dump( file )       ( g_mem_profile() )
00067 
00068 #endif
00069 
00070 void** eh_alloc_2    ( gssize m , gssize n , gssize size );
00071 void   eh_free_void_2( void **p );
00072 
00073 #endif
00074 

Generated on Fri Jan 4 18:04:16 2008 for sedflux by  doxygen 1.5.2