17 releases
Uses old Rust 2015
0.3.2 | Sep 9, 2018 |
---|---|
0.3.1 | Sep 9, 2018 |
0.2.2 | Aug 16, 2018 |
0.1.10 | Aug 16, 2018 |
#64 in #amount
33 downloads per month
33KB
375 lines
slice_queue
Welcome to my slice_queue
-library 🎊
About This Library
This library provides a optimized queue for efficient working with (byte-)slices. It allows you to
- efficiently push an arbitrary amount of elements to the back by either consuming them or by cloning/copying them from
a slice (if the type supports the
Clone
/Copy
trait) - communicate and enforce a limit on the amount of elements to store
- efficiently pop an arbitrary amount of elements from the front (optionally into a slice to avoid uneccessary reallocations)
- access the underlying buffer directly by using (range-)indices
- dereference the
SliceQueue<T>
by propagating thederef()
-call to the underlyingVec<T>
(can be disabled; see Feature-Gates) - access it using the
io::Read
andio::Write
traits - "split" it into R/W-halves using the
ReadableSliceQueue<T>
andWriteableSliceQueue<T>
traits or theio::Read
andio::Write
traits
Feature-Gates
deref
: This feature allows you to deref theSliceQueue<T>
by propagating anyderef()
-call to the underlyingVec<T>
(which usually results in a slice). Because in some projects this could be considered as "bad practice", it is possible to disable this behaviour. This feature is enabled by default.unsafe_fast_code
: Because the main goal of this library is performance, we use raw pointer access and manual memory management in some places. Especially forCopy
-types likeu8
, this improves the performance dramatically. Since this requires unsafe code which may be not acceptible in your case, it is possible to replace the unsafe code with safeVec
-operations by disabling this feature. This feature is enabled by default.
Build Documentation and Library:
To build and open the documentation, go into the project's root-directory and run cargo doc --release --open
To build this library, change into the projects root-directory and run cargo build --release
(or
cargo build --release --features ...
to manually specify the features to use); you can find the build in
target/release
.
If you use this library for the first time or after an update, we recomment you to run cargo test --release
(or
cargo test --release --features ...
to manually specify the features to use).