// Use this for initialization void Start() { currentState = new HostageState(this); releasedState = new ReleasedState(this); capturedState = new CapturedState(this); currentState = capturedState; }
public CapturedState MkState(string name) { var last = states[states.Count - 1]; var s = new CapturedState(name, last); states.Add(s); return(s); }
public Model() { InitialState = new CapturedState("<initial>", null); states.Add(InitialState); True = new Boolean(this, true); elements.Add(True); elementsByName.Add("true", True); False = new Boolean(this, false); elements.Add(False); elementsByName.Add("false", False); }
public Element TryGet(string varname) { CapturedState curr = this; while (curr != null) { Element res; if (curr.valuations.TryGetValue(varname, out res)) { return(res); } curr = curr.previous; } return(null); }
/// <summary> /// Core implementation of both Max and Min /// </summary> private static bool MaxMinDriver(string taskName, object[] args, int multiplier, TextBuffer o, BindingEnvironment e, Step.Continuation k, MethodCallFrame predecessor) { var scoreVar = args[0] as LogicVariable; if (scoreVar == null) { throw new ArgumentInstantiationException(taskName, e, args); } var bestScore = multiplier * float.NegativeInfinity; var bestFrame = predecessor; CapturedState bestResult = new CapturedState(); var gotOne = false; GenerateSolutionsFromBody(taskName, args.Skip(1).ToArray(), o, e, (output, u, d, p) => { gotOne = true; var env = new BindingEnvironment(e, u, d); var maybeScore = env.Resolve(scoreVar); float score; switch (maybeScore) { case int i: score = i; break; case float f: score = f; break; case double df: score = (float)df; break; case LogicVariable _: throw new ArgumentInstantiationException(taskName, new BindingEnvironment(e, u, d), args); default: throw new ArgumentTypeException(taskName, typeof(float), maybeScore, args); } if (multiplier * score > multiplier * bestScore) { bestScore = score; bestResult = new CapturedState(o, output, u, d); bestFrame = p; } // Always ask for another solution return(false); }, predecessor); // When we get here, we've iterated through all solutions and kept the best one. // So pass it on to our continuation return(gotOne && k(o.Append(bestResult.Output), bestResult.Bindings, bestResult.State, bestFrame)); }
internal CapturedState(string name, CapturedState prev) { Name = name; previous = prev; }
public CapturedState MkState(string name) { var last = states[states.Count - 1]; var s = new CapturedState(name, last); states.Add(s); return s; }