common-utils/src/main/java/org/warp/commonutils/type/SynchronizedMultiAssociatio...

112 lines
2.0 KiB
Java

package org.warp.commonutils.type;
import it.unimi.dsi.fastutil.objects.ObjectSet;
import java.util.Set;
public class SynchronizedMultiAssociation<T, U> implements MultiAssociation<T, U> {
private final MultiAssociation<T, U> association;
private final Object lock;
SynchronizedMultiAssociation(MultiAssociation<T, U> association) {
this.association = association;
this.lock = new Object();
}
SynchronizedMultiAssociation(MultiAssociation<T, U> association, Object lock) {
this.association = association;
this.lock = lock;
}
@Override
public boolean 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 Set<U> unlink(T src) {
synchronized (lock) {
return association.unlink(src);
}
}
@Override
public Set<T> unlinkFromSource(U dest) {
synchronized (lock) {
return association.unlinkFromSource(dest);
}
}
@Override
public boolean hasAnyLink(T src) {
synchronized (lock) {
return association.hasAnyLink(src);
}
}
@Override
public boolean hasAnyLinkSource(U dest) {
synchronized (lock) {
return association.hasAnyLinkSource(dest);
}
}
@Override
public boolean hasLink(T src, U dest) {
synchronized (lock) {
return association.hasLink(src, dest);
}
}
@Override
public Set<U> getLinks(T src) {
synchronized (lock) {
return association.getLinks(src);
}
}
@Override
public Set<T> getLinkSources(U dest) {
synchronized (lock) {
return association.getLinkSources(dest);
}
}
@Override
public void clear() {
synchronized (lock) {
association.clear();
}
}
@Override
public int size() {
synchronized (lock) {
return association.size();
}
}
@Override
public ObjectSet<T> getSources() {
synchronized (lock) {
return association.getSources();
}
}
@Override
public ObjectSet<U> getDestinations() {
synchronized (lock) {
return association.getDestinations();
}
}
}