slice_queue 0.3.2

This library provides an VecQueue for efficient working with (byte-)slices
Documentation

License License Travis CI AppVeyor CI

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 the deref()-call to the underlying Vec<T> (can be disabled; see Feature-Gates)
  • access it using the io::Read and io::Write traits
  • "split" it into R/W-halves using the ReadableSliceQueue<T> and WriteableSliceQueue<T> traits or the io::Read and io::Write traits

Feature-Gates

  • deref: This feature allows you to deref the SliceQueue<T> by propagating any deref()-call to the underlying Vec<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 for Copy-types like u8, 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 safe Vec-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).