Skip to content

Commit 76163d6

Browse files
committed
pass the WeakFixupFn by &mut internally
This should make no difference, but the upcoming Slice needs to use it twice so we can't pass by value.
1 parent 1d9062b commit 76163d6

1 file changed

Lines changed: 21 additions & 16 deletions

File tree

src/lib.rs

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -246,34 +246,39 @@ impl<H, T> HeaderVec<H, T> {
246246
/// Reserves capacity for at least `additional` more elements to be inserted in the given `HeaderVec`.
247247
#[inline]
248248
pub fn reserve(&mut self, additional: usize) {
249-
self.reserve_intern(additional, false, None);
249+
self.reserve_intern(additional, false, &mut None);
250250
}
251251

252252
/// Reserves capacity for at least `additional` more elements to be inserted in the given `HeaderVec`.
253253
/// This method must be used when `HeaderVecWeak` are used. It takes a closure that is responsible for
254254
/// updating the weak references as additional parameter.
255255
#[inline]
256256
pub fn reserve_with_weakfix(&mut self, additional: usize, weak_fixup: WeakFixupFn) {
257-
self.reserve_intern(additional, false, Some(weak_fixup));
257+
self.reserve_intern(additional, false, &mut Some(weak_fixup));
258258
}
259259

260260
/// Reserves capacity for exactly `additional` more elements to be inserted in the given `HeaderVec`.
261261
#[inline]
262262
pub fn reserve_exact(&mut self, additional: usize) {
263-
self.reserve_intern(additional, true, None);
263+
self.reserve_intern(additional, true, &mut None);
264264
}
265265

266266
/// Reserves capacity for exactly `additional` more elements to be inserted in the given `HeaderVec`.
267267
/// This method must be used when `HeaderVecWeak` are used. It takes a closure that is responsible for
268268
/// updating the weak references as additional parameter.
269269
#[inline]
270270
pub fn reserve_exact_with_weakfix(&mut self, additional: usize, weak_fixup: WeakFixupFn) {
271-
self.reserve_intern(additional, true, Some(weak_fixup));
271+
self.reserve_intern(additional, true, &mut Some(weak_fixup));
272272
}
273273

274274
/// Reserves capacity for at least `additional` more elements to be inserted in the given `HeaderVec`.
275275
#[inline(always)]
276-
fn reserve_intern(&mut self, additional: usize, exact: bool, weak_fixup: Option<WeakFixupFn>) {
276+
pub(crate) fn reserve_intern(
277+
&mut self,
278+
additional: usize,
279+
exact: bool,
280+
weak_fixup: &mut Option<WeakFixupFn>,
281+
) {
277282
if self.spare_capacity() < additional {
278283
let len = self.len_exact();
279284
// using saturating_add here ensures that we get a allocation error instead wrapping over and
@@ -286,7 +291,7 @@ impl<H, T> HeaderVec<H, T> {
286291
#[inline]
287292
pub fn shrink_to(&mut self, min_capacity: usize) {
288293
let requested_capacity = self.len_exact().max(min_capacity);
289-
unsafe { self.resize_cold(requested_capacity, true, None) };
294+
unsafe { self.resize_cold(requested_capacity, true, &mut None) };
290295
}
291296

292297
/// Shrinks the capacity of the `HeaderVec` to the `min_capacity` or `self.len()`, whichever is larger.
@@ -295,7 +300,7 @@ impl<H, T> HeaderVec<H, T> {
295300
#[inline]
296301
pub fn shrink_to_with_weakfix(&mut self, min_capacity: usize, weak_fixup: WeakFixupFn) {
297302
let requested_capacity = self.len_exact().max(min_capacity);
298-
unsafe { self.resize_cold(requested_capacity, true, Some(weak_fixup)) };
303+
unsafe { self.resize_cold(requested_capacity, true, &mut Some(weak_fixup)) };
299304
}
300305

301306
/// Resizes the vector hold exactly `self.len()` elements.
@@ -325,7 +330,7 @@ impl<H, T> HeaderVec<H, T> {
325330
&mut self,
326331
requested_capacity: usize,
327332
exact: bool,
328-
weak_fixup: Option<WeakFixupFn>,
333+
weak_fixup: &mut Option<WeakFixupFn>,
329334
) {
330335
// For efficiency we do only a debug_assert here, this is a internal unsafe function
331336
// it's contract should be already enforced by the caller which is under our control
@@ -392,23 +397,23 @@ impl<H, T> HeaderVec<H, T> {
392397
self.header_mut().capacity = new_capacity;
393398

394399
// Finally run the weak_fixup closure when provided
395-
previous_pointer.map(|ptr| weak_fixup.map(|weak_fixup| weak_fixup(ptr)));
400+
previous_pointer.map(|ptr| weak_fixup.as_mut().map(|weak_fixup| weak_fixup(ptr)));
396401
}
397402

398403
/// Adds an item to the end of the list.
399404
pub fn push(&mut self, item: T) {
400-
self.push_intern(item, None);
405+
self.push_intern(item, &mut None);
401406
}
402407

403408
/// Adds an item to the end of the list.
404409
/// This method must be used when `HeaderVecWeak` are used. It takes a closure that is responsible for
405410
/// updating the weak references as additional parameter.
406411
pub fn push_with_weakfix(&mut self, item: T, weak_fixup: WeakFixupFn) {
407-
self.push_intern(item, Some(weak_fixup));
412+
self.push_intern(item, &mut Some(weak_fixup));
408413
}
409414

410415
#[inline(always)]
411-
fn push_intern(&mut self, item: T, weak_fixup: Option<WeakFixupFn>) {
416+
fn push_intern(&mut self, item: T, weak_fixup: &mut Option<WeakFixupFn>) {
412417
let old_len = self.len_exact();
413418
let new_len = old_len + 1;
414419
self.reserve_intern(1, false, weak_fixup);
@@ -644,13 +649,13 @@ impl<H, T: Clone> HeaderVec<H, T> {
644649
pub fn from_header_slice(header: H, slice: impl AsRef<[T]>) -> Self {
645650
let slice = slice.as_ref();
646651
let mut hv = Self::with_capacity(slice.len(), header);
647-
hv.extend_from_slice_intern(slice, None);
652+
hv.extend_from_slice_intern(slice, &mut None);
648653
hv
649654
}
650655

651656
/// Adds items from a slice to the end of the list.
652657
pub fn extend_from_slice(&mut self, slice: impl AsRef<[T]>) {
653-
self.extend_from_slice_intern(slice.as_ref(), None)
658+
self.extend_from_slice_intern(slice.as_ref(), &mut None)
654659
}
655660

656661
/// Adds items from a slice to the end of the list.
@@ -661,11 +666,11 @@ impl<H, T: Clone> HeaderVec<H, T> {
661666
slice: impl AsRef<[T]>,
662667
weak_fixup: WeakFixupFn,
663668
) {
664-
self.extend_from_slice_intern(slice.as_ref(), Some(weak_fixup));
669+
self.extend_from_slice_intern(slice.as_ref(), &mut Some(weak_fixup));
665670
}
666671

667672
#[inline(always)]
668-
fn extend_from_slice_intern(&mut self, slice: &[T], weak_fixup: Option<WeakFixupFn>) {
673+
fn extend_from_slice_intern(&mut self, slice: &[T], weak_fixup: &mut Option<WeakFixupFn>) {
669674
self.reserve_intern(slice.len(), false, weak_fixup);
670675

671676
// copy data

0 commit comments

Comments
 (0)