summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorRoland <rk@rkuhn.info>2012-09-12 14:43:42 +0200
committerRoland <rk@rkuhn.info>2012-09-12 14:43:42 +0200
commit37cced5769e218e805cdcb1f87846f0f2548c8bb (patch)
tree982b8479489247de3dcd1aba46aac6685051680c /src/library
parent13ff968b9d273e03bfa226ca1ec52949391a6b68 (diff)
downloadscala-37cced5769e218e805cdcb1f87846f0f2548c8bb.tar.gz
scala-37cced5769e218e805cdcb1f87846f0f2548c8bb.tar.bz2
scala-37cced5769e218e805cdcb1f87846f0f2548c8bb.zip
improve Promise.tryAwait by converting to match statement
- also use type FiniteDuration due to a previous change to Deadline’s type signature
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/concurrent/impl/Promise.scala19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/library/scala/concurrent/impl/Promise.scala b/src/library/scala/concurrent/impl/Promise.scala
index f7ab85dc0c..9228872f2b 100644
--- a/src/library/scala/concurrent/impl/Promise.scala
+++ b/src/library/scala/concurrent/impl/Promise.scala
@@ -12,7 +12,7 @@ package scala.concurrent.impl
import java.util.concurrent.TimeUnit.NANOSECONDS
import scala.concurrent.{ ExecutionContext, CanAwait, OnCompleteRunnable, TimeoutException, ExecutionException }
-import scala.concurrent.util.{ Duration, Deadline }
+import scala.concurrent.util.{ Duration, Deadline, FiniteDuration }
import scala.annotation.tailrec
import scala.util.control.NonFatal
import scala.util.{ Try, Success, Failure }
@@ -64,7 +64,7 @@ private[concurrent] object Promise {
protected final def tryAwait(atMost: Duration): Boolean = {
@tailrec
- def awaitUnsafe(deadline: Deadline, nextWait: Duration): Boolean = {
+ def awaitUnsafe(deadline: Deadline, nextWait: FiniteDuration): Boolean = {
if (!isCompleted && nextWait > Duration.Zero) {
val ms = nextWait.toMillis
val ns = (nextWait.toNanos % 1000000l).toInt // as per object.wait spec
@@ -84,14 +84,13 @@ private[concurrent] object Promise {
}
}
- if (atMost eq Duration.Undefined)
- throw new IllegalArgumentException("cannot wait for Undefined period")
- else if (atMost <= Duration.Zero)
- isCompleted
- else if (atMost == Duration.Inf)
- awaitUnbounded()
- else
- awaitUnsafe(atMost.fromNow, atMost)
+ import Duration.Undefined
+ atMost match {
+ case u if u eq Undefined => throw new IllegalArgumentException("cannot wait for Undefined period")
+ case Duration.Inf => awaitUnbounded
+ case Duration.MinusInf => isCompleted
+ case f: FiniteDuration => if (f > Duration.Zero) awaitUnsafe(f.fromNow, f) else isCompleted
+ }
}
@throws(classOf[TimeoutException])