summaryrefslogtreecommitdiff
path: root/src/jvm/clojure
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2011-03-18 11:44:28 -0400
committerRich Hickey <richhickey@gmail.com>2011-03-18 11:44:28 -0400
commit84710838d6996d9144d83c5b659bdeda4c656100 (patch)
treed1a7041521d6bcea8e8ea397a3fd97ccc36faade /src/jvm/clojure
parente3381eaf8593f77406af44224ed762304a887158 (diff)
added deref with timeout, realized?
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r--src/jvm/clojure/lang/Delay.java6
-rw-r--r--src/jvm/clojure/lang/IBlockingDeref.java17
-rw-r--r--src/jvm/clojure/lang/IPending.java (renamed from src/jvm/clojure/lang/IPromiseImpl.java)4
-rw-r--r--src/jvm/clojure/lang/LazySeq.java5
4 files changed, 28 insertions, 4 deletions
diff --git a/src/jvm/clojure/lang/Delay.java b/src/jvm/clojure/lang/Delay.java
index a5dd713c..40a939ba 100644
--- a/src/jvm/clojure/lang/Delay.java
+++ b/src/jvm/clojure/lang/Delay.java
@@ -12,7 +12,7 @@
package clojure.lang;
-public class Delay implements IDeref{
+public class Delay implements IDeref, IPending{
Object val;
IFn fn;
@@ -35,4 +35,8 @@ synchronized public Object deref() throws Exception{
}
return val;
}
+
+synchronized public boolean isRealized(){
+ return fn == null;
+}
}
diff --git a/src/jvm/clojure/lang/IBlockingDeref.java b/src/jvm/clojure/lang/IBlockingDeref.java
new file mode 100644
index 00000000..cc415844
--- /dev/null
+++ b/src/jvm/clojure/lang/IBlockingDeref.java
@@ -0,0 +1,17 @@
+/**
+ * Copyright (c) Rich Hickey. All rights reserved.
+ * The use and distribution terms for this software are covered by the
+ * Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+ * which can be found in the file epl-v10.html at the root of this distribution.
+ * By using this software in any fashion, you are agreeing to be bound by
+ * the terms of this license.
+ * You must not remove this notice, or any other, from this software.
+ **/
+
+/* rich 3/18/11 */
+
+package clojure.lang;
+
+public interface IBlockingDeref{
+Object deref(long ms, Object timeoutValue) throws Exception;
+}
diff --git a/src/jvm/clojure/lang/IPromiseImpl.java b/src/jvm/clojure/lang/IPending.java
index 686e4389..c7a8f569 100644
--- a/src/jvm/clojure/lang/IPromiseImpl.java
+++ b/src/jvm/clojure/lang/IPending.java
@@ -10,6 +10,6 @@
package clojure.lang;
-public interface IPromiseImpl {
- boolean hasValue();
+public interface IPending{
+ boolean isRealized();
}
diff --git a/src/jvm/clojure/lang/LazySeq.java b/src/jvm/clojure/lang/LazySeq.java
index 6da37027..8d4477b4 100644
--- a/src/jvm/clojure/lang/LazySeq.java
+++ b/src/jvm/clojure/lang/LazySeq.java
@@ -14,7 +14,7 @@ package clojure.lang;
import java.util.*;
-public final class LazySeq extends Obj implements ISeq, Sequential, List{
+public final class LazySeq extends Obj implements ISeq, Sequential, List, IPending{
private IFn fn;
private Object sv;
@@ -255,4 +255,7 @@ public boolean addAll(int index, Collection c){
}
+synchronized public boolean isRealized(){
+ return fn == null;
+}
}