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.
Add steady_vector to your list of dependencies in rebar.config:
{deps,
[{steady_vector, "1.0.1"}
]}.
And then run rebar3 compile
Add steady_vector to your list of dependencies in mix.exs:
def deps do
[
{:steady_vector, "1.0.1"}
]
endAnd then run mix deps.get
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.
See benchmarks.
See API reference indexed below.
| steady_vector |
