diff options
Diffstat (limited to 'src/main/scala/scala/async/iterators/IteratorState.scala')
-rw-r--r-- | src/main/scala/scala/async/iterators/IteratorState.scala | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/main/scala/scala/async/iterators/IteratorState.scala b/src/main/scala/scala/async/iterators/IteratorState.scala new file mode 100644 index 0000000..5b8cf06 --- /dev/null +++ b/src/main/scala/scala/async/iterators/IteratorState.scala @@ -0,0 +1,50 @@ +package scala.async.iterators + +import scala.util.{Try, Success, Failure} + +trait IteratorState[T] { + + def apply(v: Try[Any]): Unit + def apply: Unit + def `result$async` : IteratorState[T] + + private[this] var _value: Option[T] = None + private[this] var _exc: Throwable = null + + def result_= (value: T) = + _value = Some(value) + + def result: T = { + if (_exc != null) + throw _exc + else + _value.get + } + + def exception_= (exc: Throwable) = + _exc = exc + + def exception: Throwable = + _exc + + def isFailed: Boolean = + _exc != null + + def onComplete(cont: IteratorState[_]) = { + // cont will always be `this` + /* do nothing */ + } + + def next: T = { + // continue iteration with next state + this.apply(Success(result)) + // return current result + result + } + + def hasNext: Boolean = { + println("invoking apply") + apply + _value.nonEmpty + } +} |