steady_vector
<a name="steadyvector-_Persistent_Vector_for_Erlang_and_Elixir">steady_vector - Persistent Vector for Erlang and Elixir</a>
<a name="Description">Description</a>
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.
<a name="Installation_(Erlang)">Installation (Erlang)</a>
Add steady_vector to your list of dependencies in rebar.config:
{deps,
[{steady_vector, "1.0.0"}
]}.
And then run rebar3 compile
<a name="Installation_(Elixir)">Installation (Elixir)</a>
Add steady_vector to your list of dependencies in mix.exs:
def deps do
[
{:steady_vector, "1.0.0"}
]
end
And then run mix deps.get
<a name="Requirements">Requirements</a>
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.
<a name="More_info">More info</a>
See benchmarks.
See API reference indexed below.
Modules
| steady_vector |