about summary refs log tree commit diff
path: root/library/alloc/src
AgeCommit message (Collapse)AuthorLines
2020-09-12Auto merge of #75021 - cuviper:array_chunks_mut, r=scottmcmbors-0/+2
Add `slice::array_chunks_mut` This follows `array_chunks` from #74373 with a mutable version, `array_chunks_mut`. The implementation is identical apart from mutability. The new tests are adaptations of the `chunks_exact_mut` tests, plus an inference test like the one for `array_chunks`. I reused the unstable feature `array_chunks` and tracking issue #74985, but I can separate that if desired. r? `@withoutboats` cc `@lcnr`
2020-09-11Auto merge of #73951 - pickfire:liballoc-intoiter, r=Mark-Simulacrumbors-33/+25
Liballoc intoiter refactor
2020-09-11Address review commentscarbotaniuman-8/+14
2020-09-11Allow unstable From impl for [Raw]Waker.Mara Bos-0/+2
2020-09-10Auto merge of #74437 - ssomers:btree_no_root_in_noderef, r=Mark-Simulacrumbors-117/+163
BTreeMap: move up reference to map's root from NodeRef Since the introduction of `NodeRef` years ago, it also contained a mutable reference to the owner of the root node of the tree (somewhat disguised as *const). Its intent is to be used only when the rest of the `NodeRef` is no longer needed. Moving this to where it's actually used, thought me 2 things: - Some sort of "postponed mutable reference" is required in most places that it is/was used, and that's exactly where we also need to store a reference to the length (number of elements) of the tree, for the same reason. The length reference can be a normal reference, because the tree code does not care about tree length (just length per node). - It's downright obfuscation in `from_sorted_iter` (transplanted to #75329) - It's one of the reasons for the scary notice on `reborrow_mut`, the other one being addressed in #73971. This does repeat the raw pointer code in a few places, but it could be bundled up with the length reference. r? `@Mark-Simulacrum`
2020-09-09Rollup merge of #76543 - ssomers:btree_cleanup_4, r=Mark-SimulacrumTyler Mandry-0/+3
Document btree's unwrap_unchecked #74693's second wind
2020-09-10Document btree's unwrap_uncheckedStein Somers-0/+3
2020-09-09Rollup merge of #76504 - Flying-Toast:master, r=lcnrTyler Mandry-2/+2
Capitalize safety comments
2020-09-09Rollup merge of #76481 - moonheart08:vec_deque_constify, r=sfacklerTyler Mandry-6/+2
Convert repetitive target_pointer_width checks to const solution. Simply a quick code tidying change. Not sure if more needs to be said.
2020-09-10BTreeMap: pull the map's root out of NodeRefStein Somers-117/+163
2020-09-09Add documentation for `impl<T> From<BinaryHeap<T>> for Vec<T>`Michael Howell-0/+4
2020-09-09Formatcarbotaniuman-3/+3
2020-09-09Add WeakInner<'_> and have Weak::inner() return itcarbotaniuman-39/+70
This avoids overlapping a reference covering the data field, which may be changed due in concurrent conditions. This fully fixed the UB mainfested with `new_cyclic`.
2020-09-09Disable AsRef implementations for String's Drain.Mara Bos-14/+15
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-09Eliminate mut reference UB in Drop impl for Rc<T>carbotaniuman-1/+1
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-09Mark AsRef impls for String's Drain as stable.Mara Bos-2/+2
Trait implementations effectively can't be #[unstable].
2020-09-09Remove internal and unstable MaybeUninit::UNINIT.Mara Bos-5/+4
Looks like it is no longer necessary, as uninit_array() can be used instead in the few cases where it was needed.
2020-09-09Add AsRef<[u8]> for String's Drain.Mara Bos-0/+7
2020-09-09Show remaining data in string::Drain's Debug impl.Mara Bos-1/+1
2020-09-09Add as_str() and AsRef to string::Drain.Mara Bos-0/+26
2020-09-09BTreeMap: avoid aliasing by avoiding slicesStein Somers-167/+204
2020-09-09make as_leaf return a raw pointer, to reduce aliasing assumptionsRalf Jung-7/+12
2020-09-08Capitalize safety commentsFlying-Toast-2/+2
2020-09-08Update library/alloc/src/collections/vec_deque.rs Braden Nelson-1/+1
Replace lshift with multiply Co-authored-by: Mara Bos <m-ou.se@m-ou.se>
2020-09-08Convert MAXIMUM_ZST_CAPACITY to be calculated in amoonheart08-6/+2
const instead of multiple target_pointer_width checks.
2020-09-07Typo fix scottmcm-1/+1
Thanks, Amanieu Co-authored-by: Amanieu d'Antras <amanieu@gmail.com>
2020-09-07Rollup merge of #76303 - jyn514:vec-assert-doc, r=Dylan-DPCDylan DPC-0/+3
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-05Auto merge of #76217 - RalfJung:maybe-uninit-slice, r=KodrAusbors-11/+15
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-05Nightly is currently 1.48scottmcm-1/+1
2020-09-05rename MaybeUninit slice methodsRalf Jung-11/+15
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-05Rollup merge of #76060 - pickfire:patch-12, r=jyn514Dylan DPC-1/+3
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-05Rollup merge of #75994 - mental32:impl-rc-new-cyclic, r=KodrAusDylan DPC-0/+110
`impl Rc::new_cyclic` References #75861 r? @Dylan-DPC
2020-09-04Re-export ArrayChunksMut in allocJosh Stone-0/+2
2020-09-04Auto merge of #75200 - ssomers:btree_valmut, r=Mark-Simulacrumbors-171/+319
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-04Auto merge of #75207 - dylni:add-slice-check-range, r=KodrAusbors-71/+22
Add `slice::check_range` This method is useful for [`RangeBounds`] parameters. It's even been [rewritten](https://github.com/rust-lang/rust/blob/22ee68dc586440f96b76b32fbd6087507c6afdb9/src/librustc_data_structures/sorted_map.rs#L214) [many](https://github.com/rust-lang/rust/blob/22ee68dc586440f96b76b32fbd6087507c6afdb9/library/alloc/src/vec.rs#L1299) [times](https://github.com/rust-lang/rust/blob/22ee68dc586440f96b76b32fbd6087507c6afdb9/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-03Add `[T; N]: TryFrom<Vec<T>>`Scott McMurray-0/+52
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-04Add slice primitive link to vecIvan Tham-1/+2
2020-09-03Link to `#capacity-and-reallocation` when using with_capacityJoshua Nelson-0/+3
2020-09-03fix debug assertionThe8472-4/+18
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-03improve comments and namingThe8472-25/+56
2020-09-03add explanation to specialization markerThe8472-0/+6
2020-09-03remove separate no-drop code path since it resulted in more LLVM IRThe8472-32/+15
2020-09-03remove empty Vec extend optimizationThe8472-14/+2
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-03get things to work under min_specialization by leaning more heavily on ↵The8472-8/+14
#[rustc_unsafe_specialization_marker]
2020-09-03apply required min_specialization attributesThe8472-1/+7
2020-09-03generalize in-place collect to types of same size and alignmentThe8472-21/+31
2020-09-03increase comment verbosityThe8472-2/+2
2020-09-03work around compiler overhead around lambdas in generics by extracting them ↵The8472-34/+39
into free functions
2020-09-03extract IntoIter drop/forget used by specialization into separate methodsThe8472-15/+25
2020-09-03remove redundant castThe8472-1/+1