### 7 stable releases

Uses old Rust 2015

1.2.4 | Aug 4, 2021 |
---|---|

1.2.3 | Mar 15, 2021 |

1.2.2 | Nov 21, 2019 |

1.2.1 | Jul 31, 2019 |

1.1.0 | Oct 17, 2018 |

#**1777** in Data structures

**12,196** downloads per month

Used in **13** crates
(2 directly)

**Apache-2.0/MIT**

28KB

506 lines

# PackedVec

A

stores vectors of integers
efficiently while providing an API similar to `PackedVec`

. The basic idea is to store
each element using the minimum number of bits needed to represent every element
in the `Vec`

. For example, if we have a `Vec`

with elements [20, 30, 140],
every element wastes most of its 64 bits: 7 bits is sufficient to represent the
range of elements in the vector. Given this input vector, `Vec``<``u64``>`

stores
each elements using exactly 7 bits, saving substantial memory. For vectors which
often contain small ranges of numbers, and which are created rarely, but read
from frequently, this can be a significant memory and performance win.`PackedVec`

# Examples

has two main API differences from `PackedVec`

: a `Vec`

is created
from a `PackedVec`

; and a `Vec`

returns values rather than references. Both
points can be seen in this example:`PackedVec`

`use` `packedvec``::`PackedVec`;`
`let` v `=` `vec!``[``-``1``,` `30``,` `120``]``;`
`let` pv `=` `PackedVec``::`new`(`v`.``clone``(``)``)``;`
`assert_eq!``(`pv`.``get``(``0``)``,` `Some``(``-``1``)``)``;`
`assert_eq!``(`pv`.``get``(``2``)``,` `Some``(``120``)``)``;`
`assert_eq!``(`pv`.``get``(``3``)``,` `None``)``;`
`assert_eq!``(`v`.``iter``(``)``.``cloned``(``)``.``collect``::``<``Vec``<``_``>``>``(``)``,` pv`.``iter``(``)``.``collect``::``<``Vec``<``_``>``>``(``)``)``;`

#### Dependencies

~94–315KB