Packages
horde
0.8.7
0.10.0
0.9.1
0.9.0
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.8.0-rc.1
0.7.1
0.7.0
0.6.1
0.6.0
0.6.0-rc.1
0.5.0
0.5.0-rc.12
0.5.0-rc.11
0.5.0-rc.10
0.5.0-rc.9
0.5.0-rc.8
0.5.0-rc.7
0.5.0-rc.6
0.5.0-rc.5
0.5.0-rc.4
0.5.0-rc.3
0.5.0-rc.2
0.5.0-rc.1
0.4.0-rc.2
0.4.0-rc.1
0.3.0
0.3.0-rc1
0.2.3
0.2.2
0.2.1
0.2.0
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Distributed supervisor & process registry built with DELTA-CRDTs
Current section
Files
Jump to
Current section
Files
lib/horde/table_utils.ex
defmodule Horde.TableUtils do
@moduledoc false
def new_table(name) do
:ets.new(name, [:set, :protected])
end
def size_of(table) do
:ets.info(table, :size)
end
def get_item(table, id) do
case :ets.lookup(table, id) do
[{_, item}] -> item
[] -> nil
end
end
def delete_item(table, id) do
:ets.delete(table, id)
table
end
def pop_item(table, id) do
item = get_item(table, id)
delete_item(table, id)
{item, table}
end
def put_item(table, id, item) do
:ets.insert(table, {id, item})
table
end
def all_items_values(table) do
:ets.select(table, [{{:"$1", :"$2"}, [], [:"$2"]}])
end
def any_item(table, predicate) do
try do
:ets.safe_fixtable(table, true)
first_key = :ets.first(table)
ets_any?(table, predicate, first_key)
after
:ets.safe_fixtable(table, false)
end
end
def ets_any?(_table, _predicate, :"$end_of_table") do
false
end
def ets_any?(table, predicate, key) do
entry = get_item(table, key)
if predicate.(entry) do
true
else
ets_any?(table, predicate, :ets.next(table, key))
end
end
end