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

112 lines
2.0 KiB
Java
Raw Normal View History

2020-11-10 22:37:49 +01:00
package org.warp.commonutils.type;
2020-11-10 23:43:17 +01:00
import it.unimi.dsi.fastutil.objects.ObjectSet;
2020-11-10 22:37:49 +01:00
import java.util.Optional;
public final class SynchronizedBiAssociation<T, U> implements BiAssociation<T, U> {
2020-11-10 22:37:49 +01:00
private final BiAssociation<T,U> association;
private final Object lock;
SynchronizedBiAssociation(BiAssociation<T, U> association) {
2020-11-10 22:37:49 +01:00
this.association = association;
this.lock = new Object();
}
SynchronizedBiAssociation(BiAssociation<T, U> association, Object lock) {
2020-11-10 22:37:49 +01:00
this.association = association;
this.lock = lock;
}
@Override
public Optional<U> 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<U> unlink(T src) {
synchronized (lock) {
return association.unlink(src);
}
}
@Override
public Optional<T> 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<U> getLink(T src) {
synchronized (lock) {
return association.getLink(src);
}
}
@Override
public Optional<T> 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();
}
}
2020-11-10 23:43:17 +01:00
@Override
public ObjectSet<T> getSources() {
synchronized (lock) {
return association.getSources();
}
}
@Override
public ObjectSet<U> getDestinations() {
synchronized (lock) {
return association.getDestinations();
}
}
2020-11-10 22:37:49 +01:00
}