Commit graph

594 commits

Author SHA1 Message Date
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
Duncan
09227b17f4 Vec docs: fix broken links and make quoting consistent 2016-10-26 06:24:52 +13: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
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
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
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
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
Oliver Middleton
06a7dcd355 std: Correct stability attributes for some implementations
These are displayed by rustdoc so should be correct.
2016-10-01 23:58:14 +01:00
Steve Klabnik
cabfa99199 Rollup merge of #36623 - GuillaumeGomez:doc_typos, r=steveklabnik
Fix some typos and improve doc comments style

r? @steveklabnik
2016-09-30 13:44:46 -04:00
Brian Anderson
3b49c60ab7 Remove stage0 hacks 2016-09-28 23:17:56 +00:00
Guillaume Gomez
323701e345 Fix some typos and improve doc comments style 2016-09-24 18:48:15 +02:00
Guillaume Gomez
a89690ec00 Rollup merge of #36396 - athulappadan:Default-docs, r=bluss
Documentation of what Default does for each type

Addresses #36265
I haven't changed the following types due to doubts:

1)src/libstd/ffi/c_str.rs
2)src/libcore/iter/sources.rs
3)src/libcore/hash/mod.rs
4)src/libcore/hash/mod.rs
5)src/librustc/middle/privacy.rs

r? @steveklabnik
2016-09-14 17:15:37 +02:00
athulappadan
49e77dbf25 Documentation of what does for each type 2016-09-11 17:00:09 +05:30
Ulrik Sverdrup
765700ba7a Work around pointer aliasing issue in Vec::extend_from_slice, extend_with_element
Due to missing noalias annotations for &mut T in general (issue #31681),
in larger programs extend_from_slice and extend_with_element may both
compile very poorly. What is observed is that the .set_len() calls are
not lifted out of the loop, even for `Vec<u8>`.

Use a local length variable for the Vec length instead, and use a scope
guard to write this value back to self.len when the scope ends or on
panic. Then the alias analysis is easy.

This affects extend_from_slice, extend_with_element, the vec![x; n]
macro, Write impls for Vec<u8>, BufWriter, etc (but may / may not
have triggered since inlining can be enough for the compiler to get it right).
2016-09-09 02:38:47 +02:00
Eduard Burtescu
119508cdb4 Remove drop flags from structs and enums implementing Drop. 2016-08-24 13:23:37 +03:00
Steven Allen
de91872a33 Add a FusedIterator trait.
This trait can be used to avoid the overhead of a fuse wrapper when an iterator
is already well-behaved.

Conforming to: RFC 1581
Closes: #35602
2016-08-18 12:16:29 -04:00
bors
7ac11cad3f Auto merge of #35747 - jonathandturner:rollup, r=jonathandturner
Rollup of 23 pull requests

- Successful merges: #34370, #35415, #35595, #35610, #35613, #35614, #35621, #35660, #35663, #35670, #35671, #35672, #35681, #35686, #35690, #35695, #35707, #35708, #35713, #35722, #35725, #35726, #35731
- Failed merges: #35395
2016-08-17 09:49:34 -07:00
Andrew Paseltiner
7e148cd062
Make vec::IntoIter covariant again
Closes #35721
2016-08-16 20:45:07 -04:00
Corey Farwell
bc52bdcedc Implement Debug for std::vec::IntoIter.
Display all the remaining items of the iterator, similar to the `Debug`
implementation for `core::slice::Iter`:

f0bab98695/src/libcore/slice.rs (L930-L937)

Using the `as_slice` method that was added in:

https://github.com/rust-lang/rust/pull/35447
2016-08-15 23:45:12 -04:00
Corey Farwell
01a766e521 Introduce as_mut_slice method on std::vec::IntoIter struct. 2016-08-11 16:49:01 -04:00
Corey Farwell
d099e30e48 Introduce as_slice method on std::vec::IntoIter struct.
Similar to the `as_slice` method on `core::slice::Iter` struct.
2016-08-11 16:48:43 -04:00
Guillaume Gomez
1fa9b8dc96 Add doc example for Vec 2016-08-02 20:45:31 +02:00
bors
cec262e55a Auto merge of #34951 - tomgarcia:covariant-vec, r=brson
Make vec::Drain and binary_heap::Drain covariant

I removed all mutable pointers/references, and added covariance tests similar to the ones in #32635. It builds and passes the tests, but I noticed that there weren't any tests of Drain's behaviour (at least not in libcollectionstest), so I'm not sure if my changes accidently broke Drain's behaviour. Should I add some tests for that (and if so, what should the tests include)?
2016-07-28 05:24:31 -07:00
Corey Farwell
1e0043eb6c Fix incorrect 'memory leak' example for Vec::set_len.
Example was written in https://github.com/rust-lang/rust/pull/34911

Issue was brought up in this comment:

a005b2cd2a (commitcomment-18346958)
2016-07-23 09:08:45 -04:00
Thomas Garcia
d1e2a935d2 Readding lifetime parameters and removing allocation 2016-07-21 20:55:19 -07:00
Guillaume Gomez
1006f794cd Rollup merge of #34930 - frewsxcv:vec-as-slice, r=steveklabnik
Add doc examples for `Vec::{as_slice,as_mut_slice}`.

None
2016-07-21 11:27:01 +02:00
Guillaume Gomez
27876c0a1c Rollup merge of #34911 - frewsxcv:vec-set-len, r=steveklabnik
Rewrite/expand doc examples for `Vec::set_len`.

None
2016-07-21 11:27:00 +02:00
Thomas Garcia
97d082c6cd Make vec::Drain and binary_heap::Drain covariant 2016-07-21 01:03:40 -07:00
Corey Farwell
00e3149ded Add doc examples for Vec::{as_slice,as_mut_slice}. 2016-07-19 21:34:45 -04:00
Corey Farwell
a005b2cd2a Rewrite/expand doc examples for Vec::set_len. 2016-07-19 12:31:41 -04:00
Seo Sanghyeon
1132a4ddfc Rollup merge of #34884 - shepmaster:from_raw_parts_doc, r=@nagisa
Improve {String,Vec}::from_raw_parts documentation
2016-07-18 22:44:56 +09:00
Seo Sanghyeon
15715c8377 Rollup merge of #34853 - frewsxcv:vec-truncate, r=GuillaumeGomez
Partial rewrite/expansion of `Vec::truncate` documentation.

None
2016-07-18 22:44:56 +09:00
Jake Goulding
661187a95e Remove extraneous words 2016-07-17 18:19:20 -04:00
Jake Goulding
f6be6aa92a Document from_raw_parts involves ownership transfer 2016-07-17 18:18:49 -04:00
Corey Farwell
f80165dfa2 Remove unnecessary indexing and deref in Vec::as_mut_slice. 2016-07-16 22:09:55 -04:00
Corey Farwell
e2f5961f35 Partial rewrite/expansion of Vec::truncate documentation. 2016-07-16 11:23:55 -04:00
Corey Farwell
cf21a7b52d Mention where std::vec structs originate from. 2016-07-14 20:32:09 -04:00
Tobias Bucher
8ff5c4394c Use len instead of size_hint where appropiate
This makes it clearer that we're not just looking for a lower bound but
rather know that the iterator is an `ExactSizeIterator`.
2016-06-23 12:26:15 +02:00
Liigo Zhuang
f5a398d056 Point out the clone operation in summary line docs of Vec::extend_from_slice 2016-05-25 10:09:20 +08:00
Andrew Paseltiner
cf37af1627
Specialize Extend to append for {LinkedList, Vec} 2016-04-14 07:12:45 -04:00
Kamal Marhubi
93569acdbe style: Use iter for IntoIterator parameter names
This commit standardizes the codebase on `iter` for parameters with
IntoIterator bounds.

Previously about 40% of IntoIterator parameters were named `iterable`,
with most of the rest being named `iter`. There was a single place where
it was named `iterator`.
2016-03-28 13:59:38 -04:00