2376 Commits

Author SHA1 Message Date
Corey Farwell
274777a158 Rename 'librustc_unicode' crate to 'libstd_unicode'.
Fixes #26554.
2016-11-30 01:24:01 -05:00
bors
f8614c3973 Auto merge of #36340 - sfackler:slice-get-slice, r=alexcrichton
Implement RFC 1679

cc #35729

r? @alexcrichton
2016-11-26 18:47:06 -06:00
bors
9003e1ab6a Auto merge of #38008 - bluss:rustbuild-benches, r=alexcrichton
Add rustbuild command `bench`

Add command bench to rustbuild, so that `./x.py bench <path>` can compile and run benchmarks.

`./x.py bench --stage 1 src/libcollections` and `./x.py bench --stage 1 src/libstd` should both compile well. Just `./x.py bench` runs all benchmarks for the libstd crates.

Fixes #37897
2016-11-26 12:32:19 -06:00
Steven Fackler
5377b5e9c4 Overload get{,_mut}{,_unchecked} 2016-11-26 10:07:39 -08:00
Seo Sanghyeon
6ffcdff06c Rollup merge of #37967 - sfackler:enumset-issue, r=sfackler
Add a tracking issue for enum_set

I totally forgot this even existed!
2016-11-26 22:02:14 +09:00
Ulrik Sverdrup
42e66344b5 rustbuild: Point to core and collections's external benchmarks. 2016-11-25 23:10:43 +01:00
Steven Fackler
8560991cb0 Add a tracking issue for enum_set 2016-11-23 10:55:44 -08:00
Ulrik Sverdrup
74cde120e5 core, collections: Implement better .is_empty() for slice and vec iterators
These iterators can use a pointer comparison instead of computing the length.
2016-11-23 02:31:41 +01:00
Ulrik Sverdrup
c36edc7261 vec: Use less code bloat specialized Vec::from_iter
Vec::from_iter's general case allocates the vector up front;
this is redundant for the TrustedLen case, and can then be avoided
to reduce the size of the code.
2016-11-13 01:30:42 +01:00
Ulrik Sverdrup
2b3a37bd2e Restore Vec::from_iter() specialization
Since I said "no intentional functional change" in the previous commit,
I guess it was inevitable there were unintentional changes. Not
functional, but optimization-wise. This restores the extend
specialization's use in Vec::from_iter.
2016-11-13 00:13:09 +01:00
Ulrik Sverdrup
5058e58676 vec: Write the .extend() specialization in cleaner style
As far as possible, use regular `default fn` specialization in favour of
ad-hoc conditionals.
2016-11-11 12:54:10 +01:00
Alex Crichton
5bce6ad16a Rollup merge of #37587 - ollie27:to_mut, r=alexcrichton
Remove recursive call from Cow::to_mut

It seems to prevent it from being inlined.
2016-11-05 10:50:25 -07:00
Alex Crichton
727f1d3f16 Rollup merge of #37585 - leodasvacas:change_into_to_from, r=alexcrichton
Change `Into<Vec<u8>> for String` and `Into<OsString> for PathBuf` to From

Fixes #37561. First contribution, happy with any and all feedback!
2016-11-05 10:50:25 -07:00
Alex Crichton
638436e55f Rollup merge of #37574 - ollie27:cow_add, r=alexcrichton
Fix issues with the Add/AddAssign impls for Cow<str>

* Correct the stability attributes.
* Make Add and AddAssign actually behave the same.
* Use String::with_capacity when allocating a new string.
* Fix the tests.
2016-11-05 10:50:24 -07:00
Oliver Middleton
775d399da8 Remove recursive call from Cow::to_mut
It seems to prevent it from being inlined.
2016-11-04 18:47:32 +00:00
leonardo.yvens
3e4bd88438 Change Into<Vec<u8>> for String and Into<OsString> for PathBuf to From impls 2016-11-04 15:54:08 -02:00
bors
81601cd3a3 Auto merge of #37306 - bluss:trusted-len, r=alexcrichton
Add Iterator trait TrustedLen to enable better FromIterator / Extend

This trait attempts to improve FromIterator / Extend code by enabling it to trust the iterator to produce an exact number of elements, which means that reallocation needs to happen only once and is moved out of the loop.

`TrustedLen` differs from `ExactSizeIterator` in that it attempts to include _more_ iterators by allowing for the case that the iterator's len does not fit in `usize`. Consumers must check for this case (for example they could panic, since they can't allocate a collection of that size).

For example, chain can be TrustedLen and all numerical ranges can be TrustedLen. All they need to do is to report an exact size if it fits in `usize`, and `None` as the upper bound otherwise.

The trait describes its contract like this:

```
An iterator that reports an accurate length using size_hint.

The iterator reports a size hint where it is either exact
(lower bound is equal to upper bound), or the upper bound is `None`.
The upper bound must only be `None` if the actual iterator length is
larger than `usize::MAX`.

The iterator must produce exactly the number of elements it reported.

This trait must only be implemented when the contract is upheld.
Consumers of this trait must inspect `.size_hint()`’s upper bound.
```

Fixes #37232
2016-11-04 10:40:30 -07:00
Oliver Middleton
1e40c80cf5 Fix issues with the Add/AddAssign impls for Cow<str>
* Correct the stability attributes.
* Make Add and AddAssign actually behave the same.
* Use String::with_capacity when allocating a new string.
* Fix the tests.
2016-11-04 01:07:00 +00:00
Ulrik Sverdrup
f0e6b90790 Link the tracking issue for TrustedLen 2016-11-04 01:00:55 +01:00
iirelu
e593c3b893 Changed most vec! invocations to use square braces
Most of the Rust community agrees that the vec! macro is clearer when
called using square brackets [] instead of regular brackets (). Most of
these ocurrences are from before macros allowed using different types of
brackets.

There is one left unchanged in a pretty-print test, as the pretty
printer still wants it to have regular brackets.
2016-10-31 22:51:40 +00:00
Ulrik Sverdrup
5dc9db541e vec: Remove the Vec specialization for .extend()
This now produces as good code (with optimizations) using the TrustedLen
codepath.
2016-10-27 01:45:31 +02:00
Ulrik Sverdrup
2411be5cae impl TrustedLen for vec::IntoIter 2016-10-27 00:18:13 +02:00
bors
c59cb71d97 Auto merge of #37419 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 7 pull requests

- Successful merges: #36206, #37144, #37391, #37394, #37396, #37398, #37414
- Failed merges:
2016-10-26 14:58:16 -07:00
bors
3a25b65c1f Auto merge of #37315 - bluss:fold-more, r=alexcrichton
Implement Iterator::fold for .chain(), .cloned(), .map() and the VecDeque iterators.

Chain can do something interesting here where it passes on the fold
into its inner iterators.

The lets the underlying iterator's custom fold() be used, and skips the
regular chain logic in next.

Also implement .fold() specifically for .map() and .cloned() so that any
inner fold improvements are available through map and cloned.

The same way, a VecDeque iterator fold can be turned into two slice folds.

These changes lend the power of the slice iterator's loop codegen to
VecDeque, and to chains of slice iterators, and so on.
It's an improvement for .sum() and .product(), and other uses of fold.
2016-10-26 11:43:32 -07:00
Duncan
09227b17f4 Vec docs: fix broken links and make quoting consistent 2016-10-26 06:24:52 +13:00
Ulrik Sverdrup
15a95866b4 Special case .fold() for VecDeque's iterators 2016-10-25 15:50:52 +02:00
bors
40f79ba8c9 Auto merge of #37327 - aidanhs:aphs-bytes-iter-doc, r=alexcrichton
`as_bytes` is not the iterator on String, `bytes` is

r? @steveklabnik
2016-10-22 23:02:24 -07:00
bors
febfe7683b Auto merge of #37326 - SimonSapin:from-cow, r=alexcrichton
Implement `From<Cow<str>> for String` and `From<Cow<[T]>> for Vec<T>`.

Motivation: the `selectors` crate is generic over a string type, in order to support all of `String`,  `string_cache::Atom`, and `gecko_string_cache::Atom`. Multiple trait bounds are used for the various operations done with these strings. One of these operations is creating a string (as efficiently as possible, re-using an existing memory allocation if possible) from `Cow<str>`.

The `std::convert::From` trait seems natural for this, but the relevant implementation was missing before this PR. To work around this I’ve added a `FromCowStr` trait in `selectors`, but with trait coherence that means one of `selectors` or `string_cache` needs to depend on the other to implement this trait. Using a trait from `std` would solve this.

The `Vec<T>` implementation is just added for consistency. I also tried a more general `impl<'a, O, B: ?Sized + ToOwned<Owned=O>> From<Cow<'a, B>> for O`, but (the compiler thinks?) it conflicts with `From<T> for T` the impl (after moving all of `collections::borrow` into `core::borrow` to work around trait coherence).
2016-10-22 19:47:05 -07:00
Guillaume Gomez
18f9758c4f Rollup merge of #37043 - GuillaumeGomez:vec_urls, r=frewsxcv
Add missing urls on Vec docs

r? @steveklabnik
2016-10-22 01:21:58 +02:00
Aidan Hobson Sayers
dceb2c9cd2 as_bytes is not the iterator, bytes is 2016-10-21 18:28:02 +01:00
Ulrik Sverdrup
ee84ec1fa1 vec: Add a debug assertion where TrustedLen is used 2016-10-21 19:18:08 +02:00
Simon Sapin
7e603d4e3b Implement From<Cow<str>> for String and From<Cow<[T]>> for Vec<T>.
Motivation: the `selectors` crate is generic over a string type,
in order to support all of `String`, `string_cache::Atom`, and
`gecko_string_cache::Atom`. Multiple trait bounds are used
for the various operations done with these strings.
One of these operations is creating a string (as efficiently as possible,
re-using an existing memory allocation if possible) from `Cow<str>`.

The `std::convert::From` trait seems natural for this, but
the relevant implementation was missing before this PR.
To work around this I’ve added a `FromCowStr` trait in `selectors`,
but with trait coherence that means one of `selectors` or `string_cache`
needs to depend on the other to implement this trait.
Using a trait from `std` would solve this.

The `Vec<T>` implementation is just added for consistency.
I also tried a more general
`impl<'a, O, B: ?Sized + ToOwned<Owned=O>> From<Cow<'a, B>> for O`,
but (the compiler thinks?) it conflicts with `From<T> for T` the impl
(after moving all of `collections::borrow` into `core::borrow`
to work around trait coherence).
2016-10-21 17:42:29 +02:00
Ulrik Sverdrup
622f24f6d9 vec: Use Vec::extend specializations in extend_from_slice and more
The new Vec::extend covers the duties of .extend_from_slice() and some
previous specializations.
2016-10-21 14:06:38 +02:00
Ulrik Sverdrup
49557112d6 Use TrustedLen for Vec's FromIterator and Extend 2016-10-20 14:07:31 +02:00
Guillaume Gomez
599ad8ed61 Add missing urls on Vec docs 2016-10-20 11:59:47 +02:00
Guillaume Gomez
ce369bfa11 Rollup merge of #37187 - frewsxcv:cow-doc-example, r=kmcallister
Improve doc example for `std::borrow::Cow`.

None
2016-10-19 23:15:00 +02:00
Florian Diebold
187ddf30b0 Update comment in Vec::dedup_by 2016-10-16 14:41:01 +02:00
bors
030bc49bb4 Auto merge of #37094 - fhartwig:spec-extend-from-slice, r=alexcrichton
Specialize Vec::extend to Vec::extend_from_slice

I tried using the existing `SpecExtend` as a helper trait for this, but the instances would always conflict with the instances higher up in the file, so I created a new helper trait.

Benchmarking `extend` vs `extend_from_slice` with an slice of 1000 `u64`s gives the following results:

```
before:

running 2 tests
test tests::bench_extend_from_slice ... bench:         166 ns/iter (+/- 78)
test tests::bench_extend_trait      ... bench:       1,187 ns/iter (+/- 697)

after:
running 2 tests
test tests::bench_extend_from_slice ... bench:         149 ns/iter (+/- 87)
test tests::bench_extend_trait      ... bench:         138 ns/iter (+/- 70)
```
2016-10-15 01:48:42 -07:00
Corey Farwell
a8dc2975fd Improve doc example for std::borrow::Cow. 2016-10-15 00:55:46 -04:00
bors
17af6b94b2 Auto merge of #36743 - SimonSapin:dedup-by, r=alexcrichton
Add Vec::dedup_by and Vec::dedup_by_key
2016-10-13 19:56:53 -07:00
Florian Hartwig
63ee8d0bbc Specialize Vec::extend to Vec::extend_from_slice 2016-10-11 19:45:09 +02:00
Guillaume Gomez
30164c21fa Rollup merge of #37081 - p512:master, r=sfackler
Changed 0 into '0'

Right now `0` is an undefined production rule.
[Documentation following the grammar specification](https://doc.rust-lang.org/nightly/std/fmt/#sign0) strongly suggests `'0'` is meant as it is used as a character literal.

r? @steveklabnik
2016-10-11 17:51:27 +02:00
Guillaume Gomez
5c29a914a9 Rollup merge of #37073 - GuillaumeGomez:string_url, r=steveklabnik
Add missing urls on String module

r? @steveklabnik
2016-10-11 17:51:27 +02:00
Guillaume Gomez
0b7fe4d67c Rollup merge of #36699 - bluss:repeat-str, r=alexcrichton
Add method str::repeat(self, usize) -> String

It is relatively simple to repeat a string n times:
`(0..n).map(|_| s).collect::<String>()`. It becomes slightly more
complicated to do it “right” (sizing the allocation up front), which
warrants a method that does it for us.

This method is useful in writing testcases, or when generating text.
`format!()` can be used to repeat single characters, but not repeating
strings like this.
2016-10-11 17:51:26 +02:00
Simon Sapin
401f1c45db Merge two impl<T> Vec<T> blocks.
The show up separately in rustdoc.

This is a separate commit to keep the previous one’s diff shorter.
2016-10-11 14:40:05 +02:00
Simon Sapin
be34bac1ab Add Vec::dedup_by and Vec::dedup_by_key 2016-10-11 14:39:14 +02:00
p512
ee3de444e6 Changed 0 into '0'
0 is not a production rule but a literal
2016-10-11 01:25:50 +02:00
Ulrik Sverdrup
2b7222d3ec Add method str::repeat(self, usize) -> String
It is relatively simple to repeat a string n times:
`(0..n).map(|_| s).collect::<String>()`. It becomes slightly more
complicated to do it “right” (sizing the allocation up front), which
warrants a method that does it for us.

This method is useful in writing testcases, or when generating text.
`format!()` can be used to repeat single characters, but not repeating
strings like this.
2016-10-11 00:24:23 +02:00
Guillaume Gomez
3c66f96aac Add missing urls on String module 2016-10-10 18:15:55 +02:00
bors
9d4d0da7af Auto merge of #36982 - GuillaumeGomez:slice_urls, r=frewsxcv
Add missing urls in slice doc module

r? @steveklabnik
2016-10-09 00:35:56 -07:00