diff options
author | Rich Hickey <richhickey@gmail.com> | 2011-03-18 11:44:28 -0400 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2011-03-18 11:44:28 -0400 |
commit | 84710838d6996d9144d83c5b659bdeda4c656100 (patch) | |
tree | d1a7041521d6bcea8e8ea397a3fd97ccc36faade /src/jvm/clojure | |
parent | e3381eaf8593f77406af44224ed762304a887158 (diff) |
added deref with timeout, realized?
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r-- | src/jvm/clojure/lang/Delay.java | 6 | ||||
-rw-r--r-- | src/jvm/clojure/lang/IBlockingDeref.java | 17 | ||||
-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.java | 5 |
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; +} } |