package org.jerlang.stdlib.ets;
import java.util.Collection;
import java.util.concurrent.ConcurrentHashMap;
import org.jerlang.type.Atom;
import org.jerlang.type.Term;
public class TableRegistry {
private static final TableRegistry INSTANCE = new TableRegistry();
private ConcurrentHashMap<Term, Table> id2table;
private ConcurrentHashMap<Atom, Table> name2table;
private TableRegistry() {
id2table = new ConcurrentHashMap<>();
name2table = new ConcurrentHashMap<>();
}
public static Table lookup(Term tab) {
if (tab instanceof Atom) {
return INSTANCE.name2table.get(tab);
} else {
return INSTANCE.id2table.get(tab);
}
}
public static void register(Table table) {
INSTANCE.id2table.put(table.id(), table);
if (table.named_table()) {
INSTANCE.name2table.put(table.name(), table);
}
}
public static Collection<Table> tables() {
return INSTANCE.id2table.values();
}
public static void unregister(Table table) {
INSTANCE.id2table.remove(table.id());
if (table.named_table()) {
INSTANCE.name2table.remove(table.name());
}
}
}