OLD | NEW |
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | 1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 /* This Source Code Form is subject to the terms of the Mozilla Public | 2 /* This Source Code Form is subject to the terms of the Mozilla Public |
3 * License, v. 2.0. If a copy of the MPL was not distributed with this | 3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
5 | 5 |
6 #ifndef plarena_h___ | 6 #ifndef plarena_h___ |
7 #define plarena_h___ | 7 #define plarena_h___ |
8 /* | 8 /* |
9 * Lifetime-based fast allocation, inspired by much prior art, including | 9 * Lifetime-based fast allocation, inspired by much prior art, including |
10 * "Fast Allocation and Deallocation of Memory Based on Object Lifetimes" | 10 * "Fast Allocation and Deallocation of Memory Based on Object Lifetimes" |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 | 130 |
131 #define PL_INIT_ARENA_POOL(pool, name, size) \ | 131 #define PL_INIT_ARENA_POOL(pool, name, size) \ |
132 PL_InitArenaPool(pool, name, size, PL_ARENA_CONST_ALIGN_MASK + 1) | 132 PL_InitArenaPool(pool, name, size, PL_ARENA_CONST_ALIGN_MASK + 1) |
133 #else | 133 #else |
134 #define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask) | 134 #define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask) |
135 #endif | 135 #endif |
136 | 136 |
137 #define PL_ARENA_ALLOCATE(p, pool, nb) \ | 137 #define PL_ARENA_ALLOCATE(p, pool, nb) \ |
138 PR_BEGIN_MACRO \ | 138 PR_BEGIN_MACRO \ |
139 PLArena *_a = (pool)->current; \ | 139 PLArena *_a = (pool)->current; \ |
140 PRUint32 _nb = PL_ARENA_ALIGN(pool, nb); \ | 140 PRUint32 _nb = PL_ARENA_ALIGN(pool, (PRUint32)nb); \ |
141 PRUword _p = _a->avail; \ | 141 PRUword _p = _a->avail; \ |
142 if (_nb < nb) { \ | 142 if (_nb < (PRUint32)nb) { \ |
143 _p = 0; \ | 143 _p = 0; \ |
144 } else if (_nb > (_a->limit - _a->avail)) { \ | 144 } else if (_nb > (_a->limit - _a->avail)) { \ |
145 _p = (PRUword)PL_ArenaAllocate(pool, _nb); \ | 145 _p = (PRUword)PL_ArenaAllocate(pool, _nb); \ |
146 } else { \ | 146 } else { \ |
147 _a->avail += _nb; \ | 147 _a->avail += _nb; \ |
148 } \ | 148 } \ |
149 p = (void *)_p; \ | 149 p = (void *)_p; \ |
150 if (p) { \ | 150 if (p) { \ |
151 PL_MAKE_MEM_UNDEFINED(p, nb); \ | 151 PL_MAKE_MEM_UNDEFINED(p, (PRUint32)nb); \ |
152 PL_ArenaCountAllocation(pool, nb); \ | 152 PL_ArenaCountAllocation(pool, (PRUint32)nb); \ |
153 } \ | 153 } \ |
154 PR_END_MACRO | 154 PR_END_MACRO |
155 | 155 |
156 #define PL_ARENA_GROW(p, pool, size, incr) \ | 156 #define PL_ARENA_GROW(p, pool, size, incr) \ |
157 PR_BEGIN_MACRO \ | 157 PR_BEGIN_MACRO \ |
158 PLArena *_a = (pool)->current; \ | 158 PLArena *_a = (pool)->current; \ |
159 PRUint32 _incr = PL_ARENA_ALIGN(pool, incr); \ | 159 PRUint32 _incr = PL_ARENA_ALIGN(pool, (PRUint32)incr); \ |
160 if (_incr < incr) { \ | 160 if (_incr < (PRUint32)incr) { \ |
161 p = NULL; \ | 161 p = NULL; \ |
162 } else if (_a->avail == (PRUword)(p) + PL_ARENA_ALIGN(pool, size) && \ | 162 } else if (_a->avail == (PRUword)(p) + PL_ARENA_ALIGN(pool, size) && \ |
163 _incr <= (_a->limit - _a->avail)) { \ | 163 _incr <= (_a->limit - _a->avail)) { \ |
164 PL_MAKE_MEM_UNDEFINED((unsigned char *)(p) + size, incr); \ | 164 PL_MAKE_MEM_UNDEFINED((unsigned char *)(p) + size, (PRUint32)incr);
\ |
165 _a->avail += _incr; \ | 165 _a->avail += _incr; \ |
166 PL_ArenaCountInplaceGrowth(pool, size, incr); \ | 166 PL_ArenaCountInplaceGrowth(pool, size, (PRUint32)incr); \ |
167 } else { \ | 167 } else { \ |
168 p = PL_ArenaGrow(pool, p, size, incr); \ | 168 p = PL_ArenaGrow(pool, p, size, (PRUint32)incr); \ |
169 } \ | 169 } \ |
170 if (p) {\ | 170 if (p) {\ |
171 PL_ArenaCountGrowth(pool, size, incr); \ | 171 PL_ArenaCountGrowth(pool, size, (PRUint32)incr); \ |
172 } \ | 172 } \ |
173 PR_END_MACRO | 173 PR_END_MACRO |
174 | 174 |
175 #define PL_ARENA_MARK(pool) ((void *) (pool)->current->avail) | 175 #define PL_ARENA_MARK(pool) ((void *) (pool)->current->avail) |
176 #define PR_UPTRDIFF(p,q) ((PRUword)(p) - (PRUword)(q)) | 176 #define PR_UPTRDIFF(p,q) ((PRUword)(p) - (PRUword)(q)) |
177 | 177 |
178 #define PL_CLEAR_UNUSED_PATTERN(a, pattern) \ | 178 #define PL_CLEAR_UNUSED_PATTERN(a, pattern) \ |
179 PR_BEGIN_MACRO \ | 179 PR_BEGIN_MACRO \ |
180 PR_ASSERT((a)->avail <= (a)->limit); \ | 180 PR_ASSERT((a)->avail <= (a)->limit); \ |
181 PL_MAKE_MEM_UNDEFINED((void*)(a)->avail, (a)->limit - (a)->avail); \ | 181 PL_MAKE_MEM_UNDEFINED((void*)(a)->avail, (a)->limit - (a)->avail); \ |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 #define PL_ArenaCountInplaceGrowth(ap, size, incr) /* nothing */ | 249 #define PL_ArenaCountInplaceGrowth(ap, size, incr) /* nothing */ |
250 #define PL_ArenaCountGrowth(ap, size, incr) /* nothing */ | 250 #define PL_ArenaCountGrowth(ap, size, incr) /* nothing */ |
251 #define PL_ArenaCountRelease(ap, mark) /* nothing */ | 251 #define PL_ArenaCountRelease(ap, mark) /* nothing */ |
252 #define PL_ArenaCountRetract(ap, mark) /* nothing */ | 252 #define PL_ArenaCountRetract(ap, mark) /* nothing */ |
253 | 253 |
254 #endif /* !PL_ARENAMETER */ | 254 #endif /* !PL_ARENAMETER */ |
255 | 255 |
256 PR_END_EXTERN_C | 256 PR_END_EXTERN_C |
257 | 257 |
258 #endif /* plarena_h___ */ | 258 #endif /* plarena_h___ */ |
OLD | NEW |