Skip to main content

lib/duskmoon_bundler/ets.ex

defmodule DuskmoonBundler.ETS do
  @moduledoc "Small helpers for DuskmoonBundler's named ETS tables."

  @doc "Create a public named set table optimized for concurrent reads."
  def create_named_set(table) do
    if :ets.whereis(table) == :undefined do
      :ets.new(table, [:named_table, :set, :public, read_concurrency: true])
    end

    :ok
  end

  @doc "Insert one row into an ETS table and return `:ok`."
  def put(table, row) do
    :ets.insert(table, row)
    :ok
  end

  @doc "Delete one key from an ETS table and return `:ok`."
  def delete(table, key) do
    :ets.delete(table, key)
    :ok
  end

  @doc "Remove all rows from an ETS table and return `:ok`."
  def clear(table) do
    if :ets.whereis(table) == :undefined do
      create_named_set(table)
    else
      :ets.delete_all_objects(table)
    end

    :ok
  end
end