@@ -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