lib/manx/memref_allocator.ex

defmodule Manx.MemrefAllocator do
  @moduledoc """
  MemrefAllocator is an Agent managing memrefs.
  """
  use Agent

  def start_link(_) do
    Agent.start_link(
      fn -> :ets.new(__MODULE__, [:named_table, :public, read_concurrency: true]) end,
      name: __MODULE__
    )
  end

  def add(memref) do
    :ets.insert(__MODULE__, {memref})
  end

  def delete(memref) do
    found = :ets.lookup(__MODULE__, memref)

    if length(found) >= 1 do
      :ets.delete(__MODULE__, memref)
      :ok
    else
      :already_deallocated
    end
  end
end