Skip to main content

Crate segvec

Crate segvec 

Source
Expand description

This crate provides the SegVec data structure.

It is similar to Vec, but allocates memory in chunks, 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) than for a Vec due to the need for multiple pointer dereferences and conversion between linear indexes and (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.

Modules§

detail

Structs§

Drain
Removes and returns elements from a range in a SegVec. Any un-consumed elements are removed and dropped when a Drain is dropped. If a Drain is forgotten (via std::mem::forget), it is unspecified how many elements are removed. The current implementation calls SegVec::remove on a single element on each call to next.
Exponential
Exponential growth, each subsequent segment is as big as the sum of all segments before.
IntoIter
Consuming iterator over items in a SegVec.
Iter
Iterator over immutable references to items in a SegVec.
Linear
Linear growth, all segments have the same (FACTOR) length.
Proportional
Proportional growth, each segment is segment_number*FACTOR sized.
SegVec
A data structure similar to Vec, but that does not copy on re-size and can release memory when it is truncated.
SegmentedIter
Iterator over immutable references to slices of the elements of a Slice.
SegmentedMutIter
Iterator over mutable references to slices of the elements of a SliceMut.
Slice
Provides an immutable view of elements from a range in SegVec.
SliceIter
Iterator over immutable references to the elements of a Slice.
SliceMut
Provides a mutable view of elements from a range in SegVec.
SliceMutIter
Iterator over immutable references to the elements of a SliceMut.

Traits§

MemConfig
Configures the sizes of segments and how to index entries. Linear, Proportional and Exponential implement this trait.