Stepan Koltsov b78bb3baaa Handle corner cases of Bytes::split_{off,to} (#87)
Before this commit `Bytes::split_{off,to}` always created a shallow copy if `self` is arc or vec.

However, in certain cases `split_off` or `split_to` is called with `len` or `0` parameter. E. g. if you are reading a frame from buffered stream, it is likely that buffer contains exactly the frame size bytes, so `split_to` will be called with `len` param.

Although, `split_off` and `split_to` functions are `O(1)`, shallow copy have downsides:

* shallow copy on vector does malloc and atomic cmpxchg
* after shallow copy, following operations (e. g. `drop`) on both `bytes` objects require atomics
* memory will be probably released to the system later
* `try_mut` will fail
* [into_vec](https://github.com/carllerche/bytes/issues/86) will copy
2017-03-27 20:45:22 -07:00
2015-01-30 00:04:33 -08:00
2017-03-20 10:12:23 -07:00
2017-03-15 09:36:52 -07:00
2017-03-15 09:36:52 -07:00
2017-02-20 14:31:26 -08:00
2017-02-20 14:31:26 -08:00
2017-02-20 14:33:35 -08:00

Bytes

A utility library for working with bytes.

Crates.io Build Status

Documentation

Usage

To use bytes, first add this to your Cargo.toml:

[dependencies]
bytes = "0.4"

Next, add this to your crate:

extern crate bytes;

use bytes::{Bytes, BytesMut, Buf, BufMut};

License

bytes is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), with portions covered by various BSD-like licenses.

See LICENSE-APACHE, and LICENSE-MIT for details.

S
Description
工具库用于操作字节
Readme MIT 1.5 MiB
Languages
Rust 99.3%
Shell 0.7%