source: git/omalloc/omInline.h @ 900cea

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