@@ -19,6 +19,113 @@ impl<'a, T> IterMut<'a, T> {
19
19
pub ( super ) fn new ( i1 : slice:: IterMut < ' a , T > , i2 : slice:: IterMut < ' a , T > ) -> Self {
20
20
Self { i1, i2 }
21
21
}
22
+
23
+ /// Views the underlying data as a pair of subslices of the original data.
24
+ ///
25
+ /// The slices contain, in order, the contents of the deque not yet yielded
26
+ /// by the iterator.
27
+ ///
28
+ /// To avoid creating `&mut` references that alias, this is forced to
29
+ /// consume the iterator.
30
+ ///
31
+ /// # Examples
32
+ ///
33
+ /// ```
34
+ /// #![feature(vec_deque_iter_as_slices)]
35
+ ///
36
+ /// use std::collections::VecDeque;
37
+ ///
38
+ /// let mut deque = VecDeque::new();
39
+ /// deque.push_back(0);
40
+ /// deque.push_back(1);
41
+ /// deque.push_back(2);
42
+ /// deque.push_front(10);
43
+ /// deque.push_front(9);
44
+ /// deque.push_front(8);
45
+ ///
46
+ /// let mut iter = deque.iter_mut();
47
+ /// iter.next();
48
+ /// iter.next_back();
49
+ ///
50
+ /// let slices = iter.into_slices();
51
+ /// slices.0[0] = 42;
52
+ /// slices.1[0] = 24;
53
+ /// assert_eq!(deque.as_slices(), (&[8, 42, 10][..], &[24, 1, 2][..]));
54
+ /// ```
55
+ #[ unstable( feature = "vec_deque_iter_as_slices" , issue = "123947" ) ]
56
+ pub fn into_slices ( self ) -> ( & ' a mut [ T ] , & ' a mut [ T ] ) {
57
+ ( self . i1 . into_slice ( ) , self . i2 . into_slice ( ) )
58
+ }
59
+
60
+ /// Views the underlying data as a pair of subslices of the original data.
61
+ ///
62
+ /// The slices contain, in order, the contents of the deque not yet yielded
63
+ /// by the iterator.
64
+ ///
65
+ /// To avoid creating `&mut [T]` references that alias, the returned slices
66
+ /// borrow their lifetimes from the iterator the method is applied on.
67
+ ///
68
+ /// # Examples
69
+ ///
70
+ /// ```
71
+ /// #![feature(vec_deque_iter_as_slices)]
72
+ ///
73
+ /// use std::collections::VecDeque;
74
+ ///
75
+ /// let mut deque = VecDeque::new();
76
+ /// deque.push_back(0);
77
+ /// deque.push_back(1);
78
+ /// deque.push_back(2);
79
+ /// deque.push_front(10);
80
+ /// deque.push_front(9);
81
+ /// deque.push_front(8);
82
+ ///
83
+ /// let mut iter = deque.iter_mut();
84
+ /// iter.next();
85
+ /// iter.next_back();
86
+ ///
87
+ /// assert_eq!(iter.as_slices(), (&[9, 10][..], &[0, 1][..]));
88
+ /// ```
89
+ #[ unstable( feature = "vec_deque_iter_as_slices" , issue = "123947" ) ]
90
+ pub fn as_slices ( & self ) -> ( & [ T ] , & [ T ] ) {
91
+ ( self . i1 . as_slice ( ) , self . i2 . as_slice ( ) )
92
+ }
93
+
94
+ /// Views the underlying data as a pair of subslices of the original data.
95
+ ///
96
+ /// The slices contain, in order, the contents of the deque not yet yielded
97
+ /// by the iterator.
98
+ ///
99
+ /// To avoid creating `&mut [T]` references that alias, the returned slices
100
+ /// borrow their lifetimes from the iterator the method is applied on.
101
+ ///
102
+ /// # Examples
103
+ ///
104
+ /// ```
105
+ /// #![feature(vec_deque_iter_as_slices)]
106
+ ///
107
+ /// use std::collections::VecDeque;
108
+ ///
109
+ /// let mut deque = VecDeque::new();
110
+ /// deque.push_back(0);
111
+ /// deque.push_back(1);
112
+ /// deque.push_back(2);
113
+ /// deque.push_front(10);
114
+ /// deque.push_front(9);
115
+ /// deque.push_front(8);
116
+ ///
117
+ /// let mut iter = deque.iter_mut();
118
+ /// iter.next();
119
+ /// iter.next_back();
120
+ ///
121
+ /// iter.as_mut_slices().0[0] = 42;
122
+ /// iter.as_mut_slices().1[0] = 24;
123
+ /// assert_eq!(deque.as_slices(), (&[8, 42, 10][..], &[24, 1, 2][..]));
124
+ /// ```
125
+ #[ unstable( feature = "vec_deque_iter_as_slices" , issue = "123947" ) ]
126
+ pub fn as_mut_slices ( & mut self ) -> ( & mut [ T ] , & mut [ T ] ) {
127
+ ( self . i1 . as_mut_slice ( ) , self . i2 . as_mut_slice ( ) )
128
+ }
22
129
}
23
130
24
131
#[ stable( feature = "collection_debug" , since = "1.17.0" ) ]
0 commit comments