1macro_rules! forward_methods {
9 (
10 self: $self:ident
11 access: {$access:expr}
12 access_mut: {$access_mut:expr}
13 lifetime: $lifetime:lifetime
14 ) => {
15 #[must_use]
17 #[inline(always)]
18 pub fn allocator(&$self) -> Option<&$lifetime A> {
19 BumpAllocatorScope::allocator($access)
20 }
21
22 #[inline(always)]
24 pub fn claim(&$self) -> BumpClaimGuard<'_, $lifetime, A, S> {
25 BumpAllocatorScope::claim($access)
26 }
27
28 #[must_use]
30 #[inline(always)]
31 pub fn is_claimed(&self) -> bool {
32 BumpAllocatorCore::is_claimed(self)
33 }
34
35 #[inline(always)]
37 pub fn scope_guard(&mut $self) -> BumpScopeGuard<'_, A, S> {
38 BumpAllocator::scope_guard($access_mut)
39 }
40
41 #[inline(always)]
43 pub fn scoped<R>(&mut $self, f: impl FnOnce(&mut BumpScope<A, S>) -> R) -> R {
44 BumpAllocator::scoped($access_mut, f)
45 }
46
47 #[inline(always)]
49 pub fn scoped_aligned<const NEW_MIN_ALIGN: usize, R>(
50 &mut $self,
51 f: impl FnOnce(&mut BumpScope<A, S::WithMinimumAlignment<NEW_MIN_ALIGN>>) -> R,
52 ) -> R
53 where
54 MinimumAlignment<NEW_MIN_ALIGN>: SupportedMinimumAlignment,
55 {
56 BumpAllocator::scoped_aligned($access_mut, f)
57 }
58
59 #[inline(always)]
61 pub fn aligned<const NEW_MIN_ALIGN: usize, R>(
62 &mut $self,
63 f: impl FnOnce(&mut BumpScope<$lifetime, A, S::WithMinimumAlignment<NEW_MIN_ALIGN>>) -> R,
64 ) -> R
65 where
66 MinimumAlignment<NEW_MIN_ALIGN>: SupportedMinimumAlignment,
67 {
68 BumpAllocatorScope::aligned($access_mut, f)
69 }
70
71 #[inline(always)]
73 pub fn checkpoint(&$self) -> Checkpoint {
74 BumpAllocatorCore::checkpoint($access)
75 }
76
77 #[inline(always)]
79 pub unsafe fn reset_to(&$self, checkpoint: Checkpoint) {
80 unsafe { BumpAllocatorCore::reset_to($access, checkpoint) }
81 }
82
83 #[inline(always)]
85 #[cfg(feature = "panic-on-alloc")]
86 pub fn alloc<T>(&$self, value: T) -> BumpBox<$lifetime, T> {
87 BumpAllocatorTypedScope::alloc($access, value)
88 }
89
90 #[inline(always)]
92 pub fn try_alloc<T>(&$self, value: T) -> Result<BumpBox<$lifetime, T>, AllocError> {
93 BumpAllocatorTypedScope::try_alloc($access, value)
94 }
95
96 #[inline(always)]
98 #[cfg(feature = "panic-on-alloc")]
99 pub fn alloc_with<T>(&$self, f: impl FnOnce() -> T) -> BumpBox<$lifetime, T> {
100 BumpAllocatorTypedScope::alloc_with($access, f)
101 }
102
103 #[inline(always)]
105 pub fn try_alloc_with<T>(&$self, f: impl FnOnce() -> T) -> Result<BumpBox<$lifetime, T>, AllocError> {
106 BumpAllocatorTypedScope::try_alloc_with($access, f)
107 }
108
109 #[inline(always)]
111 #[cfg(feature = "panic-on-alloc")]
112 pub fn alloc_default<T: Default>(&$self) -> BumpBox<$lifetime, T> {
113 BumpAllocatorTypedScope::alloc_default($access)
114 }
115
116 #[inline(always)]
118 pub fn try_alloc_default<T: Default>(&$self) -> Result<BumpBox<$lifetime, T>, AllocError> {
119 BumpAllocatorTypedScope::try_alloc_default($access)
120 }
121
122 #[inline(always)]
124 #[cfg(feature = "nightly-clone-to-uninit")]
125 pub fn alloc_clone<T: CloneToUninit + ?Sized>(&$self, value: &T) -> BumpBox<$lifetime, T> {
126 BumpAllocatorTypedScope::alloc_clone($access, value)
127 }
128
129 #[inline(always)]
131 #[cfg(feature = "nightly-clone-to-uninit")]
132 pub fn try_alloc_clone<T: CloneToUninit + ?Sized>(&$self, value: &T) -> Result<BumpBox<$lifetime, T>, AllocError> {
133 BumpAllocatorTypedScope::try_alloc_clone($access, value)
134 }
135
136 #[inline(always)]
138 #[cfg(feature = "panic-on-alloc")]
139 pub fn alloc_slice_move<T>(&$self, slice: impl OwnedSlice<Item = T>) -> BumpBox<$lifetime, [T]> {
140 BumpAllocatorTypedScope::alloc_slice_move($access, slice)
141 }
142
143 #[inline(always)]
145 pub fn try_alloc_slice_move<T>(&$self, slice: impl OwnedSlice<Item = T>) -> Result<BumpBox<$lifetime, [T]>, AllocError> {
146 BumpAllocatorTypedScope::try_alloc_slice_move($access, slice)
147 }
148
149 #[inline(always)]
151 #[cfg(feature = "panic-on-alloc")]
152 pub fn alloc_slice_copy<T: Copy>(&$self, slice: &[T]) -> BumpBox<$lifetime, [T]> {
153 BumpAllocatorTypedScope::alloc_slice_copy($access, slice)
154 }
155
156 #[inline(always)]
158 pub fn try_alloc_slice_copy<T: Copy>(&$self, slice: &[T]) -> Result<BumpBox<$lifetime, [T]>, AllocError> {
159 BumpAllocatorTypedScope::try_alloc_slice_copy($access, slice)
160 }
161
162 #[inline(always)]
164 #[cfg(feature = "panic-on-alloc")]
165 pub fn alloc_slice_clone<T: Clone>(&$self, slice: &[T]) -> BumpBox<$lifetime, [T]> {
166 BumpAllocatorTypedScope::alloc_slice_clone($access, slice)
167 }
168
169 #[inline(always)]
171 pub fn try_alloc_slice_clone<T: Clone>(&$self, slice: &[T]) -> Result<BumpBox<$lifetime, [T]>, AllocError> {
172 BumpAllocatorTypedScope::try_alloc_slice_clone($access, slice)
173 }
174
175 #[inline(always)]
177 #[cfg(feature = "panic-on-alloc")]
178 pub fn alloc_slice_fill<T: Clone>(&$self, len: usize, value: T) -> BumpBox<$lifetime, [T]> {
179 BumpAllocatorTypedScope::alloc_slice_fill($access, len, value)
180 }
181
182 #[inline(always)]
184 pub fn try_alloc_slice_fill<T: Clone>(&$self, len: usize, value: T) -> Result<BumpBox<$lifetime, [T]>, AllocError> {
185 BumpAllocatorTypedScope::try_alloc_slice_fill($access, len, value)
186 }
187
188 #[inline(always)]
190 #[cfg(feature = "panic-on-alloc")]
191 pub fn alloc_slice_fill_with<T>(&$self, len: usize, f: impl FnMut() -> T) -> BumpBox<$lifetime, [T]> {
192 BumpAllocatorTypedScope::alloc_slice_fill_with($access, len, f)
193 }
194
195 #[inline(always)]
197 pub fn try_alloc_slice_fill_with<T>(&$self, len: usize, f: impl FnMut() -> T) -> Result<BumpBox<$lifetime, [T]>, AllocError> {
198 BumpAllocatorTypedScope::try_alloc_slice_fill_with($access, len, f)
199 }
200
201 #[inline(always)]
203 #[cfg(feature = "panic-on-alloc")]
204 pub fn alloc_str(&$self, src: &str) -> BumpBox<$lifetime, str> {
205 BumpAllocatorTypedScope::alloc_str($access, src)
206 }
207
208 #[inline(always)]
210 pub fn try_alloc_str(&$self, src: &str) -> Result<BumpBox<$lifetime, str>, AllocError> {
211 BumpAllocatorTypedScope::try_alloc_str($access, src)
212 }
213
214 #[inline(always)]
216 #[cfg(feature = "panic-on-alloc")]
217 pub fn alloc_fmt(&$self, args: fmt::Arguments) -> BumpBox<$lifetime, str> {
218 BumpAllocatorTypedScope::alloc_fmt($access, args)
219 }
220
221 #[inline(always)]
223 pub fn try_alloc_fmt(&$self, args: fmt::Arguments) -> Result<BumpBox<$lifetime, str>, AllocError> {
224 BumpAllocatorTypedScope::try_alloc_fmt($access, args)
225 }
226
227 #[inline(always)]
229 #[cfg(feature = "panic-on-alloc")]
230 pub fn alloc_fmt_mut(&mut $self, args: fmt::Arguments) -> BumpBox<$lifetime, str> {
231 MutBumpAllocatorTypedScope::alloc_fmt_mut($access_mut, args)
232 }
233
234 #[inline(always)]
236 pub fn try_alloc_fmt_mut(&mut $self, args: fmt::Arguments) -> Result<BumpBox<$lifetime, str>, AllocError> {
237 MutBumpAllocatorTypedScope::try_alloc_fmt_mut($access_mut, args)
238 }
239
240 #[inline(always)]
242 #[cfg(feature = "panic-on-alloc")]
243 pub fn alloc_cstr(&$self, src: &CStr) -> &$lifetime CStr {
244 BumpAllocatorTypedScope::alloc_cstr($access, src)
245 }
246
247 #[inline(always)]
249 pub fn try_alloc_cstr(&$self, src: &CStr) -> Result<&$lifetime CStr, AllocError> {
250 BumpAllocatorTypedScope::try_alloc_cstr($access, src)
251 }
252
253 #[inline(always)]
255 #[cfg(feature = "panic-on-alloc")]
256 pub fn alloc_cstr_from_str(&$self, src: &str) -> &$lifetime CStr {
257 BumpAllocatorTypedScope::alloc_cstr_from_str($access, src)
258 }
259
260 #[inline(always)]
262 pub fn try_alloc_cstr_from_str(&$self, src: &str) -> Result<&$lifetime CStr, AllocError> {
263 BumpAllocatorTypedScope::try_alloc_cstr_from_str($access, src)
264 }
265
266 #[inline(always)]
268 #[cfg(feature = "panic-on-alloc")]
269 pub fn alloc_cstr_fmt(&$self, args: fmt::Arguments) -> &$lifetime CStr {
270 BumpAllocatorTypedScope::alloc_cstr_fmt($access, args)
271 }
272
273 #[inline(always)]
275 pub fn try_alloc_cstr_fmt(&$self, args: fmt::Arguments) -> Result<&$lifetime CStr, AllocError> {
276 BumpAllocatorTypedScope::try_alloc_cstr_fmt($access, args)
277 }
278
279 #[inline(always)]
281 #[cfg(feature = "panic-on-alloc")]
282 pub fn alloc_cstr_fmt_mut(&mut $self, args: fmt::Arguments) -> &$lifetime CStr {
283 MutBumpAllocatorTypedScope::alloc_cstr_fmt_mut($access_mut, args)
284 }
285
286 #[inline(always)]
288 pub fn try_alloc_cstr_fmt_mut(&mut $self, args: fmt::Arguments) -> Result<&$lifetime CStr, AllocError> {
289 MutBumpAllocatorTypedScope::try_alloc_cstr_fmt_mut($access_mut, args)
290 }
291
292 #[inline(always)]
294 #[cfg(feature = "panic-on-alloc")]
295 pub fn alloc_iter<T>(&$self, iter: impl IntoIterator<Item = T>) -> BumpBox<$lifetime, [T]> {
296 BumpAllocatorTypedScope::alloc_iter($access, iter)
297 }
298
299 #[inline(always)]
301 pub fn try_alloc_iter<T>(&$self, iter: impl IntoIterator<Item = T>) -> Result<BumpBox<$lifetime, [T]>, AllocError> {
302 BumpAllocatorTypedScope::try_alloc_iter($access, iter)
303 }
304
305 #[inline(always)]
307 #[cfg(feature = "panic-on-alloc")]
308 pub fn alloc_iter_exact<T, I>(&$self, iter: impl IntoIterator<Item = T, IntoIter = I>) -> BumpBox<$lifetime, [T]>
309 where
310 I: ExactSizeIterator<Item = T>,
311 {
312 BumpAllocatorTypedScope::alloc_iter_exact($access, iter)
313 }
314
315 #[inline(always)]
317 pub fn try_alloc_iter_exact<T, I>(
318 &$self,
319 iter: impl IntoIterator<Item = T, IntoIter = I>,
320 ) -> Result<BumpBox<$lifetime, [T]>, AllocError>
321 where
322 I: ExactSizeIterator<Item = T>,
323 {
324 BumpAllocatorTypedScope::try_alloc_iter_exact($access, iter)
325 }
326
327 #[inline(always)]
329 #[cfg(feature = "panic-on-alloc")]
330 pub fn alloc_iter_mut<T>(&mut $self, iter: impl IntoIterator<Item = T>) -> BumpBox<$lifetime, [T]> {
331 MutBumpAllocatorTypedScope::alloc_iter_mut($access_mut, iter)
332 }
333
334 #[inline(always)]
336 pub fn try_alloc_iter_mut<T>(&mut $self, iter: impl IntoIterator<Item = T>) -> Result<BumpBox<$lifetime, [T]>, AllocError> {
337 MutBumpAllocatorTypedScope::try_alloc_iter_mut($access_mut, iter)
338 }
339
340 #[inline(always)]
342 #[cfg(feature = "panic-on-alloc")]
343 pub fn alloc_iter_mut_rev<T>(&mut $self, iter: impl IntoIterator<Item = T>) -> BumpBox<$lifetime, [T]> {
344 MutBumpAllocatorTypedScope::alloc_iter_mut_rev($access_mut, iter)
345 }
346
347 #[inline(always)]
349 pub fn try_alloc_iter_mut_rev<T>(&mut $self, iter: impl IntoIterator<Item = T>) -> Result<BumpBox<$lifetime, [T]>, AllocError> {
350 MutBumpAllocatorTypedScope::try_alloc_iter_mut_rev($access_mut, iter)
351 }
352
353 #[inline(always)]
355 #[cfg(feature = "panic-on-alloc")]
356 pub fn alloc_uninit<T>(&$self) -> BumpBox<$lifetime, MaybeUninit<T>> {
357 BumpAllocatorTypedScope::alloc_uninit($access)
358 }
359
360 #[inline(always)]
362 pub fn try_alloc_uninit<T>(&$self) -> Result<BumpBox<$lifetime, MaybeUninit<T>>, AllocError> {
363 BumpAllocatorTypedScope::try_alloc_uninit($access)
364 }
365
366 #[inline(always)]
368 #[cfg(feature = "panic-on-alloc")]
369 pub fn alloc_uninit_slice<T>(&$self, len: usize) -> BumpBox<$lifetime, [MaybeUninit<T>]> {
370 BumpAllocatorTypedScope::alloc_uninit_slice($access, len)
371 }
372
373 #[inline(always)]
375 pub fn try_alloc_uninit_slice<T>(&$self, len: usize) -> Result<BumpBox<$lifetime, [MaybeUninit<T>]>, AllocError> {
376 BumpAllocatorTypedScope::try_alloc_uninit_slice($access, len)
377 }
378
379 #[inline(always)]
381 #[cfg(feature = "panic-on-alloc")]
382 pub fn alloc_uninit_slice_for<T>(&$self, slice: &[T]) -> BumpBox<$lifetime, [MaybeUninit<T>]> {
383 BumpAllocatorTypedScope::alloc_uninit_slice_for($access, slice)
384 }
385
386 #[inline(always)]
388 pub fn try_alloc_uninit_slice_for<T>(&$self, slice: &[T]) -> Result<BumpBox<$lifetime, [MaybeUninit<T>]>, AllocError> {
389 BumpAllocatorTypedScope::try_alloc_uninit_slice_for($access, slice)
390 }
391
392 #[inline(always)]
394 pub fn dealloc<T: ?Sized>(&$self, boxed: BumpBox<T>) {
395 BumpAllocatorTyped::dealloc($access, boxed);
396 }
397
398 #[inline(always)]
400 #[cfg(feature = "panic-on-alloc")]
401 pub fn reserve(&$self, additional: usize) {
402 BumpAllocatorTyped::reserve($access, additional);
403 }
404
405 #[inline(always)]
407 pub fn try_reserve(&$self, additional: usize) -> Result<(), AllocError> {
408 BumpAllocatorTyped::try_reserve($access, additional)
409 }
410 };
411}
412
413pub(crate) use forward_methods;