I tried to write a wrapper for ets with which you can read and write structures in etc, question is: how to make id to be generated automatically
defmodule StructTable do
defstruct id: 0, data: nil
def create_table do
:ets.new(__MODULE__, [:orderedset, :named_table, {:keypos, 1}])
end
def insert_into_table(%__MODULE__{ id: id, data: data}) do
if hd(:ets.lookup(__MODULE__, id)) == false do
:ets.insert(__MODULE__, {id,data})
else IO.puts("already exists")
end
end
def select_data(iid) do
hd(:ets.lookup(__MODULE__, iid))
end
def select_all do
:ets.tab2list(__MODULE__)
end
end
I used :ets.last()
to get the last key and added one to it; if it was an empty table, it gets an id
of 1. Table type is ordered_set
, which sorts keys.
defmodule StructTable do
defstruct id: 0, data: nil
def create_table do
:ets.new(__MODULE__, [:ordered_set, :public, :named_table])
end
def insert_into_table(%__MODULE__{data: data}) do
:ets.insert(__MODULE__, {generate_id(), data})
end
def select_all do
:ets.tab2list(__MODULE__)
end
def generate_id() do
if :ets.tab2list(__MODULE__) == [] do
1
else
(:ets.last(__MODULE__) ) + 1
end
end
def select_data(iid) do
hd(:ets.lookup(__MODULE__, iid))
end
end