Packages

An Elixir digraph inspired local Graph DB

Current section

Files

Jump to
thoth lib sync.ex
Raw

lib/sync.ex

defmodule Thoth.Sync do
defp limited_filter([], _, _) do
[]
end
defp limited_filter(_, 0, _) do
[]
end
defp limited_filter([first|rest], limit, fun) do
if fun.(first) do
[first|limited_filter(rest, limit - 1, fun)]
else
limited_filter(rest, limit, fun)
end
end
defp finder(graph, vtype, filter, filterer) do
filterer.(:digraph.vertices(graph), fn vid ->
case :digraph.vertex(graph, vid) do
{^vid, %{type: ^vtype}=n} -> filter.(n)
_ -> false
end
end)
end
def find(graph, vtype, filter) when is_function(filter, 1) do
finder(graph, vtype, filter, &Enum.filter/2)
end
def find(graph, vtype, filter, limit) when is_function(filter, 1) do
finder(graph, vtype, filter, fn (enum, ftr) -> limited_filter(enum, limit, ftr) end)
end
def find(graph, vtype) do
find(graph, vtype, fn _ -> true end)
end
end