package org.warp.commonutils.type; import it.unimi.dsi.fastutil.objects.ObjectSet; import java.util.Optional; public final class SynchronizedBiAssociation implements BiAssociation { private final BiAssociation association; private final Object lock; SynchronizedBiAssociation(BiAssociation association) { this.association = association; this.lock = new Object(); } SynchronizedBiAssociation(BiAssociation association, Object lock) { this.association = association; this.lock = lock; } @Override public Optional link(T src, U dest) { synchronized (lock) { return association.link(src, dest); } } @Override public boolean unlink(T src, U dest) { synchronized (lock) { return association.unlink(src, dest); } } @Override public Optional unlink(T src) { synchronized (lock) { return association.unlink(src); } } @Override public Optional unlinkFromSource(U dest) { synchronized (lock) { return association.unlinkFromSource(dest); } } @Override public boolean hasLink(T src) { synchronized (lock) { return association.hasLink(src); } } @Override public boolean hasLinkSource(U dest) { synchronized (lock) { return association.hasLinkSource(dest); } } @Override public boolean hasLink(T src, U dest) { synchronized (lock) { return association.hasLink(src, dest); } } @Override public Optional getLink(T src) { synchronized (lock) { return association.getLink(src); } } @Override public Optional getLinkSource(U dest) { synchronized (lock) { return association.getLinkSource(dest); } } @Override public void clear() { synchronized (lock) { association.clear(); } } @Override public int size() { synchronized (lock) { return association.size(); } } @Override public ObjectSet getSources() { synchronized (lock) { return association.getSources(); } } @Override public ObjectSet getDestinations() { synchronized (lock) { return association.getDestinations(); } } }