Skip to content

Commit f352eec

Browse files
authored
Rollup merge of rust-lang#56401 - scottmcm:vecdeque-resize-with, r=dtolnay
Move VecDeque::resize_with out of the impl<T:Clone> block I put this in the wrong `impl` block in rust-lang#56016, so fixing. Tracking issue for the unstable method: rust-lang#41758 (comment)
2 parents aa92cc9 + 4c2c523 commit f352eec

File tree

1 file changed

+27
-33
lines changed

1 file changed

+27
-33
lines changed

src/liballoc/collections/vec_deque.rs

+27-33
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
use core::cmp::Ordering;
2121
use core::fmt;
22-
use core::iter::{repeat, repeat_with, FromIterator, FusedIterator};
22+
use core::iter::{repeat_with, FromIterator, FusedIterator};
2323
use core::mem;
2424
use core::ops::Bound::{Excluded, Included, Unbounded};
2525
use core::ops::{Index, IndexMut, RangeBounds};
@@ -1886,16 +1886,16 @@ impl<T> VecDeque<T> {
18861886
debug_assert!(!self.is_full());
18871887
}
18881888
}
1889-
}
18901889

1891-
impl<T: Clone> VecDeque<T> {
1892-
/// Modifies the `VecDeque` in-place so that `len()` is equal to new_len,
1893-
/// either by removing excess elements from the back or by appending clones of `value`
1894-
/// to the back.
1890+
/// Modifies the `VecDeque` in-place so that `len()` is equal to `new_len`,
1891+
/// either by removing excess elements from the back or by appending
1892+
/// elements generated by calling `generator` to the back.
18951893
///
18961894
/// # Examples
18971895
///
18981896
/// ```
1897+
/// #![feature(vec_resize_with)]
1898+
///
18991899
/// use std::collections::VecDeque;
19001900
///
19011901
/// let mut buf = VecDeque::new();
@@ -1904,32 +1904,36 @@ impl<T: Clone> VecDeque<T> {
19041904
/// buf.push_back(15);
19051905
/// assert_eq!(buf, [5, 10, 15]);
19061906
///
1907-
/// buf.resize(2, 0);
1907+
/// buf.resize_with(5, Default::default);
1908+
/// assert_eq!(buf, [5, 10, 15, 0, 0]);
1909+
///
1910+
/// buf.resize_with(2, || unreachable!());
19081911
/// assert_eq!(buf, [5, 10]);
19091912
///
1910-
/// buf.resize(5, 20);
1911-
/// assert_eq!(buf, [5, 10, 20, 20, 20]);
1913+
/// let mut state = 100;
1914+
/// buf.resize_with(5, || { state += 1; state });
1915+
/// assert_eq!(buf, [5, 10, 101, 102, 103]);
19121916
/// ```
1913-
#[stable(feature = "deque_extras", since = "1.16.0")]
1914-
pub fn resize(&mut self, new_len: usize, value: T) {
1917+
#[unstable(feature = "vec_resize_with", issue = "41758")]
1918+
pub fn resize_with(&mut self, new_len: usize, generator: impl FnMut()->T) {
19151919
let len = self.len();
19161920

19171921
if new_len > len {
1918-
self.extend(repeat(value).take(new_len - len))
1922+
self.extend(repeat_with(generator).take(new_len - len))
19191923
} else {
19201924
self.truncate(new_len);
19211925
}
19221926
}
1927+
}
19231928

1924-
/// Modifies the `VecDeque` in-place so that `len()` is equal to `new_len`,
1925-
/// either by removing excess elements from the back or by appending
1926-
/// elements generated by calling `generator` to the back.
1929+
impl<T: Clone> VecDeque<T> {
1930+
/// Modifies the `VecDeque` in-place so that `len()` is equal to new_len,
1931+
/// either by removing excess elements from the back or by appending clones of `value`
1932+
/// to the back.
19271933
///
19281934
/// # Examples
19291935
///
19301936
/// ```
1931-
/// #![feature(vec_resize_with)]
1932-
///
19331937
/// use std::collections::VecDeque;
19341938
///
19351939
/// let mut buf = VecDeque::new();
@@ -1938,25 +1942,15 @@ impl<T: Clone> VecDeque<T> {
19381942
/// buf.push_back(15);
19391943
/// assert_eq!(buf, [5, 10, 15]);
19401944
///
1941-
/// buf.resize_with(5, Default::default);
1942-
/// assert_eq!(buf, [5, 10, 15, 0, 0]);
1943-
///
1944-
/// buf.resize_with(2, || unreachable!());
1945+
/// buf.resize(2, 0);
19451946
/// assert_eq!(buf, [5, 10]);
19461947
///
1947-
/// let mut state = 100;
1948-
/// buf.resize_with(5, || { state += 1; state });
1949-
/// assert_eq!(buf, [5, 10, 101, 102, 103]);
1948+
/// buf.resize(5, 20);
1949+
/// assert_eq!(buf, [5, 10, 20, 20, 20]);
19501950
/// ```
1951-
#[unstable(feature = "vec_resize_with", issue = "41758")]
1952-
pub fn resize_with(&mut self, new_len: usize, generator: impl FnMut()->T) {
1953-
let len = self.len();
1954-
1955-
if new_len > len {
1956-
self.extend(repeat_with(generator).take(new_len - len))
1957-
} else {
1958-
self.truncate(new_len);
1959-
}
1951+
#[stable(feature = "deque_extras", since = "1.16.0")]
1952+
pub fn resize(&mut self, new_len: usize, value: T) {
1953+
self.resize_with(new_len, || value.clone());
19601954
}
19611955
}
19621956

0 commit comments

Comments
 (0)