about summary refs log tree commit diff
path: root/library/alloc/src
AgeCommit message (Collapse)AuthorLines
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
2020-09-03move unsafety into method, not relevant to callerThe8472-2/+2
2020-09-03replace unsafe ptr::write with deref-write, benchmarks show no differenceThe8472-10/+4
2020-09-03pacify tidyThe8472-6/+6
2020-09-03replace drop flag with ManuallyDropThe8472-6/+4
2020-09-03mark as_inner as unsafe and update commentsThe8472-5/+9
2020-09-03avoid exposing that binary heap's IntoIter is backed by vec::IntoIter, use a ↵The8472-9/+26
private trait instead
2020-09-03fix build issue due to stabilized featureThe8472-0/+1
2020-09-03impl TrustedRandomAccess for vec::IntoIterThe8472-1/+22
2020-09-03remove unecessary feature flagThe8472-1/+0
# Conflicts: # library/alloc/src/lib.rs
2020-09-03move free-standing method into trait implThe8472-79/+75
2020-09-03fix some in-place-collect edge-casesThe8472-0/+13
- it's an allocation optimization, so don't attempt to do it on ZSTs - drop the tail of partially exhausted iters
2020-09-03remove redundant codeThe8472-7/+1
2020-09-03improve commentsThe8472-7/+10
2020-09-03specialize creating a Vec from a slice iterator where T: CopyThe8472-0/+14
this was already implemented for Extend but not for FromIterator
2020-09-03restore SpecFrom<T, TrustedLen<Item=T>> specialization by nestingThe8472-1/+29
specializations
2020-09-03use From specializations on extend if extended Vec is emptyThe8472-3/+25
this enables in-place iteration and allocation reuse in additional cases
2020-09-03use memmove instead of generic in-place iteration for IntoIter sourceThe8472-2/+10
this is the original SpecExtend<_, IntoIter> logic except generalizing the fast-path to include a memmove
2020-09-03restore Vec::extend specialization for vec::IntoIter sources thatThe8472-0/+9
was lost during refactoring
2020-09-03hide binary_heap::IntoIter internals behind impl TraitThe8472-1/+2
2020-09-03recover vectorizationThe8472-23/+54
switch to try_fold and segregate the drop handling to keep collect::<Vec<u8>>() and similar optimizer-friendly It comes at the cost of less accurate debug_asserts and code complexity
2020-09-03simplify pointer arithmeticThe8472-11/+15
2020-09-03use add instead of offsetThe8472-1/+1
2020-09-03implement drop handlingThe8472-7/+26
2020-09-03assert that SourceIter requirements have not been violated by the pipelineThe8472-0/+2
2020-09-03mark SourceIter as unsafe, document invariantsThe8472-2/+2
2020-09-03in-place collect for Vec. Box<[]> and BinaryHeap IntoIter and some adaptersThe8472-42/+112
2020-09-03unrelated typo fixThe8472-1/+1
2020-09-03Link & primitive using relative linkIvan Tham-0/+1
2020-09-03Auto merge of #76235 - jyn514:std-intra-links, r=poliorceticsbors-10/+10
Convert many files to intra-doc links Helps with https://github.com/rust-lang/rust/issues/75080 r? @poliorcetics I recommend reviewing one commit at a time, but the diff is small enough you can do it all at once if you like :)
2020-09-02Revert change to MaybeUninit until rustdoc bugs are fixedJoshua Nelson-4/+4
https://github.com/rust-lang/rust/issues/76106
2020-09-02Convert many files to intra-doc linksJoshua Nelson-10/+10
- Use intra-doc links for `std::io` in `std::fs` - Use intra-doc links for File::read in unix/ext/fs.rs - Remove explicit intra-doc links for `true` in `net/addr.rs` - Use intra-doc links in alloc/src/sync.rs - Use intra-doc links in src/ascii.rs - Switch to intra-doc links in alloc/rc.rs - Use intra-doc links in core/pin.rs - Use intra-doc links in std/prelude - Use shorter links in `std/fs.rs` `io` is already in scope.