Mara Bos
829019d404
Disable AsRef implementations for String's Drain.
...
Since trait implementations cannot be unstable, we should only add them
when the as_str feature gets stabilized. Until then, only `.as_str()` is
available (behind a feature gate).
2020-09-09 19:57:57 +02:00
carbotaniuman
493c037699
Eliminate mut reference UB in Drop impl for Rc<T>
...
This changes `self.ptr.as_mut()` with `get_mut_unchecked` which
does not use an intermediate reference. Arc<T> already handled this
case properly.
2020-09-09 12:14:18 -05:00
Mara Bos
f2a32909e0
Mark AsRef impls for String's Drain as stable.
...
Trait implementations effectively can't be #[unstable].
2020-09-09 19:10:06 +02:00
Mara Bos
4506d26cf3
Remove internal and unstable MaybeUninit::UNINIT.
...
Looks like it is no longer necessary, as uninit_array() can be used
instead in the few cases where it was needed.
2020-09-09 18:38:10 +02:00
Mara Bos
f5bb523e94
Add AsRef<[u8]> for String's Drain.
2020-09-09 18:07:27 +02:00
Mara Bos
673284058b
Show remaining data in string::Drain's Debug impl.
2020-09-09 17:50:55 +02:00
Mara Bos
daa62d9081
Add as_str() and AsRef to string::Drain.
2020-09-09 17:50:55 +02:00
Stein Somers
8158d5623e
BTreeMap: avoid aliasing by avoiding slices
2020-09-09 08:58:02 -04:00
Ralf Jung
7889373730
make as_leaf return a raw pointer, to reduce aliasing assumptions
2020-09-09 08:38:34 -04:00
Flying-Toast
2799aec6ab
Capitalize safety comments
2020-09-08 22:37:18 -04:00
Braden Nelson
e02952c0cc
Update library/alloc/src/collections/vec_deque.rs
...
Replace lshift with multiply
Co-authored-by: Mara Bos <m-ou.se@m-ou.se>
2020-09-08 13:11:08 -05:00
moonheart08
c3c84ad027
Convert MAXIMUM_ZST_CAPACITY to be calculated in a
...
const instead of multiple target_pointer_width checks.
2020-09-08 10:35:35 -05:00
scottmcm
3d89ee9586
Typo fix
...
Thanks, Amanieu
Co-authored-by: Amanieu d'Antras <amanieu@gmail.com>
2020-09-07 02:30:42 +00:00
Dylan DPC
5b8f76d564
Rollup merge of #76303 - jyn514:vec-assert-doc, r=Dylan-DPC
...
Link to `#capacity-and-reallocation` when using with_capacity
Follow up to https://github.com/rust-lang/rust/pull/76058#discussion_r479655750 .
r? @pickfire
2020-09-07 01:17:56 +02:00
bors
cdc8f0606d
Auto merge of #76217 - RalfJung:maybe-uninit-slice, r=KodrAus
...
rename MaybeUninit slice methods
The `first` methods conceptually point to the whole slice, not just its first element, so rename them to be consistent with the raw ptr methods on ref-slices.
Also, do the equivalent of https://github.com/rust-lang/rust/pull/76047 for the slice reference getters, and make them part of https://github.com/rust-lang/rust/issues/63569 (so far they somehow had no tracking issue).
* first_ptr -> slice_as_ptr
* first_ptr_mut -> slice_as_mut_ptr
* slice_get_ref -> slice_assume_init_ref
* slice_get_mut -> slice_assume_init_mut
2020-09-05 21:02:18 +00:00
scottmcm
2c8a4c8f73
Nightly is currently 1.48
2020-09-05 19:02:21 +00:00
Ralf Jung
cff5f56886
rename MaybeUninit slice methods
...
first_ptr -> slice_as_ptr
first_ptr_mut -> slice_as_mut_ptr
slice_get_ref -> slice_assume_init_ref
slice_get_mut -> slice_assume_init_mut
2020-09-05 17:24:22 +02:00
Dylan DPC
86cf7976e2
Rollup merge of #76060 - pickfire:patch-12, r=jyn514
...
Link vec doc to & reference
It is not always obvious that people could see the docs for `&`
especially for beginners, it also helps learnability.
2020-09-05 16:28:24 +02:00
Dylan DPC
4bd3f266b0
Rollup merge of #75994 - mental32:impl-rc-new-cyclic, r=KodrAus
...
`impl Rc::new_cyclic`
References #75861
r? @Dylan-DPC
2020-09-05 16:28:22 +02:00
Josh Stone
864a28e01d
Re-export ArrayChunksMut in alloc
2020-09-04 19:51:29 -07:00
bors
70c5f6efc4
Auto merge of #75200 - ssomers:btree_valmut, r=Mark-Simulacrum
...
BTreeMap: introduce marker::ValMut and reserve Mut for unique access
The mutable BTreeMap iterators (apart from `DrainFilter`) are double-ended, meaning they have to rely on a front and a back handle that each represent a reference into the tree. Reserve a type category `marker::ValMut` for them, so that we guarantee that they cannot reach operations on handles with borrow type `marker::Mut`and that these operations can assume unique access to the tree.
Including #75195 , benchmarks report no genuine change:
```
benchcmp old new --threshold 5
name old ns/iter new ns/iter diff ns/iter diff % speedup
btree::map::iter_100 3,333 3,023 -310 -9.30% x 1.10
btree::map::range_unbounded_vs_iter 36,624 31,569 -5,055 -13.80% x 1.16
```
r? @Mark-Simulacrum
2020-09-04 23:16:23 +00:00
bors
ef55a0a92f
Auto merge of #75207 - dylni:add-slice-check-range, r=KodrAus
...
Add `slice::check_range`
This method is useful for [`RangeBounds`] parameters. It's even been [rewritten](22ee68dc58/src/librustc_data_structures/sorted_map.rs (L214)
) [many](22ee68dc58/library/alloc/src/vec.rs (L1299)
) [times](22ee68dc58/library/core/src/slice/mod.rs (L2441)
) in the standard library, sometimes assuming that the bounds won't be [`usize::MAX`].
For example, [`Vec::drain`] creates an empty iterator when [`usize::MAX`] is used as an inclusive end bound:
```rust
assert!(vec![1].drain(..=usize::max_value()).eq(iter::empty()));
```
If this PR is merged, I'll create another to use it for those methods.
[`RangeBounds`]: https://doc.rust-lang.org/std/ops/trait.RangeBounds.html
[`usize::MAX`]: https://doc.rust-lang.org/std/primitive.usize.html#associatedconstant.MAX
[`Vec::drain`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.drain
2020-09-04 12:21:43 +00:00
Scott McMurray
6092828d1f
Add [T; N]: TryFrom<Vec<T>>
...
This is very similar to the existing `Box<[T; N]>: TryFrom<Box<[T]>>`, but allows avoiding the `shrink_to_fit` if you have a vector and not a boxed slice.
2020-09-03 21:13:56 -07:00
Ivan Tham
85146b9db7
Add slice primitive link to vec
2020-09-04 09:50:50 +08:00
Joshua Nelson
7b823df489
Link to #capacity-and-reallocation
when using with_capacity
2020-09-03 18:08:25 -04:00
The8472
2f23a0fcca
fix debug assertion
...
The InPlaceIterable debug assert checks that the write pointer
did not advance beyond the read pointer. But TrustedRandomAccess
never advances the read pointer, thus triggering the assert.
Skip the assert if the source pointer did not change during iteration.
2020-09-03 22:15:47 +02:00
The8472
8e5fe5569b
improve comments and naming
2020-09-03 20:59:37 +02:00
The8472
6464586542
add explanation to specialization marker
2020-09-03 20:59:36 +02:00
The8472
acdd441cc3
remove separate no-drop code path since it resulted in more LLVM IR
2020-09-03 20:59:36 +02:00
The8472
435219dd82
remove empty Vec extend optimization
...
The optimization meant that every extend code path had to emit llvm
IR for from_iter and extend spec_extend, which likely impacts
compile times while only improving a few edge-cases
2020-09-03 20:59:35 +02:00
The8472
9aeea00222
get things to work under min_specialization by leaning more heavily on #[rustc_unsafe_specialization_marker]
2020-09-03 20:59:34 +02:00
The8472
bec9f9223c
apply required min_specialization attributes
2020-09-03 20:59:32 +02:00
The8472
5530858a08
generalize in-place collect to types of same size and alignment
2020-09-03 20:59:31 +02:00
The8472
fa34b39cd6
increase comment verbosity
2020-09-03 20:59:30 +02:00
The8472
872ab780c0
work around compiler overhead around lambdas in generics by extracting them into free functions
2020-09-03 20:59:29 +02:00
The8472
771b8ecc83
extract IntoIter drop/forget used by specialization into separate methods
2020-09-03 20:59:29 +02:00
The8472
a7a8b52e91
remove redundant cast
2020-09-03 20:59:28 +02:00
The8472
fe350dd82d
move unsafety into method, not relevant to caller
2020-09-03 20:59:27 +02:00
The8472
0d2d033415
replace unsafe ptr::write with deref-write, benchmarks show no difference
2020-09-03 20:59:26 +02:00
The8472
9596e5a2f2
pacify tidy
2020-09-03 20:59:26 +02:00
The8472
6ed05fd995
replace drop flag with ManuallyDrop
2020-09-03 20:59:25 +02:00
The8472
ab382b7661
mark as_inner as unsafe and update comments
2020-09-03 20:59:24 +02:00
The8472
2a51e579f5
avoid exposing that binary heap's IntoIter is backed by vec::IntoIter, use a private trait instead
2020-09-03 20:59:24 +02:00
The8472
0856771248
fix build issue due to stabilized feature
2020-09-03 20:59:23 +02:00
The8472
e85cfa4f22
impl TrustedRandomAccess for vec::IntoIter
2020-09-03 20:59:22 +02:00
The8472
fbb3371e5b
remove unecessary feature flag
...
# Conflicts:
# library/alloc/src/lib.rs
2020-09-03 20:59:21 +02:00
The8472
085eb20a61
move free-standing method into trait impl
2020-09-03 20:59:19 +02:00
The8472
00a32eb54f
fix some in-place-collect edge-cases
...
- it's an allocation optimization, so don't attempt to do it on ZSTs
- drop the tail of partially exhausted iters
2020-09-03 20:59:17 +02:00
The8472
8c816b96dd
remove redundant code
2020-09-03 20:59:16 +02:00
The8472
cc67c8eb91
improve comments
2020-09-03 20:59:16 +02:00