package org.capnproto; import java.util.HashMap; import java.util.Iterator; import java.util.function.Consumer; abstract class ImportTable implements Iterable { private final HashMap slots = new HashMap<>(); protected abstract T newImportable(); public T put(int id) { return slots.computeIfAbsent(id, key -> newImportable()); } public T find(int id) { return slots.get(id); } public T erase(int id, T entry) { var removed = slots.remove(id, entry); assert removed; return entry; } public T erase(int id) { return slots.remove(id); } @Override public Iterator iterator() { return slots.values().iterator(); } @Override public void forEach(Consumer action) { slots.values().forEach(action); } }