next = new ActionQueue(prior.q.pop(), error); popped = action.agent.aq.compareAndSet(prior, next);
next = new ActionQueue(prior.q.pop(), error); popped = action.agent.aq.compareAndSet(prior, next);
synchronized public Object restart(Object newState, boolean clearActions){ if(getError() == null) { throw Util.runtimeException("Agent does not need a restart"); } validate(newState); state = newState; if(clearActions) aq.set(ActionQueue.EMPTY); else { boolean restarted = false; ActionQueue prior = null; while(!restarted) { prior = aq.get(); restarted = aq.compareAndSet(prior, new ActionQueue(prior.q, null)); } if(prior.q.count() > 0) ((Action) prior.q.peek()).execute(); } return newState; }
void enqueue(Action action){ boolean queued = false; ActionQueue prior = null; while(!queued) { prior = aq.get(); queued = aq.compareAndSet(prior, new ActionQueue((IPersistentStack)prior.q.cons(action), prior.error)); } if(prior.q.count() == 0 && prior.error == null) action.execute(); }
synchronized public Object restart(Object newState, boolean clearActions){ if(getError() == null) { throw Util.runtimeException("Agent does not need a restart"); } validate(newState); state = newState; if(clearActions) aq.set(ActionQueue.EMPTY); else { boolean restarted = false; ActionQueue prior = null; while(!restarted) { prior = aq.get(); restarted = aq.compareAndSet(prior, new ActionQueue(prior.q, null)); } if(prior.q.count() > 0) ((Action) prior.q.peek()).execute(); } return newState; }
void enqueue(Action action){ boolean queued = false; ActionQueue prior = null; while(!queued) { prior = aq.get(); queued = aq.compareAndSet(prior, new ActionQueue((IPersistentStack)prior.q.cons(action), prior.error)); } if(prior.q.count() == 0 && prior.error == null) action.execute(); }