@@ -532,11 +532,20 @@ impl<H, T> HeaderVec<H, T> {
532532
533533impl < H , T : Clone > HeaderVec < H , T > {
534534 /// 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+ /// Adds items from a slice to the end of the list.
540+ /// This method must be used when `HeaderVecWeak` are used. It takes a closure that is responsible for
541+ /// updating the weak references as additional parameter.
542+ pub fn extend_from_slice_with_weakfix ( & mut self , slice : & [ T ] , weak_fixup : WeakFixupFn ) {
543+ self . extend_from_slice_intern ( slice, Some ( weak_fixup) ) ;
544+ }
545+
546+ #[ inline( always) ]
547+ fn extend_from_slice_intern ( & mut self , slice : & [ T ] , weak_fixup : Option < WeakFixupFn > ) {
548+ self . reserve_intern ( slice. len ( ) , false , weak_fixup) ;
540549
541550 // copy data
542551 let end_ptr = self . end_ptr_mut ( ) ;
@@ -547,8 +556,6 @@ impl<H, T: Clone> HeaderVec<H, T> {
547556 }
548557 // correct the len
549558 self . header_mut ( ) . len = ( self . len_exact ( ) + slice. len ( ) ) . into ( ) ;
550-
551- todo ! ( "weak_fixup transformartion" ) // previous_pointer
552559 }
553560}
554561
0 commit comments