44
44
//!
45
45
//! A number of traits add methods that allow you to accomplish tasks with slices.
46
46
//! These traits include `ImmutableSlice`, which is defined for `&[T]` types,
47
- //! `MutableSlice`, defined for `&mut [T]` types, and `Slice` and `SliceMut`
48
- //! which are defined for `[T]`.
47
+ //! and `MutableSlice`, defined for `&mut [T]` types.
49
48
//!
50
- //! An example is the `slice` method which enables slicing syntax `[a..b]` that
51
- //! returns an immutable "view" into a `Vec` or another slice from the index
52
- //! interval `[a, b)`:
49
+ //! An example is the method `.slice(a, b)` that returns an immutable "view" into
50
+ //! a `Vec` or another slice from the index interval `[a, b)`:
53
51
//!
54
52
//! ```rust
55
- //! #![feature(slicing_syntax)]
56
- //! fn main() {
57
- //! let numbers = [0i, 1i, 2i];
58
- //! let last_numbers = numbers[1..3];
59
- //! // last_numbers is now &[1i, 2i]
60
- //! }
53
+ //! let numbers = [0i, 1i, 2i];
54
+ //! let last_numbers = numbers.slice(1, 3);
55
+ //! // last_numbers is now &[1i, 2i]
61
56
//! ```
62
57
//!
63
58
//! ## Implementations of other traits
@@ -615,7 +610,7 @@ impl<'a,T> MutableSliceAllocating<'a, T> for &'a mut [T] {
615
610
616
611
#[ inline]
617
612
fn move_from ( self , mut src : Vec < T > , start : uint , end : uint ) -> uint {
618
- for ( a, b) in self . iter_mut ( ) . zip ( src[ mut start.. end] . iter_mut ( ) ) {
613
+ for ( a, b) in self . iter_mut ( ) . zip ( src. slice_mut ( start , end) . iter_mut ( ) ) {
619
614
mem:: swap ( a, b) ;
620
615
}
621
616
cmp:: min ( self . len ( ) , end-start)
@@ -707,7 +702,7 @@ impl<'a, T: Ord> MutableOrdSlice<T> for &'a mut [T] {
707
702
self . swap ( j, i-1 ) ;
708
703
709
704
// Step 4: Reverse the (previously) weakly decreasing part
710
- self [ mut i.. ] . reverse ( ) ;
705
+ self . slice_from_mut ( i ) . reverse ( ) ;
711
706
712
707
true
713
708
}
@@ -728,7 +723,7 @@ impl<'a, T: Ord> MutableOrdSlice<T> for &'a mut [T] {
728
723
}
729
724
730
725
// Step 2: Reverse the weakly increasing part
731
- self [ mut i.. ] . reverse ( ) ;
726
+ self . slice_from_mut ( i ) . reverse ( ) ;
732
727
733
728
// Step 3: Find the rightmost element equal to or bigger than the pivot (i-1)
734
729
let mut j = self . len ( ) - 1 ;
@@ -995,24 +990,24 @@ mod tests {
995
990
fn test_slice ( ) {
996
991
// Test fixed length vector.
997
992
let vec_fixed = [ 1 i, 2 , 3 , 4 ] ;
998
- let v_a = vec_fixed[ 1 u.. vec_fixed. len ( ) ] . to_vec ( ) ;
993
+ let v_a = vec_fixed. slice ( 1 u , vec_fixed. len ( ) ) . to_vec ( ) ;
999
994
assert_eq ! ( v_a. len( ) , 3 u) ;
1000
995
let v_a = v_a. as_slice ( ) ;
1001
996
assert_eq ! ( v_a[ 0 ] , 2 ) ;
1002
997
assert_eq ! ( v_a[ 1 ] , 3 ) ;
1003
998
assert_eq ! ( v_a[ 2 ] , 4 ) ;
1004
999
1005
1000
// Test on stack.
1006
- let vec_stack: & [ _ ] = & [ 1 i, 2 , 3 ] ;
1007
- let v_b = vec_stack[ 1 u.. 3 u ] . to_vec ( ) ;
1001
+ let vec_stack = & [ 1 i, 2 , 3 ] ;
1002
+ let v_b = vec_stack. slice ( 1 u , 3 u ) . to_vec ( ) ;
1008
1003
assert_eq ! ( v_b. len( ) , 2 u) ;
1009
1004
let v_b = v_b. as_slice ( ) ;
1010
1005
assert_eq ! ( v_b[ 0 ] , 2 ) ;
1011
1006
assert_eq ! ( v_b[ 1 ] , 3 ) ;
1012
1007
1013
1008
// Test `Box<[T]>`
1014
1009
let vec_unique = vec ! [ 1 i, 2 , 3 , 4 , 5 , 6 ] ;
1015
- let v_d = vec_unique[ 1 u.. 6 u ] . to_vec ( ) ;
1010
+ let v_d = vec_unique. slice ( 1 u , 6 u ) . to_vec ( ) ;
1016
1011
assert_eq ! ( v_d. len( ) , 5 u) ;
1017
1012
let v_d = v_d. as_slice ( ) ;
1018
1013
assert_eq ! ( v_d[ 0 ] , 2 ) ;
@@ -1025,21 +1020,21 @@ mod tests {
1025
1020
#[ test]
1026
1021
fn test_slice_from ( ) {
1027
1022
let vec: & [ int ] = & [ 1 , 2 , 3 , 4 ] ;
1028
- assert_eq ! ( vec[ 0 .. ] , vec) ;
1023
+ assert_eq ! ( vec. slice_from ( 0 ) , vec) ;
1029
1024
let b: & [ int ] = & [ 3 , 4 ] ;
1030
- assert_eq ! ( vec[ 2 .. ] , b) ;
1025
+ assert_eq ! ( vec. slice_from ( 2 ) , b) ;
1031
1026
let b: & [ int ] = & [ ] ;
1032
- assert_eq ! ( vec[ 4 .. ] , b) ;
1027
+ assert_eq ! ( vec. slice_from ( 4 ) , b) ;
1033
1028
}
1034
1029
1035
1030
#[ test]
1036
1031
fn test_slice_to ( ) {
1037
1032
let vec: & [ int ] = & [ 1 , 2 , 3 , 4 ] ;
1038
- assert_eq ! ( vec[ .. 4 ] , vec) ;
1033
+ assert_eq ! ( vec. slice_to ( 4 ) , vec) ;
1039
1034
let b: & [ int ] = & [ 1 , 2 ] ;
1040
- assert_eq ! ( vec[ .. 2 ] , b) ;
1035
+ assert_eq ! ( vec. slice_to ( 2 ) , b) ;
1041
1036
let b: & [ int ] = & [ ] ;
1042
- assert_eq ! ( vec[ .. 0 ] , b) ;
1037
+ assert_eq ! ( vec. slice_to ( 0 ) , b) ;
1043
1038
}
1044
1039
1045
1040
@@ -1980,7 +1975,7 @@ mod tests {
1980
1975
assert ! ( a == [ 7 i, 2 , 3 , 4 ] ) ;
1981
1976
let mut a = [ 1 i, 2 , 3 , 4 , 5 ] ;
1982
1977
let b = vec ! [ 5 i, 6 , 7 , 8 , 9 , 0 ] ;
1983
- assert_eq ! ( a[ mut 2 .. 4 ] . move_from( b, 1 , 6 ) , 2 ) ;
1978
+ assert_eq ! ( a. slice_mut ( 2 , 4 ) . move_from( b, 1 , 6 ) , 2 ) ;
1984
1979
assert ! ( a == [ 1 i, 2 , 6 , 7 , 5 ] ) ;
1985
1980
}
1986
1981
@@ -2000,7 +1995,7 @@ mod tests {
2000
1995
#[ test]
2001
1996
fn test_reverse_part ( ) {
2002
1997
let mut values = [ 1 i, 2 , 3 , 4 , 5 ] ;
2003
- values[ mut 1 .. 4 ] . reverse ( ) ;
1998
+ values. slice_mut ( 1 , 4 ) . reverse ( ) ;
2004
1999
assert ! ( values == [ 1 , 4 , 3 , 2 , 5 ] ) ;
2005
2000
}
2006
2001
@@ -2047,9 +2042,9 @@ mod tests {
2047
2042
fn test_bytes_set_memory ( ) {
2048
2043
use slice:: bytes:: MutableByteVector ;
2049
2044
let mut values = [ 1u8 , 2 , 3 , 4 , 5 ] ;
2050
- values[ mut 0 .. 5 ] . set_memory ( 0xAB ) ;
2045
+ values. slice_mut ( 0 , 5 ) . set_memory ( 0xAB ) ;
2051
2046
assert ! ( values == [ 0xAB , 0xAB , 0xAB , 0xAB , 0xAB ] ) ;
2052
- values[ mut 2 .. 4 ] . set_memory ( 0xFF ) ;
2047
+ values. slice_mut ( 2 , 4 ) . set_memory ( 0xFF ) ;
2053
2048
assert ! ( values == [ 0xAB , 0xAB , 0xFF , 0xFF , 0xAB ] ) ;
2054
2049
}
2055
2050
@@ -2075,18 +2070,12 @@ mod tests {
2075
2070
let mut values = [ 1u8 , 2 , 3 , 4 , 5 ] ;
2076
2071
{
2077
2072
let ( left, right) = values. split_at_mut ( 2 ) ;
2078
- {
2079
- let left: & [ _ ] = left;
2080
- assert ! ( left[ 0 ..left. len( ) ] == [ 1 , 2 ] ) ;
2081
- }
2073
+ assert ! ( left. slice( 0 , left. len( ) ) == [ 1 , 2 ] ) ;
2082
2074
for p in left. iter_mut ( ) {
2083
2075
* p += 1 ;
2084
2076
}
2085
2077
2086
- {
2087
- let right: & [ _ ] = right;
2088
- assert ! ( right[ 0 ..right. len( ) ] == [ 3 , 4 , 5 ] ) ;
2089
- }
2078
+ assert ! ( right. slice( 0 , right. len( ) ) == [ 3 , 4 , 5 ] ) ;
2090
2079
for p in right. iter_mut ( ) {
2091
2080
* p += 2 ;
2092
2081
}
@@ -2110,7 +2099,7 @@ mod tests {
2110
2099
}
2111
2100
assert_eq ! ( cnt, 3 ) ;
2112
2101
2113
- for f in v[ 1 .. 3 ] . iter ( ) {
2102
+ for f in v. slice ( 1 , 3 ) . iter ( ) {
2114
2103
assert ! ( * f == Foo ) ;
2115
2104
cnt += 1 ;
2116
2105
}
0 commit comments