parent
2f004d2d40
commit
ea570c689c
2 changed files with 9 additions and 3 deletions
|
@ -108,7 +108,7 @@ impl<T, A: Allocator> RawVec<T, A> {
|
||||||
// to round up a request of less than 8 bytes to at least 8 bytes.
|
// to round up a request of less than 8 bytes to at least 8 bytes.
|
||||||
// - 4 if elements are moderate-sized (<= 1 KiB).
|
// - 4 if elements are moderate-sized (<= 1 KiB).
|
||||||
// - 1 otherwise, to avoid wasting too much space for very short Vecs.
|
// - 1 otherwise, to avoid wasting too much space for very short Vecs.
|
||||||
const MIN_NON_ZERO_CAP: usize = if mem::size_of::<T>() == 1 {
|
pub(crate) const MIN_NON_ZERO_CAP: usize = if mem::size_of::<T>() == 1 {
|
||||||
8
|
8
|
||||||
} else if mem::size_of::<T>() <= 1024 {
|
} else if mem::size_of::<T>() <= 1024 {
|
||||||
4
|
4
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
|
use core::cmp;
|
||||||
use core::iter::TrustedLen;
|
use core::iter::TrustedLen;
|
||||||
use core::ptr::{self};
|
use core::ptr;
|
||||||
|
|
||||||
|
use crate::raw_vec::RawVec;
|
||||||
|
|
||||||
use super::{SpecExtend, Vec};
|
use super::{SpecExtend, Vec};
|
||||||
|
|
||||||
|
@ -24,8 +27,11 @@ where
|
||||||
None => return Vec::new(),
|
None => return Vec::new(),
|
||||||
Some(element) => {
|
Some(element) => {
|
||||||
let (lower, _) = iterator.size_hint();
|
let (lower, _) = iterator.size_hint();
|
||||||
let mut vector = Vec::with_capacity(lower.saturating_add(1));
|
let initial_capacity =
|
||||||
|
cmp::max(RawVec::<T>::MIN_NON_ZERO_CAP, lower.saturating_add(1));
|
||||||
|
let mut vector = Vec::with_capacity(initial_capacity);
|
||||||
unsafe {
|
unsafe {
|
||||||
|
// SAFETY: We requested capacity at least 1
|
||||||
ptr::write(vector.as_mut_ptr(), element);
|
ptr::write(vector.as_mut_ptr(), element);
|
||||||
vector.set_len(1);
|
vector.set_len(1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue