@@ -48,7 +48,7 @@ impl<'a, S: BitStorage + 'a> BitSliceMut<'a, S> {
4848 self . capacity
4949 }
5050
51- pub fn split_at ( & self , index : usize ) -> ( BitSlice < S > , BitSlice < S > ) {
51+ pub fn split_at ( self , index : usize ) -> ( BitSlice < ' a , S > , BitSlice < ' a , S > ) {
5252 self . panic_index_not_on_storage_bound ( index) ;
5353 let data_index = S :: compute_data_index ( index) ;
5454 let ( capacity_left, capacity_right) = self . compute_capacities ( index) ;
@@ -61,7 +61,7 @@ impl<'a, S: BitStorage + 'a> BitSliceMut<'a, S> {
6161 }
6262 }
6363
64- pub fn split_at_mut ( & mut self , index : usize ) -> ( BitSliceMut < S > , BitSliceMut < S > ) {
64+ pub fn split_at_mut ( self , index : usize ) -> ( BitSliceMut < ' a , S > , BitSliceMut < ' a , S > ) {
6565 self . panic_index_not_on_storage_bound ( index) ;
6666 let data_index = S :: compute_data_index ( index) ;
6767 let ( capacity_left, capacity_right) = self . compute_capacities ( index) ;
@@ -74,6 +74,14 @@ impl<'a, S: BitStorage + 'a> BitSliceMut<'a, S> {
7474 }
7575 }
7676
77+ pub fn reborrow < ' b > ( & ' b self ) -> BitSliceMut < ' b , S > {
78+ BitSliceMut {
79+ pointer : self . pointer ,
80+ capacity : self . capacity ,
81+ phantom : self . phantom
82+ }
83+ }
84+
7785 pub fn iter ( & self ) -> Iter < S > {
7886 Iter {
7987 pointer : self . pointer ,
@@ -501,6 +509,7 @@ mod tests {
501509 slice. set ( 15 , true ) ;
502510
503511 {
512+ let slice = slice. reborrow ( ) ;
504513 let ( mut left, mut right) = slice. split_at_mut ( 8 ) ;
505514
506515 assert_eq ! ( left[ 0 ] , true ) ;
@@ -562,10 +571,42 @@ mod tests {
562571 #[ should_panic]
563572 fn test_split_at_mut_not_on_storage_bound ( ) {
564573 let mut vec_8_32: BitVector < u8 > = BitVector :: with_capacity ( 32 , false ) ;
565- let mut slice = create_bitslice_mut_u8_16_from_bitvector_u8_32 ( & mut vec_8_32) ;
574+ let slice = create_bitslice_mut_u8_16_from_bitvector_u8_32 ( & mut vec_8_32) ;
566575 slice. split_at_mut ( 4 ) ;
567576 }
568577
578+ #[ test]
579+ fn test_reborrow ( ) {
580+ let mut vec_8_32: BitVector < u8 > = BitVector :: with_capacity ( 32 , false ) ;
581+
582+ vec_8_32. set ( 1 , true ) ;
583+ vec_8_32. set ( 3 , true ) ;
584+ vec_8_32. set ( 5 , true ) ;
585+ vec_8_32. set ( 7 , true ) ;
586+ vec_8_32. set ( 11 , true ) ;
587+ vec_8_32. set ( 13 , true ) ;
588+
589+ let ( _, slice) = vec_8_32. split_at ( 0 ) ;
590+ let reborrow = slice. reborrow ( ) ;
591+
592+ assert_eq ! ( reborrow[ 0 ] , false ) ;
593+ assert_eq ! ( reborrow[ 1 ] , true ) ;
594+ assert_eq ! ( reborrow[ 2 ] , false ) ;
595+ assert_eq ! ( reborrow[ 3 ] , true ) ;
596+ assert_eq ! ( reborrow[ 4 ] , false ) ;
597+ assert_eq ! ( reborrow[ 5 ] , true ) ;
598+ assert_eq ! ( reborrow[ 6 ] , false ) ;
599+ assert_eq ! ( reborrow[ 7 ] , true ) ;
600+ assert_eq ! ( reborrow[ 8 ] , false ) ;
601+ assert_eq ! ( reborrow[ 9 ] , false ) ;
602+ assert_eq ! ( reborrow[ 10 ] , false ) ;
603+ assert_eq ! ( reborrow[ 11 ] , true ) ;
604+ assert_eq ! ( reborrow[ 12 ] , false ) ;
605+ assert_eq ! ( reborrow[ 13 ] , true ) ;
606+ assert_eq ! ( reborrow[ 14 ] , false ) ;
607+ assert_eq ! ( reborrow[ 15 ] , false ) ;
608+ }
609+
569610 #[ test]
570611 fn test_iter ( ) {
571612 let mut vec_8_4 = BitVector :: < u8 > :: with_capacity ( 4 , false ) ;
0 commit comments