示例#1
0
        internal override BranchingRule <TERM> Concretize1(TERM path, IContextCore <TERM> solver,
                                                           Func <TERM, TERM> fBP, Func <TERM, TERM> fNBP,
                                                           Func <int, TERM, int> stateMap, TERM newReg, TERM inputVar)
        {
            TERM path_and_cond     = solver.MkAnd(path, condition);
            TERM path_and_not_cond = solver.MkAnd(path, solver.MkNot(condition));
            var  t = trueCase.Concretize1(path_and_cond, solver, fBP, fNBP, stateMap, newReg, inputVar);
            var  f = falseCase.Concretize1(path_and_not_cond, solver, fBP, fNBP, stateMap, newReg, inputVar);

            return(new IteRule <TERM>(condition, t, f));
        }
示例#2
0
        internal override BranchingRule <TERM> Concretize1(TERM path, IContextCore <TERM> solver, Func <TERM, TERM> fBP, Func <TERM, TERM> fNBP, Func <int, TERM, int> stateMap, TERM newReg, TERM inputVar)
        {
            TERM defaultcond = solver.True;
            var  cases1      = new KeyValuePair <TERM, BranchingRule <TERM> > [cases.Length];

            for (int i = 0; i < cases.Length; i++)
            {
                var cond = solver.MkEq(input, cases[i].Key);
                defaultcond = And(solver, defaultcond, solver.MkNot(cond));
                cases1[i]   = new KeyValuePair <TERM, BranchingRule <TERM> >(cases[i].Key, cases[i].Value.Concretize1(And(solver, path, cond), solver, fBP, fNBP, stateMap, newReg, inputVar));
            }
            var defaultcase1 = defaultcase.Concretize1(And(solver, path, defaultcond), solver, fBP, fNBP, stateMap, newReg, inputVar);
            var rule         = new SwitchRule <TERM>(input, defaultcase1, cases1);

            return(rule);
        }