X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.graphviz%2Fsrc%2Forg%2Fsimantics%2Fgraphviz%2Fcontinuation%2FComputation.java;h=a2c4e133d2eb0b0b47f7e5b14ee38ddc5d91e30a;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=c99ece35379f2a97d3020a40b823b1d8e8377c2c;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.graphviz/src/org/simantics/graphviz/continuation/Computation.java b/bundles/org.simantics.graphviz/src/org/simantics/graphviz/continuation/Computation.java index c99ece353..a2c4e133d 100644 --- a/bundles/org.simantics.graphviz/src/org/simantics/graphviz/continuation/Computation.java +++ b/bundles/org.simantics.graphviz/src/org/simantics/graphviz/continuation/Computation.java @@ -1,66 +1,66 @@ -package org.simantics.graphviz.continuation; - -import java.util.ArrayList; -import java.util.concurrent.CancellationException; -import java.util.concurrent.CountDownLatch; - -public abstract class Computation { - T result; - Exception exception; - ArrayList> continuations = new ArrayList>(); - CountDownLatch doneGate = new CountDownLatch(1); - - public void addContinuation(Continuation continuation) { - synchronized(doneGate) { - if(doneGate.getCount() == 0) { - if(exception == null) - continuation.succeeded(result); - else - continuation.failed(exception); - } - else - continuations.add(continuation); - } - } - - public boolean isDone() { - return doneGate.getCount() == 0; - } - - protected void failWith(Exception exception) { - this.exception = exception; - ArrayList> cs; - synchronized (doneGate) { - cs = this.continuations; - this.continuations = null; - doneGate.countDown(); - } - if(cs != null) - for(Continuation continuation : cs) - continuation.failed(exception); - } - - protected void doneWith(T result) { - this.result = result; - ArrayList> cs; - synchronized (doneGate) { - cs = this.continuations; - this.continuations = null; - doneGate.countDown(); - } - if(cs != null) - for(Continuation continuation : cs) - continuation.succeeded(result); - } - - public void cancel() { - failWith(new CancellationException()); - } - - public T get() throws Exception { - doneGate.await(); - if(exception != null) - throw exception; - return result; - } -} +package org.simantics.graphviz.continuation; + +import java.util.ArrayList; +import java.util.concurrent.CancellationException; +import java.util.concurrent.CountDownLatch; + +public abstract class Computation { + T result; + Exception exception; + ArrayList> continuations = new ArrayList>(); + CountDownLatch doneGate = new CountDownLatch(1); + + public void addContinuation(Continuation continuation) { + synchronized(doneGate) { + if(doneGate.getCount() == 0) { + if(exception == null) + continuation.succeeded(result); + else + continuation.failed(exception); + } + else + continuations.add(continuation); + } + } + + public boolean isDone() { + return doneGate.getCount() == 0; + } + + protected void failWith(Exception exception) { + this.exception = exception; + ArrayList> cs; + synchronized (doneGate) { + cs = this.continuations; + this.continuations = null; + doneGate.countDown(); + } + if(cs != null) + for(Continuation continuation : cs) + continuation.failed(exception); + } + + protected void doneWith(T result) { + this.result = result; + ArrayList> cs; + synchronized (doneGate) { + cs = this.continuations; + this.continuations = null; + doneGate.countDown(); + } + if(cs != null) + for(Continuation continuation : cs) + continuation.succeeded(result); + } + + public void cancel() { + failWith(new CancellationException()); + } + + public T get() throws Exception { + doneGate.await(); + if(exception != null) + throw exception; + return result; + } +}