@@ -532,11 +532,21 @@ impl<H, T> HeaderVec<H, T> {
532
532
533
533
impl < H , T : Clone > HeaderVec < H , T > {
534
534
/// Adds items from a slice to the end of the list.
535
- ///
536
- /// Returns `Some(*const ())` if the memory was moved to a new location.
537
- /// In this case, you are responsible for updating the weak nodes.
538
- pub fn extend_from_slice ( & mut self , slice : & [ T ] ) -> Option < * const ( ) > {
539
- let previous_pointer = self . reserve ( slice. len ( ) ) ;
535
+ pub fn extend_from_slice ( & mut self , slice : & [ T ] ) {
536
+ self . extend_from_slice_intern ( slice, None )
537
+ }
538
+
539
+
540
+ /// Adds items from a slice to the end of the list.
541
+ /// This method must be used when `HeaderVecWeak` are used. It takes a closure that is responsible for
542
+ /// updating the weak references as additional parameter.
543
+ pub fn extend_from_slice_with_weakfix ( & mut self , slice : & [ T ] , weak_fixup : WeakFixupFn ) {
544
+ self . extend_from_slice_intern ( slice, Some ( weak_fixup) ) ;
545
+ }
546
+
547
+ #[ inline( always) ]
548
+ fn extend_from_slice_intern ( & mut self , slice : & [ T ] , weak_fixup : Option < WeakFixupFn > ) {
549
+ self . reserve_intern ( slice. len ( ) , false , weak_fixup) ;
540
550
541
551
// copy data
542
552
let end_ptr = self . end_ptr_mut ( ) ;
@@ -547,8 +557,6 @@ impl<H, T: Clone> HeaderVec<H, T> {
547
557
}
548
558
// correct the len
549
559
self . header_mut ( ) . len = ( self . len_exact ( ) + slice. len ( ) ) . into ( ) ;
550
-
551
- todo ! ( "weak_fixup transformartion" ) // previous_pointer
552
560
}
553
561
}
554
562
0 commit comments