// Use this for initialization
    void Start()
    {
        currentState  = new HostageState(this);
        releasedState = new ReleasedState(this);
        capturedState = new CapturedState(this);

        currentState = capturedState;
    }
Example #2
0
        public CapturedState MkState(string name)
        {
            var last = states[states.Count - 1];
            var s    = new CapturedState(name, last);

            states.Add(s);
            return(s);
        }
Example #3
0
 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);
 }
Example #4
0
 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);
 }
Example #5
0
            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);
            }
Example #6
0
        /// <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));
        }
Example #7
0
 internal CapturedState(string name, CapturedState prev)
 {
     Name     = name;
     previous = prev;
 }
Example #8
0
 public CapturedState MkState(string name)
 {
   var last = states[states.Count - 1];
   var s = new CapturedState(name, last);
   states.Add(s);
   return s;
 }
Example #9
0
 internal CapturedState(string name, CapturedState prev)
 {
   Name = name;
   previous = prev;
 }