package com.koushikdutta.async.future;
public class SimpleCancelable implements DependentCancellable {
boolean complete;
@Override
public boolean isDone() {
return complete;
}
public boolean setComplete() {
synchronized (this) {
if (canceled)
return false;
complete = true;
}
return true;
}
@Override
public boolean cancel() {
synchronized (this) {
if (complete)
return false;
if (canceled)
return true;
canceled = true;
}
if (parent != null)
parent.cancel();
return true;
}
boolean canceled;
Cancellable parent;
@Override
public Cancellable getParent() {
return parent;
}
@Override
public void setParent(Cancellable parent) {
this.parent = parent;
}
@Override
public boolean isCancelled() {
return canceled || (parent != null && parent.isCancelled());
}
public static final Cancellable COMPLETED = new SimpleCancelable() {
{
setComplete();
}
};
}