source: git/omalloc/omInline.h @ a82c308

spielwiese
Last change on this file since a82c308 was 341696, checked in by Hans Schönemann <hannes@…>, 14 years ago
Adding Id property to all files git-svn-id: file:///usr/local/Singular/svn/trunk@12231 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 5.9 KB
Line 
1/*******************************************************************
2 *  File:    omInline.c
3 *  Purpose: implementation of omalloc functions which could
4 *           be inlined
5 *  Author:  obachman@mathematik.uni-kl.de (Olaf Bachmann)
6 *  Created: 11/99
7 *  Version: $Id$
8 *******************************************************************/
9#if defined(OM_INLINE) || defined(OM_ALLOC_C)
10
11#ifndef OM_INLINE_H
12#define OM_INLINE_H
13
14OM_INLINE_IMPL omBin omGetBinOfPage(omBinPage page)
15{
16  unsigned long sticky = omGetStickyOfPage(page);
17  omBin bin = omGetTopBinOfPage(page);
18
19  if (! omIsStickyBin(bin))
20  {
21    while (bin->sticky != sticky && bin->next != NULL)
22    {
23      bin = bin->next;
24    }
25  }
26  return bin;
27}
28
29OM_INLINE_IMPL int _omIsBinPageAddr(const void* addr)
30{
31  unsigned long index = omGetPageIndexOfAddr(addr);
32  if (index >= om_MinBinPageIndex && index <= om_MaxBinPageIndex)
33  {
34    unsigned long shift = omGetPageShiftOfAddr(addr);
35    return ((om_BinPageIndicies[index - om_MinBinPageIndex] & (((unsigned long) 1) << shift)) != 0L);
36  }
37  return 0;
38}
39
40OM_INLINE_IMPL void* _omAllocBin(omBin bin)
41{
42  void* addr;
43  __omTypeAllocBin(void*, addr, bin);
44  return addr;
45}
46OM_INLINE_IMPL void* _omAlloc0Bin(omBin bin)
47{
48  void* addr;
49  __omTypeAlloc0Bin(void*, addr, bin);
50  return addr;
51}
52OM_INLINE_IMPL void* _omReallocBin(void* addr, omBin old_bin, omBin new_bin)
53{
54  void* new_addr;
55  __omTypeReallocBin(addr, old_bin, void*, new_addr, new_bin);
56  return new_addr;
57}
58OM_INLINE_IMPL void* _omRealloc0Bin(void* addr, omBin old_bin, omBin new_bin)
59{
60  void* new_addr;
61  __omTypeRealloc0Bin(addr, old_bin, void*, new_addr, new_bin);
62  return new_addr;
63}
64
65
66OM_INLINE_IMPL void* _omAlloc(size_t size)
67{
68  void* addr;
69  __omTypeAlloc(void*, addr, size);
70  return addr;
71}
72OM_INLINE_IMPL void* _omAlloc0(size_t size)
73{
74  void* addr;
75  __omTypeAlloc0(void*, addr, size);
76  return addr;
77}
78OM_INLINE_IMPL void* _omReallocSize(void* addr, size_t old_size, size_t new_size)
79{
80  void* new_addr;
81  __omTypeReallocSize(addr, old_size, void*, new_addr, new_size);
82  return new_addr;
83}
84OM_INLINE_IMPL void* _omRealloc0Size(void* addr, size_t old_size, size_t new_size)
85{
86  void* new_addr;
87  __omTypeRealloc0Size(addr, old_size, void*, new_addr, new_size);
88  return new_addr;
89}
90OM_INLINE_IMPL void* _omRealloc(void* addr, size_t size)
91{
92  void* new_addr;
93  __omTypeRealloc(addr, void*, new_addr, size);
94  return new_addr;
95}
96OM_INLINE_IMPL void* _omRealloc0(void* addr, size_t size)
97{
98  void* new_addr;
99  __omTypeRealloc0(addr, void*, new_addr, size);
100  return new_addr;
101}
102
103#ifdef OM_ALIGNMENT_NEEDS_WORK
104OM_INLINE_IMPL void* _omAllocAligned(size_t size)
105{
106  void* addr;
107  __omTypeAllocAligned(void*, addr, size);
108  return addr;
109}
110OM_INLINE_IMPL void* _omAlloc0Aligned(size_t size)
111{
112  void* addr;
113  __omTypeAlloc0Aligned(void*, addr, size);
114  return addr;
115}
116OM_INLINE_IMPL void* _omReallocAlignedSize(void* addr, size_t old_size, size_t new_size)
117{
118  void* new_addr;
119  __omTypeReallocAlignedSize(addr, old_size, void*, new_addr, new_size);
120  return new_addr;
121}
122OM_INLINE_IMPL void* _omRealloc0AlignedSize(void* addr, size_t old_size, size_t new_size)
123{
124  void* new_addr;
125  __omTypeRealloc0AlignedSize(addr, old_size, void*, new_addr, new_size);
126  return new_addr;
127}
128OM_INLINE_IMPL void* _omReallocAligned(void* addr, size_t size)
129{
130  void* new_addr;
131  __omTypeReallocAligned(addr, void*, new_addr, size);
132  return new_addr;
133}
134OM_INLINE_IMPL void* _omRealloc0Aligned(void* addr, size_t size)
135{
136  void* new_addr;
137  __omTypeRealloc0Aligned(addr, void*, new_addr, size);
138  return new_addr;
139}
140
141OM_INLINE_IMPL void* _omMemDupAligned(void* addr)
142{
143  void* r;
144  size_t sizeW = omSizeWOfAddr(addr);
145  __omTypeAllocAligned(void*, r, sizeW << LOG_SIZEOF_LONG);
146  omMemcpyW(r, addr, sizeW);
147  return r;
148}
149
150#endif /* OM_ALIGNMENT_NEEDS_WORK */
151
152OM_INLINE_IMPL char* _omStrDup(const char* s)
153{
154  void* r;
155  size_t i=(size_t)0;
156
157  while (s[i]) i++;
158  i++;
159  __omTypeAlloc(void*, r, i);
160  memcpy(r, (void*) s, i);
161  return (char*) r;
162}
163
164OM_INLINE_IMPL void* _omMemDup(void* addr)
165{
166  void* r;
167  if (omIsNormalBinPageAddr(addr))
168  {
169    omBin bin = omGetTopBinOfAddr(addr);
170    __omTypeAllocBin(void*, r, bin);
171    omMemcpyW(r, addr, bin->sizeW);
172  }
173  else
174  {
175    size_t size = omSizeWOfAddr(addr);
176    __omTypeAlloc(void*, r, size << LOG_SIZEOF_LONG);
177    omMemcpyW(r, addr, size);
178  }
179  return r;
180}
181
182OM_INLINE_IMPL void* _omalloc(size_t size)
183{
184  void* addr;
185  if (! size) size = (size_t)1;
186  __omTypeAllocAligned(void*, addr,size);
187  return addr;
188}
189
190OM_INLINE_IMPL void* _omalloc0(size_t size)
191{
192  void* addr;
193  if (! size) size = (size_t)1;
194  __omTypeAlloc0Aligned(void*,addr, size);
195  return addr;
196}
197
198OM_INLINE_IMPL void* _omreallocSize(void* addr, size_t old_size, size_t new_size)
199{
200  void* new_addr;
201
202  if (!new_size) new_size = (size_t)1;
203  if (addr != NULL)
204  {
205    __omTypeReallocAlignedSize(addr, old_size, void* , new_addr, new_size);
206  }
207  else
208  {
209    __omTypeAllocAligned(void* , new_addr, new_size);
210  }
211  return new_addr;
212}
213
214OM_INLINE_IMPL void* _omrealloc0Size(void* addr, size_t old_size, size_t new_size)
215{
216  void* new_addr;
217
218  if (!new_size) new_size = (size_t)1;
219  if (addr != NULL && old_size > ((size_t)0))
220  {
221    __omTypeRealloc0AlignedSize(addr, old_size, void* , new_addr, new_size);
222  }
223  else
224  {
225    __omTypeAlloc0(void* , new_addr, new_size);
226  }
227  return new_addr;
228}
229
230OM_INLINE_IMPL void* _omrealloc(void* addr, size_t size)
231{
232  void* new_addr;
233
234  if (!size) size = (size_t)1;
235  if (addr != NULL)
236  {
237    __omTypeReallocAligned(addr, void* , new_addr, size);
238  }
239  else
240  {
241    __omTypeAlloc(void* , new_addr, size);
242  }
243  return new_addr;
244}
245
246OM_INLINE_IMPL void* _omrealloc0(void* addr, size_t size)
247{
248  void* new_addr;
249
250  if (!size) size = (size_t)1;
251  if (addr != NULL)
252  {
253    __omTypeRealloc0Aligned(addr, void* , new_addr, size);
254  }
255  else
256  {
257    __omTypeAlloc0(void* , new_addr, size);
258  }
259  return new_addr;
260}
261#endif /* OM_INLINE_H */
262
263#endif /* defined(OM_INLINE) || defined(OM_ALLOC_C) */
Note: See TracBrowser for help on using the repository browser.