Packages
cubdb
0.1.4
2.0.2
2.0.1
2.0.0
2.0.0-rc.1
1.1.0
1.0.0
1.0.0-rc.10
1.0.0-rc.9
1.0.0-rc.8
1.0.0-rc.7
1.0.0-rc.6
1.0.0-rc.5
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A pure-Elixir embedded key-value database
Current section
Files
Jump to
Current section
Files
lib/cubdb/btree/diff.ex
defmodule CubDB.Btree.Diff do
@moduledoc false
@enforce_keys [:from_btree, :to_btree]
defstruct from_btree: nil, to_btree: nil
alias CubDB.Btree
alias CubDB.Btree.Diff
@type t :: %Diff{from_btree: Btree.t(), to_btree: Btree.t()}
@spec new(Btree.t(), Btree.t()) :: t
def new(from_btree, to_btree) do
%Diff{from_btree: from_btree, to_btree: to_btree}
end
end
defimpl Enumerable, for: CubDB.Btree.Diff do
alias CubDB.Btree
alias CubDB.Store
alias CubDB.Btree.Diff
@value Btree.__value__()
@deleted Btree.__deleted__()
def reduce(%Diff{from_btree: %Btree{root_loc: root_loc}, to_btree: to_btree}, cmd_acc, fun) do
Btree.Enumerable.reduce(to_btree, cmd_acc, fun, &get_children(root_loc, &1, &2))
end
def count(_), do: {:error, __MODULE__}
def member?(%Diff{}, _), do: {:error, __MODULE__}
def slice(_), do: {:error, __MODULE__}
defp get_children(_, value = {@value, _}, _), do: value
defp get_children(_, @deleted, _), do: @deleted
defp get_children(from_root_loc, {_, locs}, store) do
locs
|> Enum.filter(fn
{_, loc} -> loc > from_root_loc
end)
|> Enum.map(fn {k, loc} ->
{k, Store.get_node(store, loc)}
end)
end
end