std_alloc.h

00001 /* 
00002    EyeDB Object Database Management System
00003    Copyright (C) 1994-2008 SYSRA
00004    
00005    EyeDB is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009    
00010    EyeDB is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014    
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with this library; if not, write to the Free Software
00017    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA 
00018 */
00019 
00020 /*
00021    Author: Eric Viara <viara@sysra.com>
00022 */
00023 
00024 
00025 #ifndef _EYEDBLIB_STD_MALLOC_H
00026 #define _EYEDBLIB_STD_MALLOC_H
00027 
00028 typedef struct STDMap STDMap;
00029 
00030 typedef struct STDHandle STDHandle;
00031 
00032 typedef void (*STDAllocTrigger)(STDHandle *, void *, unsigned, void *);
00033 typedef void (*STDFreeTrigger)(STDHandle *, void *, unsigned, void *);
00034 typedef void (*STDReallocTrigger)(STDHandle *, void *, unsigned, unsigned, void *);
00035 
00036 struct STDHandle {
00037   /* private */
00038   STDMap *map;
00039   unsigned int idx;
00040   int  trace;
00041   long user_ctx;
00042   int  stop_size;
00043   int  counter;
00044   int  stop_counter;
00045   STDAllocTrigger alloc_trig;
00046   void *alloc_user_data;
00047   STDFreeTrigger free_trig;
00048   void *free_user_data;
00049   STDReallocTrigger realloc_trig;
00050   void *realloc_user_data;
00051   int fd;
00052 };
00053 
00054 typedef unsigned int STDOffset;
00055 
00056 extern STDHandle *STDCreate(char *, int);
00057 extern STDHandle *STDOpen(char *);
00058 extern void STDInit(STDHandle *);
00059 extern void STDClose(STDHandle *);
00060 
00061 extern void  *STDAlloc(STDHandle *, unsigned int);
00062 extern void  *STDAllocZero(STDHandle *, unsigned int);
00063 extern void  *STDRealloc(STDHandle *, void *, unsigned int);
00064 extern int   STDFree(STDHandle *, void *);
00065 
00066 extern int   STDGetSize(STDHandle *, void *);
00067 extern void  STDShowMemory(STDHandle *);
00068 extern int   STDCheckMemory(STDHandle *);
00069 extern void  STDGetInfo(STDHandle *, int *, int *, int *, int *);
00070 extern void  STDLock(STDMap *);
00071 extern void  STDUnlock(STDMap *);
00072 extern STDHandle *STDGetDefaultHandle();
00073 
00074 extern void STDTraceSet(STDHandle *, int);
00075 extern int  STDTraceGet(STDHandle *);
00076 extern void STDUserContextSet(STDHandle *, int user_ctx);
00077 extern long STDUserContextGet(STDHandle *);
00078 extern long STDIdxGet(STDHandle *);
00079 extern void STDStopOnSize(STDHandle *, int stop_size);
00080 extern void STDStopOnCounter(STDHandle *, int stop_counter);
00081 
00082 extern STDAllocTrigger STDAllocTriggerSet(STDHandle *, STDAllocTrigger,
00083                                           void *user_data);
00084 extern STDFreeTrigger STDFreeTriggerSet(STDHandle *, STDFreeTrigger,
00085                                         void *user_data);
00086 extern STDReallocTrigger STDReallocTriggerSet(STDHandle *, STDReallocTrigger,
00087                                               void *user_data);
00088 
00089 #define STD_ADDR_(MAP, OFFSET) \
00090         ((OFFSET) ? ((char *)(MAP) + (OFFSET)) : (char *)0)
00091 
00092 #define STD_OFFSET_(MAP, ADDR) \
00093         ((STDOffset)((ADDR) ? ((char *)(ADDR) - (char *)(MAP)) : 0))
00094 
00095 #define STD_ADDR(STDH, OFFSET) STD_ADDR_((STDH)->map, OFFSET)
00096 
00097 #define STD_OFFSET(STDH, ADDR) STD_OFFSET_((STDH)->map, ADDR)
00098 
00099 #define STD_NULLOFFSET ((STDOffset)0)
00100 
00101 #endif

Generated on Mon Dec 22 18:16:08 2008 for eyedb by  doxygen 1.5.3