1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
defmodule Util do
def plusminus(number) when number > 0, do: "+#{number}"
def plusminus(0), do: "0"
def plusminus(number) when number < 0, do: "#{number}"
def float_paparse(string) do
string
|> String.replace(",", ".")
|> Float.parse()
end
def ets_mutate_select_each(ets, table, spec, fun) do
ets.safe_fixtable(table, true)
first = ets.select(table, spec, 1)
do_ets_mutate_select_each(ets, table, fun, first)
after
ets.safe_fixtable(table, false)
end
defp do_ets_mutate_select_each(_, _, _, :'$end_of_table') do
:ok
end
defp do_ets_mutate_select_each(ets, table, fun, {objs, continuation}) do
for obj <- objs, do: fun.(table, obj)
do_ets_mutate_select_each(ets, table, fun, ets.select(continuation))
end
def ets_mutate_each(ets, table, fun) do
ets.safe_fixtable(table, true)
first = ets.first(table)
do_ets_mutate_each(ets, table, fun, first)
after
ets.safe_fixtable(table, false)
end
defp do_ets_mutate_each(ets, table, fun, key) do
case ets.lookup(table, key) do
[elem] -> fun.(table, elem)
_ -> nil
end
do_ets_mutate_each(ets, table, fun, ets.next(table, key))
end
end
|