Skip to content

Commit ce2fd97

Browse files
authored
Rollup merge of rust-lang#50591 - glandium:cleanup, r=dtolnay
Restore RawVec::reserve* documentation When the RawVec::try_reserve* methods were added, they took the place of the ::reserve* methods in the source file, and new ::reserve* methods wrapping the new try_reserve* methods were created. But the documentation didn't move along, such that: - reserve_* methods are barely documented. - try_reserve_* methods have unmodified documentation from reserve_*, such that their documentation indicate they are panicking/aborting. This moves the documentation back to the right methods, with a placeholder documentation for the try_reserve* methods.
2 parents 677ed48 + 9c4e5b3 commit ce2fd97

File tree

1 file changed

+57
-56
lines changed

1 file changed

+57
-56
lines changed

src/liballoc/raw_vec.rs

+57-56
Original file line numberDiff line numberDiff line change
@@ -385,26 +385,7 @@ impl<T, A: Alloc> RawVec<T, A> {
385385
}
386386
}
387387

388-
/// Ensures that the buffer contains at least enough space to hold
389-
/// `used_cap + needed_extra_cap` elements. If it doesn't already,
390-
/// will reallocate the minimum possible amount of memory necessary.
391-
/// Generally this will be exactly the amount of memory necessary,
392-
/// but in principle the allocator is free to give back more than
393-
/// we asked for.
394-
///
395-
/// If `used_cap` exceeds `self.cap()`, this may fail to actually allocate
396-
/// the requested space. This is not really unsafe, but the unsafe
397-
/// code *you* write that relies on the behavior of this function may break.
398-
///
399-
/// # Panics
400-
///
401-
/// * Panics if the requested capacity exceeds `usize::MAX` bytes.
402-
/// * Panics on 32-bit platforms if the requested capacity exceeds
403-
/// `isize::MAX` bytes.
404-
///
405-
/// # Aborts
406-
///
407-
/// Aborts on OOM
388+
/// The same as `reserve_exact`, but returns on errors instead of panicking or aborting.
408389
pub fn try_reserve_exact(&mut self, used_cap: usize, needed_extra_cap: usize)
409390
-> Result<(), CollectionAllocErr> {
410391

@@ -441,6 +422,26 @@ impl<T, A: Alloc> RawVec<T, A> {
441422
}
442423
}
443424

425+
/// Ensures that the buffer contains at least enough space to hold
426+
/// `used_cap + needed_extra_cap` elements. If it doesn't already,
427+
/// will reallocate the minimum possible amount of memory necessary.
428+
/// Generally this will be exactly the amount of memory necessary,
429+
/// but in principle the allocator is free to give back more than
430+
/// we asked for.
431+
///
432+
/// If `used_cap` exceeds `self.cap()`, this may fail to actually allocate
433+
/// the requested space. This is not really unsafe, but the unsafe
434+
/// code *you* write that relies on the behavior of this function may break.
435+
///
436+
/// # Panics
437+
///
438+
/// * Panics if the requested capacity exceeds `usize::MAX` bytes.
439+
/// * Panics on 32-bit platforms if the requested capacity exceeds
440+
/// `isize::MAX` bytes.
441+
///
442+
/// # Aborts
443+
///
444+
/// Aborts on OOM
444445
pub fn reserve_exact(&mut self, used_cap: usize, needed_extra_cap: usize) {
445446
match self.try_reserve_exact(used_cap, needed_extra_cap) {
446447
Err(CapacityOverflow) => capacity_overflow(),
@@ -463,6 +464,42 @@ impl<T, A: Alloc> RawVec<T, A> {
463464
Ok(cmp::max(double_cap, required_cap))
464465
}
465466

467+
/// The same as `reserve`, but returns on errors instead of panicking or aborting.
468+
pub fn try_reserve(&mut self, used_cap: usize, needed_extra_cap: usize)
469+
-> Result<(), CollectionAllocErr> {
470+
unsafe {
471+
// NOTE: we don't early branch on ZSTs here because we want this
472+
// to actually catch "asking for more than usize::MAX" in that case.
473+
// If we make it past the first branch then we are guaranteed to
474+
// panic.
475+
476+
// Don't actually need any more capacity.
477+
// Wrapping in case they give a bad `used_cap`
478+
if self.cap().wrapping_sub(used_cap) >= needed_extra_cap {
479+
return Ok(());
480+
}
481+
482+
let new_cap = self.amortized_new_size(used_cap, needed_extra_cap)?;
483+
let new_layout = Layout::array::<T>(new_cap).map_err(|_| CapacityOverflow)?;
484+
485+
// FIXME: may crash and burn on over-reserve
486+
alloc_guard(new_layout.size())?;
487+
488+
let res = match self.current_layout() {
489+
Some(layout) => {
490+
debug_assert!(new_layout.align() == layout.align());
491+
self.a.realloc(NonNull::from(self.ptr).as_opaque(), layout, new_layout.size())
492+
}
493+
None => self.a.alloc(new_layout),
494+
};
495+
496+
self.ptr = res?.cast().into();
497+
self.cap = new_cap;
498+
499+
Ok(())
500+
}
501+
}
502+
466503
/// Ensures that the buffer contains at least enough space to hold
467504
/// `used_cap + needed_extra_cap` elements. If it doesn't already have
468505
/// enough capacity, will reallocate enough space plus comfortable slack
@@ -515,42 +552,6 @@ impl<T, A: Alloc> RawVec<T, A> {
515552
/// # vector.push_all(&[1, 3, 5, 7, 9]);
516553
/// # }
517554
/// ```
518-
pub fn try_reserve(&mut self, used_cap: usize, needed_extra_cap: usize)
519-
-> Result<(), CollectionAllocErr> {
520-
unsafe {
521-
// NOTE: we don't early branch on ZSTs here because we want this
522-
// to actually catch "asking for more than usize::MAX" in that case.
523-
// If we make it past the first branch then we are guaranteed to
524-
// panic.
525-
526-
// Don't actually need any more capacity.
527-
// Wrapping in case they give a bad `used_cap`
528-
if self.cap().wrapping_sub(used_cap) >= needed_extra_cap {
529-
return Ok(());
530-
}
531-
532-
let new_cap = self.amortized_new_size(used_cap, needed_extra_cap)?;
533-
let new_layout = Layout::array::<T>(new_cap).map_err(|_| CapacityOverflow)?;
534-
535-
// FIXME: may crash and burn on over-reserve
536-
alloc_guard(new_layout.size())?;
537-
538-
let res = match self.current_layout() {
539-
Some(layout) => {
540-
debug_assert!(new_layout.align() == layout.align());
541-
self.a.realloc(NonNull::from(self.ptr).as_opaque(), layout, new_layout.size())
542-
}
543-
None => self.a.alloc(new_layout),
544-
};
545-
546-
self.ptr = res?.cast().into();
547-
self.cap = new_cap;
548-
549-
Ok(())
550-
}
551-
}
552-
553-
/// The same as try_reserve, but errors are lowered to a call to oom().
554555
pub fn reserve(&mut self, used_cap: usize, needed_extra_cap: usize) {
555556
match self.try_reserve(used_cap, needed_extra_cap) {
556557
Err(CapacityOverflow) => capacity_overflow(),

0 commit comments

Comments
 (0)