source: git/xalloc/omalloc.h @ 2abbc76

spielwiese
Last change on this file since 2abbc76 was 6ce030f, checked in by Oleksandr Motsak <motsak@…>, 12 years ago
removal of the $Id$ svn tag from everywhere NOTE: the git SHA1 may be used instead (only on special places) NOTE: the libraries Singular/LIB/*.lib still contain the marker due to our current use of svn
  • Property mode set to 100644
File size: 7.6 KB
Line 
1#ifndef XMEMORY_H
2#define XMEMORY_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/*
7* ABSTRACT
8*/
9#include <stdlib.h>
10#include <string.h>
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
16typedef size_t            omBin;
17
18struct omInfo_s;
19typedef struct omInfo_s omInfo_t;
20struct omInfo_s
21{
22  long MaxBytesSystem;      /* set in omUpdateInfo(), is more accurate with malloc support   */
23  long CurrentBytesSystem;  /* set in omUpdateInfo(), is more accurate with malloc support */
24  long MaxBytesSbrk;        /* always up-to-date, not very accurate, needs omInintInfo() */
25  long CurrentBytesSbrk;    /* set in omUpdateInfo(), needs omInintInfo() */
26  long MaxBytesMmap;        /* set in omUpdateInfo(), not very accurate */
27  long CurrentBytesMmap;    /* set in omUpdateInfo(), not very accurate */
28  long UsedBytes;           /* set in omUpdateInfo() */
29  long AvailBytes;          /* set in omUpdateInfo() */
30  long UsedBytesMalloc;     /* set in omUpdateInfo(), needs malloc support */
31  long AvailBytesMalloc;    /* set in omUpdateInfo(), needs malloc support */
32  long MaxBytesFromMalloc;      /* always kept up-to-date */
33  long CurrentBytesFromMalloc;  /* always kept up-to-date */
34  long MaxBytesFromValloc;      /* always kept up-to-date */
35  long CurrentBytesFromValloc;  /* always kept up-to-date */
36  long UsedBytesFromValloc; /* set in omUpdateInfo()  */
37  long AvailBytesFromValloc;/* set in omUpdateInfo()  */
38  long MaxPages;            /* always kept up-to-date */
39  long UsedPages;           /* always kept up-to-date */
40  long AvailPages;          /* always kept up-to-date */
41  long MaxRegionsAlloc;     /* always kept up-to-date */
42  long CurrentRegionsAlloc; /* always kept up-to-date */
43};
44
45extern struct omInfo_s om_Info;
46
47struct omOpts_s;
48extern struct omOpts_s
49{
50  int MinTrack;
51  int MinCheck;
52  int MaxTrack;
53  int MaxCheck;
54  int Keep;
55  int HowToReportErrors;
56  int MarkAsStatic;
57  unsigned int PagesPerRegion;
58  void (*OutOfMemoryFunc)();
59  void (*MemoryLowFunc)();
60  void (*ErrorHook)();
61} om_Opts;
62
63typedef struct omOpts_s omOpts_t;
64
65extern int om_sing_opt_show_mem;
66
67static inline void * omAlloc(size_t s)
68{ if (s!=0) {long *d=(long*)malloc(s+sizeof(long)); *d=s;d++;return d; }
69  else return NULL;
70}
71static inline void * omAlloc0(size_t s)
72{ void *d=omAlloc(s);memset(d,0,s); return d; }
73
74static inline void *omRealloc(void *d, size_t ns)
75{ if (d==NULL) return omAlloc(ns);
76  else 
77  {
78    long *dd=(long*)d; dd--; dd=(long*)realloc(dd,ns+sizeof(long)); 
79    *dd=ns+sizeof(long);dd++; return dd;
80  }
81}
82static inline void *omReallocSize(void *d, size_t os, size_t ns)
83{ if (d==NULL) return omAlloc(ns);
84  else 
85  {
86    long *dd=(long*)d; dd--; dd=(long*)realloc(dd,ns+sizeof(long)); 
87    *dd=ns+sizeof(long);dd++; return dd;
88  }
89}
90static inline long omSizeOfAddr(void *d)
91{ long *dd=(long*)d; dd--; return *dd;}
92
93static inline void omFree(void *d)
94{ if (d!=NULL) { long *dd=(long*)d; dd--; free(dd);}}
95
96static inline void *omRealloc0(void *d, size_t ns)
97{
98  void *n=omAlloc0(ns);
99  if (d!=NULL)
100  {
101    size_t c;
102    size_t os=omSizeOfAddr(d);
103    if (ns>os) c=os; else c=ns;
104    memcpy(n,d,c);
105    omFree(d);
106  }
107  return n;
108}
109static inline void omFreeSize(void *d, size_t s)
110{ if (d!=NULL) { long *dd=(long*)d; dd--; free(dd);}}
111
112static inline char * omStrDup(const char *s)
113{ size_t l=strlen(s);char *ns=(char *)omAlloc(l+1);
114  return strcpy(ns,s);
115}
116static inline void * omMemDup(void * s)
117{ long *n;long *d=(long*)s; d--;
118  n=(long*)malloc(*d+sizeof(long));
119  memcpy(n,d,(*d)+sizeof(long));
120  n++;
121  return n;
122}
123
124/* #define omSizeWOfBin(bin_ptr) ((bin_ptr)->sizeW) */
125#define omSizeWOfBin(bin_ptr) (((bin_ptr)+sizeof(long)-1)/sizeof(long))
126
127/*******************************************************************
128 *
129 *  error codes
130 *
131 *******************************************************************/
132enum omError_e
133{
134  omError_NoError = 0,
135  omError_Unknown,
136  omError_InternalBug,
137  omError_MemoryCorrupted,
138  omError_NullAddr,
139  omError_InvalidRangeAddr,
140  omError_FalseAddr,
141  omError_FalseAddrOrMemoryCorrupted,
142  omError_WrongSize,
143  omError_FreedAddr,
144  omError_FreedAddrOrMemoryCorrupted,
145  omError_WrongBin,
146  omError_UnknownBin,
147  omError_NotBinAddr,
148  omError_UnalignedAddr,
149  omError_NullSizeAlloc,
150  omError_ListCycleError,
151  omError_SortedListError,
152  omError_KeptAddrListCorrupted,
153  omError_FreePattern,
154  omError_BackPattern,
155  omError_FrontPattern,
156  omError_NotString,
157  omError_StickyBin,
158  omError_MaxError
159};
160// typedef enum omError_e omError_t;
161   
162#define omSizeWOfAddr(P)         (omSizeOfAddr(P)/sizeof(long))
163   
164#define omTypeAllocBin(T,P,B)    P=(T)omAlloc(B)
165#define omTypeAlloc(T,P,S)       P=(T)omAlloc(S)
166#define omTypeAlloc0Bin(T,P,B)   P=(T)omAlloc0(B)
167#define omalloc(S)               omAlloc(S)
168#define omAlloc0Aligned(S)       omAlloc0(S)
169#define omAllocAligned(S)        omAlloc(S)
170#define omAllocBin(B)            omAlloc(B)
171#define omAllocBin0(B)           omAlloc0(B)
172#define omAlloc0Bin(B)           omAlloc0(B)
173#define omInitInfo()             
174#define omInitGetBackTrace()
175#define omUpdateInfo()             
176#define omPrintStats(F)
177#define omPrintInfo(F)
178#define omPrintBinStats(F)
179#define omMarkMemoryAsStatic()
180#define omfree(P)                omFree(P)
181#define omFree(P)                omFree(P)
182#define omFreeBin(P,B)           omFree(P)
183#define omfreeSize(P,S)          omFreeSize(P,S)
184#define omFreeFunc               omFree
185#define omFreeBinAddr(P)         omFree(P)
186#define omrealloc(A,NS)          omRealloc(A,NS)
187#define omreallocSize(A,OS,NS)   omRealloc(A,NS)
188#define omRealloc0Size(A,OS,NS)  omRealloc0(A,NS)
189#define omrealloc0Size(A,OS,NS)  omRealloc(A,NS)
190#define omMarkAsStaticAddr(A)
191#define omMemCpyW(A,B,S)         memcpy(A,B,(S)<<2)
192#define omMemcpyW(A,B,S)         memcpy(A,B,(S)<<2)
193#define omGetSpecBin(A)          (A)
194#define omUnGetSpecBin(A)        ((void)0)
195#define memcpyW(A,B,C)         memcpy(A,B,(C)*sizeof(long))
196#define omGetStickyBinOfBin(B) omGetSpecBin(B)
197
198
199/* debug dummies: */
200#define omTypeReallocAlignedSize     omTypeReallocSize
201#define omTypeRealloc0AlignedSize    omTypeRealloc0Size
202#define omReallocAlignedSize         omReallocSize
203#define omRealloc0AlignedSize        omRealloc0Size
204#define omMemDupAligned     omMemDup
205#define omCheckIf(cond, test)                    ((void) 0)
206#define omCheckBinAddr(addr)                     ((void) 0)
207#define omCheckAddrBin(addr,bin)                 ((void) 0)
208#define omCheckBinAddrSize(addr,size)            ((void) 0)
209#define omCheckAddrSize(addr,size)               ((void) 0)
210#define omCheckAddr(addr)                        ((void) 0)
211#define omcheckAddrSize(addr,size)               ((void) 0)
212#define omcheckAddr(addr)                        ((void) 0)
213#define omCheckBin(bin)                          ((void) 0)
214#define omCheckMemory()                          ((void) 0)
215#define omPrintCurrentBackTraceMax(A,B)          ((void) 0)
216#define omPrintUsedTrackAddrs(F,max)             ((void) 0)
217#define omPrintCurrentBackTrace(F)               ((void) 0)
218#define omPrintUsedAddrs(F,max)                  ((void) 0)
219#define omdebugAddrSize(A,B)                     ((void) 0)
220#define omPrintAddrInfo(A,B,C)                   ((void) 0)
221#define omIsBinPageAddr(A)                       (1)
222#define omTestBinAddrSize(A,B,C)                 (omError_NoError)
223#define omTestList(ptr, level)                   (omError_NoError)
224#define omInitRet_2_Info(argv0)                  ((void) 0)
225#define omMergeStickyBinIntoBin(A,B)             ((void) 0)
226
227
228#ifdef __cplusplus
229}
230#endif
231
232#undef OMALLOC_USES_MALLOC
233#define X_OMALLOC
234#define omMallocFunc omAlloc
235#define omReallocSizeFunc omReallocSize
236#define omFreeSizeFunc omFreeSize
237/* #define OM_NDEBUG */
238#undef OM_SING_KEEP
239
240#endif
Note: See TracBrowser for help on using the repository browser.