parent
f27a22c24a
commit
78fb977d6b
12 changed files with 155 additions and 4 deletions
|
@ -559,6 +559,30 @@ impl<T> VecDeque<T> {
|
|||
pub fn with_capacity(capacity: usize) -> VecDeque<T> {
|
||||
Self::with_capacity_in(capacity, Global)
|
||||
}
|
||||
|
||||
/// Creates an empty deque with space for at least `capacity` elements.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// Returns an error if the capacity exceeds `isize::MAX` _bytes_,
|
||||
/// or if the allocator reports allocation failure.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// # #![feature(try_with_capacity)]
|
||||
/// # #[allow(unused)]
|
||||
/// # fn example() -> Result<(), std::collections::TryReserveError> {
|
||||
/// use std::collections::VecDeque;
|
||||
///
|
||||
/// let deque: VecDeque<u32> = VecDeque::try_with_capacity(10)?;
|
||||
/// # Ok(()) }
|
||||
/// ```
|
||||
#[inline]
|
||||
#[unstable(feature = "try_with_capacity", issue = "91913")]
|
||||
pub fn try_with_capacity(capacity: usize) -> Result<VecDeque<T>, TryReserveError> {
|
||||
Ok(VecDeque { head: 0, len: 0, buf: RawVec::try_with_capacity_in(capacity, Global)? })
|
||||
}
|
||||
}
|
||||
|
||||
impl<T, A: Allocator> VecDeque<T, A> {
|
||||
|
|
|
@ -163,6 +163,7 @@
|
|||
#![feature(trusted_len)]
|
||||
#![feature(trusted_random_access)]
|
||||
#![feature(try_trait_v2)]
|
||||
#![feature(try_with_capacity)]
|
||||
#![feature(tuple_trait)]
|
||||
#![feature(unchecked_math)]
|
||||
#![feature(unicode_internals)]
|
||||
|
|
|
@ -20,6 +20,7 @@ mod tests;
|
|||
enum AllocInit {
|
||||
/// The contents of the new memory are uninitialized.
|
||||
Uninitialized,
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
/// The new memory is guaranteed to be zeroed.
|
||||
Zeroed,
|
||||
}
|
||||
|
@ -146,6 +147,13 @@ impl<T, A: Allocator> RawVec<T, A> {
|
|||
handle_reserve(Self::try_allocate_in(capacity, AllocInit::Uninitialized, alloc))
|
||||
}
|
||||
|
||||
/// Like `try_with_capacity`, but parameterized over the choice of
|
||||
/// allocator for the returned `RawVec`.
|
||||
#[inline]
|
||||
pub fn try_with_capacity_in(capacity: usize, alloc: A) -> Result<Self, TryReserveError> {
|
||||
Self::try_allocate_in(capacity, AllocInit::Uninitialized, alloc)
|
||||
}
|
||||
|
||||
/// Like `with_capacity_zeroed`, but parameterized over the choice
|
||||
/// of allocator for the returned `RawVec`.
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
|
@ -203,6 +211,7 @@ impl<T, A: Allocator> RawVec<T, A> {
|
|||
|
||||
let result = match init {
|
||||
AllocInit::Uninitialized => alloc.allocate(layout),
|
||||
#[cfg(not(no_global_oom_handling))]
|
||||
AllocInit::Zeroed => alloc.allocate_zeroed(layout),
|
||||
};
|
||||
let ptr = match result {
|
||||
|
|
|
@ -492,6 +492,19 @@ impl String {
|
|||
String { vec: Vec::with_capacity(capacity) }
|
||||
}
|
||||
|
||||
/// Creates a new empty `String` with at least the specified capacity.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// Returns [`Err`] if the capacity exceeds `isize::MAX` bytes,
|
||||
/// or if the memory allocator reports failure.
|
||||
///
|
||||
#[inline]
|
||||
#[unstable(feature = "try_with_capacity", issue = "91913")]
|
||||
pub fn try_with_capacity(capacity: usize) -> Result<String, TryReserveError> {
|
||||
Ok(String { vec: Vec::try_with_capacity(capacity)? })
|
||||
}
|
||||
|
||||
// HACK(japaric): with cfg(test) the inherent `[T]::to_vec` method, which is
|
||||
// required for this method definition, is not available. Since we don't
|
||||
// require this method for testing purposes, I'll just stub it
|
||||
|
|
|
@ -481,6 +481,22 @@ impl<T> Vec<T> {
|
|||
Self::with_capacity_in(capacity, Global)
|
||||
}
|
||||
|
||||
/// Constructs a new, empty `Vec<T>` with at least the specified capacity.
|
||||
///
|
||||
/// The vector will be able to hold at least `capacity` elements without
|
||||
/// reallocating. This method is allowed to allocate for more elements than
|
||||
/// `capacity`. If `capacity` is 0, the vector will not allocate.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// Returns an error if the capacity exceeds `isize::MAX` _bytes_,
|
||||
/// or if the allocator reports allocation failure.
|
||||
#[inline]
|
||||
#[unstable(feature = "try_with_capacity", issue = "91913")]
|
||||
pub fn try_with_capacity(capacity: usize) -> Result<Self, TryReserveError> {
|
||||
Self::try_with_capacity_in(capacity, Global)
|
||||
}
|
||||
|
||||
/// Creates a `Vec<T>` directly from a pointer, a length, and a capacity.
|
||||
///
|
||||
/// # Safety
|
||||
|
@ -672,6 +688,24 @@ impl<T, A: Allocator> Vec<T, A> {
|
|||
Vec { buf: RawVec::with_capacity_in(capacity, alloc), len: 0 }
|
||||
}
|
||||
|
||||
/// Constructs a new, empty `Vec<T, A>` with at least the specified capacity
|
||||
/// with the provided allocator.
|
||||
///
|
||||
/// The vector will be able to hold at least `capacity` elements without
|
||||
/// reallocating. This method is allowed to allocate for more elements than
|
||||
/// `capacity`. If `capacity` is 0, the vector will not allocate.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// Returns an error if the capacity exceeds `isize::MAX` _bytes_,
|
||||
/// or if the allocator reports allocation failure.
|
||||
#[inline]
|
||||
#[unstable(feature = "allocator_api", issue = "32838")]
|
||||
// #[unstable(feature = "try_with_capacity", issue = "91913")]
|
||||
pub fn try_with_capacity_in(capacity: usize, alloc: A) -> Result<Self, TryReserveError> {
|
||||
Ok(Vec { buf: RawVec::try_with_capacity_in(capacity, alloc)?, len: 0 })
|
||||
}
|
||||
|
||||
/// Creates a `Vec<T, A>` directly from a pointer, a length, a capacity,
|
||||
/// and an allocator.
|
||||
///
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue