Commit Graph

1546 Commits

Author SHA1 Message Date
bors
4daa62a55f Auto merge of #25230 - rayglover:patch-bitset, r=Gankro
Some modest running-time improvements to `std::collections::BitSet` on bit-sets of varying set-membership densities. This is work originally from [here](https://github.com/rayglover/alt_collections). (Benchmarks copied below)
```
std::collections::BitSet / alt_collections::BitSet

copy_dense         ... 3.08x
copy_sparse        ... 4.22x
count_dense        ... 11.01x
count_sparse       ... 8.11x
from_bytes         ... 1.47x
intersect_dense    ... 6.54x
intersect_sparse   ... 4.37x
union_dense        ... 5.53x
union_sparse       ... 5.60x
```

The exception is `from_bytes`, which I've left unaltered since the optimization is rather obscure.

Compiling with the cpu feature `popcnt` gave a further ~10% improvement on my machine, but this wasn't factored in to the benchmarks above.

Similar improvements could be made to `BitVec`, although that would probably require more substantial changes.

criticism welcome!
2015-05-18 19:54:24 +00:00
Mário Feroldi
ce8fb6c6c6 Fixed reserve_exact example
The same example for ``reverse`` were in the ``reserve_exact``'s example.
2015-05-16 20:59:20 -03:00
bors
d332aead90 Auto merge of #25434 - dotdash:gep, r=alexcrichton
Using regular pointer arithmetic to iterate collections of zero-sized types
doesn't work, because we'd get the same pointer all the time. Our
current solution is to convert the pointer to an integer, add an offset
and then convert back, but this inhibits certain optimizations.

What we should do instead is to convert the pointer to one that points
to an i8\*, and then use a LLVM GEP instructions without the inbounds
flag to perform the pointer arithmetic. This allows to generate pointers
that point outside allocated objects without causing UB (as long as you
don't dereference them), and it wraps around using two's complement,
i.e. it behaves exactly like the wrapping_* operations we're currently
using, with the added benefit of LLVM being able to better optimize the
resulting IR.
2015-05-16 19:17:30 +00:00
bors
6403a2fc32 Auto merge of #25462 - alexcrichton:favicon-https, r=nrc
Helps prevent mixed content warnings if accessing docs over HTTPS.

Closes #25459
2015-05-16 17:41:28 +00:00
ray glover
307fab1aa7 fix to size_hint(); documentation for bit-twiddle; 2015-05-16 01:53:11 +01:00
Alex Crichton
0e21beb761 libs: Move favicon URLs to HTTPS
Helps prevent mixed content warnings if accessing docs over HTTPS.

Closes #25459
2015-05-15 16:04:01 -07:00
P1start
fa28642de9 Allow ?Sized types in Rc’s impls of {Partial,}{Ord,Eq} and Borrow 2015-05-16 11:01:52 +12:00
Björn Steinbrink
eeeb2cc0df Allow for better optimizations of iterators for zero-sized types
Using regular pointer arithmetic to iterate collections of zero-sized types
doesn't work, because we'd get the same pointer all the time. Our
current solution is to convert the pointer to an integer, add an offset
and then convert back, but this inhibits certain optimizations.

What we should do instead is to convert the pointer to one that points
to an i8*, and then use a LLVM GEP instructions without the inbounds
flag to perform the pointer arithmetic. This allows to generate pointers
that point outside allocated objects without causing UB (as long as you
don't dereference them), and it wraps around using two's complement,
i.e. it behaves exactly like the wrapping_* operations we're currently
using, with the added benefit of LLVM being able to better optimize the
resulting IR.
2015-05-15 15:30:22 +02:00
Jan Bujak
4bdeb31124 Add #[inline] to Borrow<str>::borrow for String. 2015-05-14 20:54:02 +02:00
Steve Klabnik
96a3443712 Small cleanup to vec docs
Add the repeating form of the vec macro

Remove unneeded literal annotations.

Use more conventional variable names.
2015-05-13 10:44:37 -04:00
Steve Klabnik
e780fb270c TRPL: Borrow and AsRef
These two traits are commonly confused. As such, explain the difference.

Fixes #24163
2015-05-12 10:53:50 -04:00
Steve Klabnik
abb97af508 Rollup merge of #25288 - DrKwint:master, r=alexcrichton
The functions BitSet::{iter,union,symmetric_difference} each had docs that claimed u32s were output when their actual output each end up being usizes.

r? @steveklabnik
2015-05-11 23:24:19 -04:00
bors
0a41c4a33d Auto merge of #25301 - jooert:vec_map_fix_split_off, r=Gankro
We don't need to copy any elements if `at` is behind the last element
in the map. The last element is at index `self.v.len() - 1`, so we
should not copy if `at` is greater **or equals** `self.v.len()`.

r? @Gankro
2015-05-11 16:20:49 +00:00
Manish Goregaokar
f2c2736cd8 Rollup merge of #25290 - bluss:docfixes, r=steveklabnik
Several Minor API / Reference Documentation Fixes

- Fix a few small errors in the reference.
- Fix paper cuts in the API docs.

Fixes #24882
Fixes #25233
Fixes #25250
2015-05-11 19:58:57 +05:30
Johannes Oertel
5b0e19794e Minor optimization for VecMap::split_off
We don't need to copy any elements if `at` is behind the last element
in the map. The last element is at index `self.v.len() - 1`, so we
should not copy if `at` is greater or equals `self.v.len()`.
2015-05-11 12:54:59 +02:00
Ulrik Sverdrup
aabdd8e0a6 docs: Update SliceConcatExt docs for assoc types 2015-05-11 03:43:04 +02:00
bors
bef0b4bb02 Auto merge of #24934 - jooert:bitset-append-split_off, r=Gankro
cc #19986
2015-05-11 00:58:33 +00:00
Paul Quint
c98df58593 Update BitSet docs to correct types
Update BitSet docs to correct type in one more spot

removed accidental file
2015-05-10 19:37:24 -05:00
Steve Klabnik
ad1c0c57b8 Rollup merge of #25158 - koute:master, r=alexcrichton
I was profiling my code again and this time AsRef<str> for String
was eating up a considerable chunk of my runtime; adding the inline
annotation made the program run almost twice as fast!

While I was at it I also added the annotation to other implementations
of AsRef as well as AsMut.
2015-05-10 16:44:22 -04:00
Johannes Oertel
f95c812311 Implement append and split_off for BitSet (RFC 509) 2015-05-10 21:46:32 +02:00
Jan Bujak
a168dbad15 Add #[inline] to AsRef<str>::as_ref for String and str. 2015-05-10 14:06:41 +02:00
Manish Goregaokar
511a8d47eb Rollup merge of #25227 - jooert:bitvec-doc-fix, r=alexcrichton
I forgot this in #24890.
2015-05-09 18:40:19 +05:30
bors
c033d98280 Auto merge of #25162 - seanmonstar:asref-bytes, r=alexcrichton
r? @aturon
2015-05-09 00:18:49 +00:00
Sean McArthur
8e491ef019 collections: change bounds of SliceConcatExt implementations to use Borrow instead of AsRef 2015-05-08 17:13:54 -07:00
Sean McArthur
093ebd5a62 collections: impl AsRef<[u8]> for String 2015-05-08 17:13:54 -07:00
ray glover
3a62f87b78 Perf improvements to collections::BitSet. 2015-05-09 01:04:43 +01:00
Johannes Oertel
a29dc05c93 Document panic behaviour of BitVec::split_off 2015-05-09 00:41:38 +02:00
bors
7132092ce6 Auto merge of #25187 - alexcrichton:mem-forget-safe, r=brson
This commit is an implementation of [RFC 1066][rfc] where the conclusion was
that leaking a value is a safe operation in Rust code, so updating the signature
of this function follows suit.

[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/1066-safe-mem-forget.md

Closes #25186
2015-05-08 18:21:51 +00:00
Alex Crichton
dd59b1fb4c std: Mark mem::forget as a safe function
This commit is an implementation of [RFC 1066][rfc] where the conclusion was
that leaking a value is a safe operation in Rust code, so updating the signature
of this function follows suit.

[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/1066-safe-mem-forget.md

Closes #25186
2015-05-07 17:25:04 -07:00
bors
5ae026e892 Auto merge of #25157 - alexcrichton:remove-vec-add, r=aturon
Ideally this trait implementation would be unstable, requiring crates to opt-in
if they would like the functionality, but that's not currently how stability
works so the implementation needs to be removed entirely.

This may come back at a future date, but for now the conservative option is to
remove it.

[breaking-change]
2015-05-07 21:45:11 +00:00
bors
e8b4c84e39 Auto merge of #24890 - jooert:bitvec-append-split_off, r=alexcrichton
cc #19986 

r? @Gankro
2015-05-07 00:20:25 +00:00
Alex Crichton
8d3f84e235 std: Remove addition on vectors for now
Ideally this trait implementation would be unstable, requiring crates to opt-in
if they would like the functionality, but that's not currently how stability
works so the implementation needs to be removed entirely.

This may come back at a future date, but for now the conservative option is to
remove it.

[breaking-change]
2015-05-06 10:52:34 -07:00
bors
5a83fa271d Auto merge of #25120 - bluss:sliceconcatext, r=alexcrichton
collections: Convert SliceConcatExt to use associated types

Coherence now allows this, we have `SliceConcatExt<T> for [V] where T: Sized + Clone` and` SliceConcatExt<str> for [S]`, these don't conflict because
str is never Sized.
2015-05-06 11:56:15 +00:00
Johannes Oertel
d55a7e8bc4 Implement append and split_off for BitVec (RFC 509) 2015-05-06 09:29:07 +02:00
bors
5b04c16bd6 Auto merge of #24879 - Stebalien:vec_deque, r=alexcrichton
According to rust-lang/rfcs#235, `VecDeque` should have this method (`VecDeque` was called `RingBuf` at the time) but it was never implemented.

I marked this stable since "1.0.0" because it's stable in `Vec`.
2015-05-06 03:33:42 +00:00
Ulrik Sverdrup
2ca77f1c96 collections: Convert SliceConcatExt to use associated types
Coherence now allows this, we have SliceConcatExt<T> for [V] where T: Sized
+ Clone and SliceConcatExt<str> for [S], these don't conflict because
str is never Sized.
2015-05-05 16:39:33 +02:00
bors
31e3cb7c4e Auto merge of #25111 - Manishearth:rollup, r=Manishearth
r? @Manishearth
2015-05-05 04:47:56 +00:00
Manish Goregaokar
266d4829ea Rollup merge of #25100 - jbcrail:fix-spelling-errors, r=steveklabnik
I corrected several spelling errors in the external documentation.
2015-05-05 09:24:22 +05:30
Manish Goregaokar
86a858add5 Rollup merge of #25087 - nham:improve_vec_docs, r=Gankro
This commit does two things: it adds an example for indexing vectors, and it changes the \"Examples\" section to use full sentences.

This change was spurred by someone in the #rust IRC channel asking if there was a `.set()` method for changing the `i`-th value of a vector (they had missed that `Vec` implements `IndexMut`, which is easy to do if you're not aware of that trait).
2015-05-05 09:24:03 +05:30
Steven Allen
decf395221 Implement retain for vec_deque 2015-05-04 23:04:06 -04:00
bors
0be117e273 Auto merge of #25095 - huonw:faster-bitvec, r=alexcrichton
This makes the `bit::vec::bench::bench_bit_vec_big_union` benchmark go
from `774 ns/iter (+/- 190)` to `602 ns/iter (+/- 5)`.

(There's room for more work here too: if one can guarantee 128-bit
alignment for the vector, the compiler actually optimises `union`,
`intersection` etc. to SIMD instructions, which end up being ~5x faster
that the original version, and 4x faster than the optimised version in
this patch.)
2015-05-05 03:01:29 +00:00
Joseph Crail
464069a4bf Fix spelling errors in documentation. 2015-05-04 13:21:27 -04:00
Huon Wilson
4b46546af0 Make BitVec::process faster (branch free).
This makes the `bit::vec::bench::bench_bit_vec_big_union` benchmark go
from `774 ns/iter (+/- 190)` to `602 ns/iter (+/- 5)`.

(There's room for more work here too: if one can guarantee 128-bit
alignment for the vector, the compiler actually optimises `union`,
`intersection` etc. to SIMD instructions, which end up being ~5x faster
that the original version, and 4x faster than the optimised version in
this patch.)
2015-05-04 21:20:10 +10:00
Nick Hamann
51463c3b17 Improve std::vec module documentation.
This changes the std::vec module docs to use full sentences. It also adds an example
for indexing vectors.
2015-05-03 23:47:10 -05:00
bors
6517a0e90e Auto merge of #25047 - sinkuu:vec_intoiter_override, r=alexcrichton
Override methods `count`, `last`, and `nth` in vec::IntoIter.

#24214
2015-05-04 04:05:37 +00:00
bors
07915ef6a1 Auto merge of #25064 - tshepang:brevity, r=alexcrichton 2015-05-03 07:08:13 +00:00
Tshepang Lekhonkhobe
78c1ae2791 doc: make concat() and connect() examples brief 2015-05-03 05:27:36 +02:00
sinkuu
5d8431c203 Override Iterator::count method in vec::IntoIter 2015-05-02 17:05:43 +09:00
bors
700b4c160b Auto merge of #25028 - bluss:drain-string, r=alexcrichton
collections: Implement String::drain(range) according to RFC 574

`.drain(range)` is unstable and under feature(collections_drain).

This adds a safe way to remove any range of a String as efficiently as
possible.

As noted in the code, this drain iterator has none of the memory safety
issues of the vector version.

RFC tracking issue is #23055
2015-05-02 04:35:33 +00:00
bors
f6574c5b04 Auto merge of #25006 - alexcrichton:unstable-indexing, r=aturon
These implementations were intended to be unstable, but currently the stability
attributes cannot handle a stable trait with an unstable `impl` block. This
commit also audits the rest of the standard library for explicitly-`#[unstable]`
impl blocks. No others were removed but some annotations were changed to
`#[stable]` as they're defacto stable anyway.

One particularly interesting `impl` marked `#[stable]` as part of this commit
is the `Add<&[T]>` impl for `Vec<T>`, which uses `push_all` and implicitly
clones all elements of the vector provided.

Closes #24791

[breaking-change]
2015-05-01 22:54:09 +00:00