2020-09-28 13:21:31 +00:00
|
|
|
package org.capnproto;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Iterator;
|
|
|
|
import java.util.function.Consumer;
|
|
|
|
|
|
|
|
abstract class ImportTable<T> implements Iterable<T> {
|
|
|
|
|
|
|
|
private final HashMap<Integer, T> slots = new HashMap<>();
|
|
|
|
|
2020-10-15 16:41:12 +00:00
|
|
|
protected abstract T newImportable(int id);
|
2020-09-28 13:21:31 +00:00
|
|
|
|
|
|
|
public T put(int id) {
|
2020-10-15 16:41:12 +00:00
|
|
|
return this.slots.computeIfAbsent(id, key -> newImportable(id));
|
2020-09-28 13:21:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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<T> iterator() {
|
|
|
|
return slots.values().iterator();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void forEach(Consumer<? super T> action) {
|
|
|
|
slots.values().forEach(action);
|
|
|
|
}
|
|
|
|
}
|