1
Fork 0
Commit graph

314 commits

Author SHA1 Message Date
Steven Fackler
8a22bc3b30 Revert "Add implementations of last in terms of next_back on a bunch of DoubleEndedIterators."
This reverts commit 3e86cf36b5.
2019-05-22 14:09:34 -07:00
Mazdak Farrokhzad
bab03cecfe
Rollup merge of #60130 - khuey:efficient_last, r=sfackler
Add implementations of last in terms of next_back on a bunch of DoubleEndedIterators

Provided a `DoubleEndedIterator` has finite length, `Iterator::last` is equivalent to `DoubleEndedIterator::next_back`. But searching forwards through the iterator when it's unnecessary is obviously not good for performance. I ran into this on one of the collection iterators.

I tried adding appropriate overloads for a bunch of the iterator adapters like filter, map, etc, but I ran into a lot of type inference failures after doing so.

The other interesting case is what to do with `Repeat`. Do we consider it part of the contract that `Iterator::last` will loop forever on it? The docs do say that the iterator will be evaluated until it returns None. This is also relevant for the adapters, it's trivially easy to observe whether a `Map` adapter invoked its closure a zillion times or just once for the last element.
2019-05-14 22:00:09 +02:00
varkor
aa388f1d11 ignore-tidy-filelength on all files with greater than 3000 lines 2019-04-25 21:39:09 +01:00
Kyle Huey
3e86cf36b5 Add implementations of last in terms of next_back on a bunch of DoubleEndedIterators.
r?Manishearth
2019-04-19 21:52:43 -07:00
Josh Stone
0730a01c5c Use for_each to extend collections
This updates the `Extend` implementations to use `for_each` for many
collections: `BinaryHeap`, `BTreeMap`, `BTreeSet`, `LinkedList`, `Path`,
`TokenStream`, `VecDeque`, and `Wtf8Buf`.

Folding with `for_each` enables better performance than a `for`-loop for
some iterators, especially if they can just forward to internal
iterators, like `Chain` and `FlatMap` do.
2019-04-05 14:51:07 -07:00
Mazdak Farrokhzad
379c380a60 libstd: deny(elided_lifetimes_in_paths) 2019-03-31 12:56:51 +02:00
Jethro Beekman
f229422cc1 SGX target: fix std unit tests 2019-03-25 11:31:19 -07:00
Scott McMurray
df4ea90b39 Use lifetime contravariance to elide more lifetimes in core+alloc+std 2019-03-09 19:10:28 -08:00
Taiki Endo
93b6d9e086 libstd => 2018 2019-02-28 04:06:15 +09:00
bors
00aae71f50 Auto merge of #58302 - SimonSapin:tryfrom, r=alexcrichton
Stabilize TryFrom and TryInto with a convert::Infallible empty enum

This is the plan proposed in https://github.com/rust-lang/rust/issues/33417#issuecomment-423073898
2019-02-25 20:24:10 +00:00
kennytm
e3a8f7db47
Rollup merge of #58553 - scottmcm:more-ihle, r=Centril
Use more impl header lifetime elision

Inspired by seeing explicit lifetimes on these two:

- https://doc.rust-lang.org/nightly/std/slice/struct.Iter.html#impl-FusedIterator
- https://doc.rust-lang.org/nightly/std/primitive.u32.html#impl-Not

And a follow-up to https://github.com/rust-lang/rust/pull/54687, that started using IHLE in libcore.

Most of the changes in here fall into two big categories:

- Removing lifetimes from common traits that can essentially never user a lifetime from an input (particularly `Drop`, `Debug`, and `Clone`)

- Forwarding impls that are only possible because the lifetime doesn't matter (like `impl<R: Read + ?Sized> Read for &mut R`)

I omitted things that seemed like they could be more controversial, like the handful of iterators that have a `Item: 'static` despite the iterator having a lifetime or the `PartialEq` implementations [where the flipped one cannot elide the lifetime](https://internals.rust-lang.org/t/impl-type-parameter-aliases/9403/2?u=scottmcm).

I also removed two lifetimes that turned out to be completely unused; see https://github.com/rust-lang/rust/issues/41960#issuecomment-464557423
2019-02-20 11:59:10 +08:00
Aaron Stillwell
c9fbcc1f39 Fixed doc example for Path::with_capacity 2019-02-18 17:42:07 +00:00
Scott McMurray
3bea2ca49d Use more impl header lifetime elision
There are two big categories of changes in here

- Removing lifetimes from common traits that can essentially never user a lifetime from an input (particularly `Drop` & `Debug`)
- Forwarding impls that are only possible because the lifetime doesn't matter (like `impl<R: Read + ?Sized> Read for &mut R`)

I omitted things that seemed like they could be more controversial, like the handful of iterators that have a `Item: 'static` despite the iterator having a lifetime or the `PartialEq` implementations where the flipped one cannot elide the lifetime.
2019-02-17 19:42:36 -08:00
Aaron Stillwell
35d8c4400d Changed feature gate for new PathBuf methods
Feature gate changed to `path_buf_capacity` as per advice from @Mark-Simulacrum
2019-02-17 17:14:10 +00:00
Aaron Stillwell
dbf60d9ca1 Fixes for implementation of PathBuf methods (aliases for OsString)
- Fixed incorrect `mut` usage
- Fixed style in accordance with tidy
- Marked all methods as unstable
- Changed feature identifier to path_buf_alias_os_string_methods
2019-02-17 16:41:05 +00:00
Aaron Stillwell
a23c40ec94 Add alias methods to PathBuf for underlying OsString
Implemented the following methods on PathBuf which
forward to the underlying OsString.

- capacity
- with_capacity
- clear
- reserve
- reserve_exact
- shrink_to_fit
- shrink_to
2019-02-17 15:17:46 +00:00
Nathan
4ad8770b26 Fix documentation for std::path::PathBuf::pop
Closes #58474.
2019-02-15 12:20:46 -05:00
Simon Sapin
85f13f0d42 Add a convert::Infallible empty enum, make string::ParseError an alias 2019-02-13 18:00:18 +01:00
Alexander Regueiro
99ed06eb88 libs: doc comments 2019-02-10 23:57:25 +00:00
Mazdak Farrokhzad
e598ea83c8
Update src/libstd/path.rs
Co-Authored-By: steveklabnik <steve@steveklabnik.com>
2019-01-10 17:08:42 -05:00
Steve Klabnik
f282f6b1f7 make note of one more normalization that Paths do
Fixes #29008
2019-01-10 15:30:36 -05:00
Mark Rousskov
2a663555dd Remove licenses 2018-12-25 21:08:33 -07:00
Otavio Salvador
8c40aedb8f Fix feature gate to point to 1.32.0 for path_from_str
When the feature has been added back (#55148) the feature gate has not
been adjusted accordingly. We have it enabled for 1.32.0, currently in
Beta, so adjust it.

Refs: #44431.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
2018-12-21 11:33:59 -02:00
Alexander Regueiro
ee89c088b0 Various minor/cosmetic improvements to code 2018-12-07 23:53:34 +00:00
Bastian Gruber
450a8a6f35 Add extra comment slash 2018-12-04 10:10:07 +01:00
Bastian Gruber
7933628de5 Remove trailing whitespace 2018-11-21 13:57:56 +01:00
Bastian Gruber
e8dafbaf10 Adjust doc comments 2018-11-21 13:06:22 +01:00
Bastian Gruber
5c747eb326 Update style of comments 2018-11-21 09:59:01 +01:00
Bastian Gruber
88a708dd6a Update comments 2018-11-21 09:59:01 +01:00
Bastian Gruber
072bca3ff5 Remove 'unsafe' comments 2018-11-21 09:59:01 +01:00
Bastian Gruber
700c83bc05 Document From implementations 2018-11-21 09:59:01 +01:00
Simon Sapin
a0df4204c4 Implement FromStr for PathBuf
Initially landed in https://github.com/rust-lang/rust/pull/48292
and reverted in https://github.com/rust-lang/rust/pull/50401.
This time, use `std::string::ParseError` as suggested in
https://github.com/rust-lang/rust/issues/44431#issuecomment-428112632
2018-10-17 15:54:00 +02:00
Corey Farwell
ec18991492 Add links to std::char::REPLACEMENT_CHARACTER from docs.
There are a few places where we mention the replacement character in the
docs, and it could be helpful for users to utilize the constant which is
available in the standard library, so let’s link to it!
2018-08-11 15:42:35 -04:00
Colin Wallace
4f3ab4986e libstd: Prefer Option::map/etc over match where applicable 2018-07-23 22:00:51 -07:00
Felix Rabe
c581b96f39
Typo 2018-07-21 11:49:52 +02:00
Matt Brubeck
cdff2f3b30 impl Clone for Box<CStr>, Box<OsStr>, Box<Path>
Implements #51908.
2018-07-06 12:57:47 -07:00
Tobias Stolzmann
65d119cbf6
Stabilize std::path::Path:ancestors 2018-06-18 19:49:45 +02:00
kennytm
8366780164
Rollup merge of #50170 - burtonageo:more_cow_from, r=alexcrichton
Implement From for more types on Cow

This is basically https://github.com/rust-lang/rust/pull/48191, except that it should be implemented in a way that doesn't break third party crates.
2018-05-17 05:22:07 +08:00
Mark Simulacrum
bf832c2a89
Rollup merge of #50602 - Screwtapello:update-canonicalize-docs, r=cramertj
Update canonicalize docs

I was recently working with file-paths in Rust, and I felt let down by the `std::fs::canonicalize` docs, so I figured I should submit a PR with some suggestions.

I was looking for a method to turn a relative path into an absolute path. The `canonicalize` docs didn't mention the words "relative" or "absolute", but they did mention resolving symlinks (which is a kind of canonicalisation and does not imply converting to absolute), so I assumed that's all it did. To remedy this, I've added the word "absolute" to the description of both `std::fs::canonicalize` and `std::path::Path::canonicalize`.

After calling `canonicalize` on Windows, I ran into a bunch of other problems I would not have expected from the function's behaviour on Linux. Specifically, if you call `canonicalize` on a path:

  - it's allowed to be much longer than it otherwise would
  - `.join("a/slash/delimited/path")` gives you a broken path that Windows can't use, where the same operation would have worked perfectly without `canonicalize` (if the path were short enough)
  - the resulting path may confuse other Windows programs if you pass it to them on the command-line, or write it to a config file that they read, etc.

...so I tried to summarize those behaviours too.

If I understand correctly, those behaviours are a side-effect of calling `GetFinalPathNameByHandle`, and the documentation says `canonicalize` might not call that function in future, so maybe those side-effects shouldn't be part of the function's documentation. However, I bet there's a lot of applications deliberately calling `canonicalize` just for the path-length-extension alone, so that particular side-effect is de-facto part of the `canonicalize` interface.
2018-05-12 07:32:29 -06:00
Tim Allen
9d7eda96ee Mention that fs::canonicalize makes paths absolute. 2018-05-10 18:05:29 +10:00
George Burton
17e262880c Update features to 1.28.0 2018-05-09 07:23:02 +01:00
Andre Bogus
e333725664 use fmt::Result where applicable 2018-05-09 02:01:37 +02:00
Alex Crichton
f6841470f1 Revert "Implement FromStr for PathBuf"
This reverts commit 05a9acc3b8.
2018-05-02 16:39:54 -07:00
George Burton
f3e858aae7 Update the stable attributes to use the current nightly version number 2018-04-27 20:46:06 +01:00
George Burton
d87b039ea6 Add pathbuf_from_cow_path 2018-04-27 20:41:00 +01:00
bors
a1286f6835 Auto merge of #48989 - ExpHP:path-prefix, r=dtolnay
Make signature of Path::strip_prefix accept non-references

I did this a while back but didn't submit a PR. Might as well see what happens.

Fixes #48390.

**Note: This has the potential to cause regressions in type inference.**  However, in order for code to break, it would need to be relying on the signature to determine that a type is `&_`, while still being able to figure out what the `_` is.  I'm having a hard time imagining such a scenario in real code.
2018-04-24 01:15:36 +00:00
George Burton
1133a149f1 Implement From for more types on Cow 2018-04-22 22:57:52 +01:00
Michael Lamparski
7cbc93b14f elide elidable lifetime in Path::strip_prefix 2018-03-17 20:08:07 -04:00
Manish Goregaokar
f12d5aa517
Rollup merge of #48292 - topecongiro:from_str-for-path-and-pathbuf, r=alexcrichton
Implement FromStr for PathBuf

Closes #44431.
2018-03-08 11:25:54 -08:00
topecongiro
05a9acc3b8 Implement FromStr for PathBuf 2018-03-06 01:03:16 +09:00