@@ -19,6 +19,113 @@ impl<'a, T> IterMut<'a, T> {
1919 pub ( super ) fn new ( i1 : slice:: IterMut < ' a , T > , i2 : slice:: IterMut < ' a , T > ) -> Self {
2020 Self { i1, i2 }
2121 }
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+ }
22129}
23130
24131#[ stable( feature = "collection_debug" , since = "1.17.0" ) ]
0 commit comments