diff options
Diffstat (limited to 'src/jvm/clojure/lang/Agent.java')
-rw-r--r-- | src/jvm/clojure/lang/Agent.java | 35 |
1 files changed, 7 insertions, 28 deletions
diff --git a/src/jvm/clojure/lang/Agent.java b/src/jvm/clojure/lang/Agent.java index e4500174..c2d8613d 100644 --- a/src/jvm/clojure/lang/Agent.java +++ b/src/jvm/clojure/lang/Agent.java @@ -16,10 +16,9 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicReference; import java.util.Map; -public class Agent implements IRef{ +public class Agent extends ARef { volatile Object state; -volatile IFn validator = null; -AtomicReference<IPersistentStack> q = new AtomicReference(PersistentQueue.EMPTY); + AtomicReference<IPersistentStack> q = new AtomicReference(PersistentQueue.EMPTY); AtomicReference<IPersistentMap> watchers = new AtomicReference(PersistentHashMap.EMPTY); volatile ISeq errors = null; @@ -116,29 +115,18 @@ public Agent(Object state) throws Exception{ this(state,null); } -public Agent(Object state, IFn validator) throws Exception{ - this.validator = validator; - setState(state); +public Agent(Object state, IPersistentMap meta) throws Exception { + super(meta); + setState(state); } boolean setState(Object newState) throws Exception{ - validate(getValidator(),newState); + validate(newState); boolean ret = state != newState; state = newState; return ret; } -void validate(IFn vf, Object val){ - try{ - if(vf != null) - vf.invoke(val); - } - catch(Exception e) - { - throw new IllegalStateException("Invalid agent state", e); - } -} - public Object get() throws Exception{ if(errors != null) { @@ -147,16 +135,7 @@ public Object get() throws Exception{ return state; } -public void setValidator(IFn vf){ - validate(vf,state); - validator = vf; -} - -public IFn getValidator(){ - return validator; -} - -public ISeq getErrors(){ + public ISeq getErrors(){ return errors; } |