public static List <IPredicate> PredicateBinder(Hashtable objectTypes, IPredicate predicate, int termLocation) { List <IPredicate> predicateList = new List <IPredicate>(); if (termLocation >= predicate.Terms.Count) { return new List <IPredicate> { predicate } } ; if (!objectTypes.ContainsKey(predicate.TermAt(termLocation).Type)) { return(new List <IPredicate>()); } foreach (string obj in objectTypes[predicate.TermAt(termLocation).Type] as List <string> ) { Predicate newPredicate = predicate.Clone() as Predicate; newPredicate.BindTerm(obj, termLocation); predicateList.AddRange(PredicateBinder(objectTypes, newPredicate, termLocation + 1)); } return(predicateList); }
// Check to see if a predicate is true in the current state. public bool InState(IPredicate predicate) { if (predicate.Sign) { if (table.ContainsKey(predicate)) { return((bool)table[predicate]); } else { return(false); } } else { Predicate reversed = predicate.Clone() as Predicate; reversed.Sign = true; if (table.ContainsKey(reversed)) { return(!(bool)table[reversed]); } else { return(true); } } }
public OpenCondition Clone() { var oc = new OpenCondition(precondition.Clone() as IPredicate, step.Clone() as IPlanStep) { risks = risks, isInit = isInit, isStatic = isStatic, cndts = cndts }; return(oc); }
public OpenCondition Clone() { var oc = new OpenCondition(precondition.Clone() as IPredicate, step.Clone() as IPlanStep) { risks = risks, isInit = isInit, isStatic = isStatic, cndts = cndts, addReuseHeuristic = addReuseHeuristic, hasDummyInit = hasDummyInit, isDummyGoal = isDummyGoal }; return(oc); }
// Returns a bound copy of the predicate. public Predicate GetBoundPredicate() { Predicate boundPred = (Predicate)predicate.Clone(); return(boundPred); }