Rollup merge of #81154 - dylni:improve-design-of-assert-len, r=KodrAus
Improve design of `assert_len` It was discussed in the [tracking issue](https://github.com/rust-lang/rust/issues/76393#issuecomment-761765448) that `assert_len`'s name and usage are confusing. This PR improves them based on a suggestion by ``@scottmcm`` in that issue. I also improved the documentation to make it clearer when you might want to use this method. Old example: ```rust let range = range.assert_len(slice.len()); ``` New example: ```rust let range = range.ensure_subset_of(..slice.len()); ``` Fixes #81157
This commit is contained in:
commit
72e6d51583
9 changed files with 117 additions and 113 deletions
|
@ -1651,7 +1651,7 @@ impl<T, A: Allocator> Vec<T, A> {
|
|||
// the hole, and the vector length is restored to the new length.
|
||||
//
|
||||
let len = self.len();
|
||||
let Range { start, end } = range.assert_len(len);
|
||||
let Range { start, end } = slice::range(range, ..len);
|
||||
|
||||
unsafe {
|
||||
// set self.vec length's to start, to be safe in case Drain is leaked
|
||||
|
@ -2037,11 +2037,11 @@ impl<T: Clone, A: Allocator> Vec<T, A> {
|
|||
where
|
||||
R: RangeBounds<usize>,
|
||||
{
|
||||
let range = src.assert_len(self.len());
|
||||
let range = slice::range(src, ..self.len());
|
||||
self.reserve(range.len());
|
||||
|
||||
// SAFETY:
|
||||
// - `assert_len` guarantees that the given range is valid for indexing self
|
||||
// - `slice::range` guarantees that the given range is valid for indexing self
|
||||
unsafe {
|
||||
self.spec_extend_from_within(range);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue