segvec

Crates.iosegvec
lib.rssegvec
version0.2.0
sourcesrc
created_at2021-06-30 04:04:04.891009
updated_at2023-07-31 04:35:45.2254
descriptionSegVec data structure for rust. Similar to Vec, but allocates memory in chunks of increasing size
homepage
repositoryhttps://github.com/mccolljr/segvec/
max_upload_size
id416501
size104,746
Jacob McCollum (mccolljr)

documentation

README

segvec

docs.rs crates.io

This crate provides the SegVec data structure.

It is similar to Vec, but allocates memory in chunks of increasing size, referred to as "segments". This involves a few trade-offs:

Pros:

  • Element addresses are stable across push operations even if the SegVec must grow.
  • Resizing only allocates the additional space needed, and doesn't require copying.

Cons:

  • Operations are slower (some, like insert, remove, and drain, are much slower) for a SegVec than for a Vec (multiple pointer dereferences, mapping indices to (segment, offset) pairs)
  • Direct slicing is unavailable (i.e. no &[T] or &mut [T]), though slice and slice_mut are available

Use Cases

  1. You have a long-lived Vec whose size fluctuates between very large and very small throughout the life of the program.
  2. You have a large append-only Vec and would benefit from stable references to the elements

Features

  • small-vec - Uses SmallVec instead of Vec to store the list of segments, allowing the first few segment headers to live on the stack. Can speed up access for small SegVec values.
  • thin-segments - Uses ThinVec instead of Vec to store the data for each segment, meaning that each segment header takes up the space of a single usize, rathern than 3 when using Vec.

License: MIT

Commit count: 60

cargo fmt