steady_vector
steady_vector - Persistent Vector for Erlang and Elixir
Description
steady_vector
is an array-like collection of values optimized for tail growth and shrinkage. It's heavily based on Dmitry Kakurin's PersistentVector implementation for Elixir and, other than for some idiomatic changes and a few new functions, steady_vector
's interface is conceptually very similar.
steady_vector
optimizes the following operations:
- Get element count
- Lookup element by index (0-based)
- Update element by index (0-based)
- Adding new element to the end
- Removing element from the end
- Enumeration
- Mapping
- Folding (left and right)
Get count operation is O(1)
, most others are O(log32(N))
.
steady_vector
is implemented as a tree with 32-way branching at each level and uses structural sharing for updates.
All ideas are borrowed directly from PersistentVector
, which in turn borrowed them from Clojure.
Installation (Erlang)
Add steady_vector
to your list of dependencies in rebar.config
:
{deps,
[{steady_vector, "1.0.1"}
]}.
And then run rebar3 compile
Installation (Elixir)
Add steady_vector
to your list of dependencies in mix.exs
:
def deps do
[
{:steady_vector, "1.0.1"}
]
end
And then run mix deps.get
Requirements
The library has been tested on Erlang/OTP versions 17.5, 18.3, 19.{0..3}, and 20.{0..1}. The supported build tool is rebar3
.
More info
See benchmarks.
See API reference indexed below.
Modules
steady_vector |