source: git/xalloc/omalloc.h @ e3198f

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