YetAnotherMinion and Sean McArthur
d8134903de
feat: remove impl IntoBuf for Cursor<Self>, impl Buf for Bytes, BytesMut, refactor iterators
2019-06-06 16:59:44 -07:00
Sean McArthur
654a11c84c
bump CI minimum Rust to 1.27 for 'dyn' keyword
2019-06-06 14:29:35 -07:00
Sean McArthur
5759211ff8
Merge branch 'v0.4.x' into uplift-0.4-commits
2019-06-06 14:08:29 -07:00
Sean McArthur and Carl Lerche
60aceba2bb
set publish to false, update meta links ( #258 )
2019-06-06 13:58:22 -07:00
Pavel Strakhov and Carl Lerche
d43e283e5e
Panic in BytesMut::split_to when out of bounds ( #252 ) ( #253 )
2019-04-02 16:24:30 -07:00
南浦月 and Carl Lerche
e0e30f00a1
Fix a typo in CHANGELOG.md ( #251 )
2019-03-29 13:54:25 -07:00
Carl Lerche and GitHub
4948b1053b
Bump version to v0.4.12 ( #250 )
v0.4.12
2019-03-06 12:42:20 -08:00
Michal 'vorner' Vaner and Carl Lerche
0e8b440650
Implementation of Buf for VecDeque ( #249 )
2019-03-06 11:46:42 -08:00
Sangguk Lee and Carl Lerche
e13d2a783e
Use constants in bytes.rs test code ( #247 )
2019-02-27 10:41:11 -08:00
南浦月 and Carl Lerche
55dfea8c18
Impl FromIterator<&'a u8> for BytesMut/Bytes ( #244 )
2019-01-30 11:05:15 -08:00
Dax Huiberts and Carl Lerche
f3b363a385
Fix typo in bytes.rs ( #243 )
2019-01-28 10:06:28 -08:00
Ralf Jung and Carl Lerche
42b669690a
use raw ptr for potentially racy load ( #240 )
2018-12-21 11:07:20 -08:00
Ralf Jung and Carl Lerche
9504447adc
Be clear about Inner::kind being deliberate UB ( #236 )
2018-11-25 22:49:35 -08:00
Carl Lerche and GitHub
b3248c8807
Bump version to v0.4.11 ( #235 )
v0.4.11
2018-11-17 14:33:25 -08:00
Ralf Jung and Carl Lerche
c6c5b8fb54
Use raw pointers for potentially racy loads ( #233 )
...
Shared references assert immutability, so any concurrent access would be UB
disregarding data race concerns.
2018-11-17 07:51:50 -08:00
Michal 'vorner' Vaner and Carl Lerche
7c3085aaec
The Reader can implement BufReader naturally ( #232 )
...
There's no reason the user should be forced to wrap it in BufReader in
case the trait is needed, because the Reader has all the bits for
supporting it naturally.
2018-11-17 07:51:41 -08:00
Michal 'vorner' Vaner and Carl Lerche
e64a123d00
Bring more attention to short reads/slices on Buff/BuffMut ( #231 )
...
The property the Buff and BuffMut can return shorter slice is quite an
important detail. Nevertheless, while it is mentioned in the
documentation, the wording makes it relatively easy to overlook. This
tries to bring more attention to it.
2018-11-17 07:51:28 -08:00
Carl Lerche and GitHub
e5304410a4
Whitelist false positive std ( #234 )
2018-11-17 07:27:00 -08:00
Carl Lerche and GitHub
456221d165
Bump version to v0.4.10 ( #227 )
v0.4.10
2018-09-04 13:31:26 -07:00
Carl Lerche and GitHub
f09c51c34e
White list allocation ( #226 )
2018-09-03 13:36:13 -07:00
Carl Lerche and GitHub
ad35fbef03
implement Buf and BufMut for Either ( #225 )
2018-09-03 10:23:00 -07:00
Federico Mena Quintero and Carl Lerche
79f05591c9
Add a subslice function for Bytes ( #198 ) ( #208 )
...
This lets us take Bytes and a &[u8] slice that is contained in it, and
create a new Bytes that corresponds to that subset slice.
Closes #198
2018-09-01 19:57:31 -07:00
Carl Lerche and GitHub
ed244d3b54
Bump version to v0.4.9 ( #220 )
v0.4.9
2018-07-22 19:30:41 -07:00
Carl Lerche
dc961c3e78
Merge branch 'v0.4.x'
2018-07-12 20:19:56 -07:00
Sean McArthur and Carl Lerche
890812af1b
inline Bytes::len and Bytes::is_empty ( #211 )
2018-07-12 20:17:27 -07:00
Rafael Ávila de Espíndola and Carl Lerche
052648c3f5
Implement IntoBuf for mut slices. ( #214 )
...
With this if foo is a mutable slice, it is possible to do
foo.into_buf().put_u32_le(42);
Before this patch into_buf would create a Cursor<&'a [u8]> and it
would not be possible to write into it.
2018-07-12 20:16:08 -07:00
Roman and Carl Lerche
042aa9023b
Fix cargo doc error on nightly caused by broken link to footnote ( #218 )
2018-07-12 20:15:53 -07:00
Carl Lerche
f4100841f8
Merge branch 'v0.4.x'
2018-07-12 20:11:51 -07:00
Sean McArthur and Carl Lerche
cdfd25f314
inline Bytes::len and Bytes::is_empty ( #211 )
2018-07-12 19:05:35 -07:00
Geoffry Song and Carl Lerche
1ba5266bd9
Put type names in backticks. ( #212 )
...
I noticed that the bare `[u8]` made rustdoc nightly unhappy.
2018-07-12 19:05:02 -07:00
Rafael Ávila de Espíndola and Carl Lerche
83f68a013e
Implement IntoBuf for mut slices. ( #214 )
...
With this if foo is a mutable slice, it is possible to do
foo.into_buf().put_u32_le(42);
Before this patch into_buf would create a Cursor<&'a [u8]> and it
would not be possible to write into it.
2018-07-12 19:03:47 -07:00
Roman and Carl Lerche
63211d8c82
Fix cargo doc error on nightly caused by broken link to footnote ( #218 )
2018-07-05 10:13:01 -07:00
Sean McArthur and Carl Lerche
886dda0962
Optimize Inner::shallow_clone ( #217 )
...
- Clones when the kind is INLINE or STATIC are sped up by over double.
- Clones when the kind is ARC are spec up by about 1/3.
2018-07-03 15:21:26 -07:00
luben karavelov and Carl Lerche
6414efe83b
Fix documentation ( #219 )
2018-07-02 12:10:16 -07:00
Ashley Mannix and Carl Lerche
7785cde587
add support for 128bit numbers ( #209 )
2018-06-18 17:37:51 -07:00
Carl Lerche
d98f49e67b
Merge branch 'v0.4.x'
2018-06-18 12:52:00 -07:00
Carl Lerche and GitHub
a6b9844296
Clarify license as MIT ( #216 )
...
The intent of the license was to dual license MIT & Apache 2.0. However,
the messaging was copy / pasted from rust-lang.
Clarify the license as exclusively MIT.
Fixes #215
2018-06-18 12:49:34 -07:00
Carl Lerche
8d5b46cd10
Merge branch 'v0.4.x'
2018-05-25 16:56:31 -07:00
Carl Lerche and GitHub
406b048ae6
Bump version to v0.4.8 ( #206 )
v0.4.8
2018-05-25 16:50:42 -07:00
Carl Lerche
8c041142a0
Filter out tsan warnings in test harness ( #205 )
2018-05-25 15:54:13 -07:00
Carl Lerche and GitHub
3557bafa5c
Filter out tsan warnings in test harness ( #205 )
2018-05-25 15:32:39 -07:00
Carl Lerche
c87739bb55
Merge branch 'v0.4.x'
2018-05-25 14:15:00 -07:00
Luke Horsley and Carl Lerche
e9a7098658
Added a resize function for BytesMut ( #203 )
2018-05-25 13:54:32 -07:00
Carl Lerche and GitHub
32ea8281b3
Use sanitizers in CI ( #204 )
2018-05-25 12:40:37 -07:00
Noah Zentzis and Carl Lerche
dfce95b89d
Recycle space when reserving from Vec-backed Bytes ( #197 )
...
* Recycle space when reserving from Vec-backed Bytes
BytesMut::reserve, when called on a BytesMut instance which is backed by
a non-shared Vec<u8>, would previously just delegate to Vec::reserve
regardless of the current location in the buffer. If the Bytes is
actually the trailing component of a larger Vec, then the unused space
won't be recycled. In applications which continually move the pointer
forward to consume data as it comes in, this can cause the underlying
buffer to get extremely large.
This commit checks whether there's extra space at the start of the
backing Vec in this case, and reuses the unused space if possible
instead of allocating.
* Avoid excessive copying when reusing Vec space
Only reuse space in a Vec-backed Bytes when doing so would gain back
more than half of the current capacity. This avoids excessive copy
operations when a large buffer is almost (but not completely) full.
2018-05-24 16:37:13 -07:00
Noah Zentzis and Carl Lerche
2d95683bd5
Recycle space when reserving from Vec-backed Bytes ( #197 )
...
* Recycle space when reserving from Vec-backed Bytes
BytesMut::reserve, when called on a BytesMut instance which is backed by
a non-shared Vec<u8>, would previously just delegate to Vec::reserve
regardless of the current location in the buffer. If the Bytes is
actually the trailing component of a larger Vec, then the unused space
won't be recycled. In applications which continually move the pointer
forward to consume data as it comes in, this can cause the underlying
buffer to get extremely large.
This commit checks whether there's extra space at the start of the
backing Vec in this case, and reuses the unused space if possible
instead of allocating.
* Avoid excessive copying when reusing Vec space
Only reuse space in a Vec-backed Bytes when doing so would gain back
more than half of the current capacity. This avoids excessive copy
operations when a large buffer is almost (but not completely) full.
2018-05-24 14:50:31 -07:00
Carl Lerche
b68fa46e3d
Fix panic in FromIterator for BytesMut
2018-05-11 08:45:04 -07:00
Carl Lerche
ef09e98fbc
Bump version to v0.4.7
v0.4.7
2018-04-27 10:51:09 -07:00
Carl Lerche
d656d37180
Merge branch 'v0.4.x'
2018-04-27 10:42:00 -07:00
kohensu and Carl Lerche
51e435b7e0
Improve performance of Buf::get_*() ( #195 )
...
The new implementation tries to get the data directly from bytes() (this is
possible most of the time) and if there is not enough data in bytes() use the
previous code: copy the needed bytes in a temporary buffer before returning
the data
Here the bench results:
Before After x-faster
get_f32::cursor 64 ns/iter (+/- 0) 20 ns/iter (+/- 0) 3.2
get_f32::tbuf_1 77 ns/iter (+/- 1) 34 ns/iter (+/- 0) 2.3
get_f32::tbuf_1_costly 87 ns/iter (+/- 0) 62 ns/iter (+/- 0) 1.4
get_f32::tbuf_2 151 ns/iter (+/- 18) 160 ns/iter (+/- 1) 0.9
get_f32::tbuf_2_costly 180 ns/iter (+/- 2) 187 ns/iter (+/- 2) 1.0
get_f64::cursor 67 ns/iter (+/- 0) 21 ns/iter (+/- 0) 3.2
get_f64::tbuf_1 80 ns/iter (+/- 0) 35 ns/iter (+/- 0) 2.3
get_f64::tbuf_1_costly 82 ns/iter (+/- 3) 60 ns/iter (+/- 0) 1.4
get_f64::tbuf_2 154 ns/iter (+/- 1) 164 ns/iter (+/- 0) 0.9
get_f64::tbuf_2_costly 170 ns/iter (+/- 2) 187 ns/iter (+/- 1) 0.9
get_u16::cursor 66 ns/iter (+/- 0) 20 ns/iter (+/- 0) 3.3
get_u16::tbuf_1 77 ns/iter (+/- 0) 35 ns/iter (+/- 0) 2.2
get_u16::tbuf_1_costly 85 ns/iter (+/- 2) 62 ns/iter (+/- 0) 1.4
get_u16::tbuf_2 147 ns/iter (+/- 0) 154 ns/iter (+/- 0) 1.0
get_u16::tbuf_2_costly 160 ns/iter (+/- 1) 177 ns/iter (+/- 0) 0.9
get_u32::cursor 64 ns/iter (+/- 0) 20 ns/iter (+/- 0) 3.2
get_u32::tbuf_1 77 ns/iter (+/- 0) 35 ns/iter (+/- 0) 2.2
get_u32::tbuf_1_costly 91 ns/iter (+/- 2) 63 ns/iter (+/- 0) 1.4
get_u32::tbuf_2 151 ns/iter (+/- 40) 157 ns/iter (+/- 0) 1.0
get_u32::tbuf_2_costly 162 ns/iter (+/- 0) 180 ns/iter (+/- 0) 0.9
get_u64::cursor 67 ns/iter (+/- 0) 20 ns/iter (+/- 0) 3.4
get_u64::tbuf_1 78 ns/iter (+/- 0) 35 ns/iter (+/- 1) 2.2
get_u64::tbuf_1_costly 87 ns/iter (+/- 1) 59 ns/iter (+/- 1) 1.5
get_u64::tbuf_2 154 ns/iter (+/- 0) 160 ns/iter (+/- 0) 1.0
get_u64::tbuf_2_costly 168 ns/iter (+/- 0) 184 ns/iter (+/- 0) 0.9
get_u8::cursor 64 ns/iter (+/- 0) 19 ns/iter (+/- 0) 3.4
get_u8::tbuf_1 77 ns/iter (+/- 0) 35 ns/iter (+/- 0) 2.2
get_u8::tbuf_1_costly 68 ns/iter (+/- 0) 51 ns/iter (+/- 0) 1.3
get_u8::tbuf_2 85 ns/iter (+/- 0) 43 ns/iter (+/- 0) 2.0
get_u8::tbuf_2_costly 75 ns/iter (+/- 0) 61 ns/iter (+/- 0) 1.2
get_u8::option 77 ns/iter (+/- 0) 59 ns/iter (+/- 0) 1.3
Improvement on the basic std::Cursor implementation are clearly visible.
Other implementations are specific to the bench tests and just map a static
slice. Different variant are:
- tbuf_1: only one call of 'bytes()' is needed.
- tbuf_2: two calls of 'bytes()' is needed to read more than one byte.
- _costly version are implemented with #[inline(never)] on 'bytes()',
'remaining()' and 'advance()'.
The cases that are slower (slightly) correspond to implementations that are not
really realistic: more than one byte is never possible in one time
2018-04-27 10:18:52 -07:00