public static List <bool> EvaluateAndListOnList(List <TermInequality> inequalities, CustomTermEvaluater evaluator, ListEvaluationAid lea) { if (inequalities.Count == 0) { return(null); } List <bool> ret = inequalities[0].EvaluateList(evaluator, lea); for (int i = 1; i < inequalities.Count; ++i) { List <int> trueOnes = new List <int>(); for (int j = 0; j < ret.Count; ++j) { if (ret[j]) { trueOnes.Add(j); } } if (trueOnes.Count > 0) { lea.PushIndicesToCheckList(trueOnes); List <bool> tempRet = inequalities[i].EvaluateList(evaluator, lea); lea.PopIndicesList(); List <bool> .Enumerator enumerator = tempRet.GetEnumerator(); foreach (int index in trueOnes) { enumerator.MoveNext(); ret[index] = enumerator.Current; } } else { return(ret); } } return(ret); }
public override List <object> GetValuesForList(CustomTermEvaluater functionsolver, ListEvaluationAid lea) { throw new NotImplementedException(); }
private List <bool> EvaluateList(CustomTermEvaluater functionsolver, ListEvaluationAid lea) { if (m_type == Type.UNARY) { List <object> ooList = ((Term)element1).GetValuesForList(functionsolver, lea); List <bool> ret = new List <bool>(); foreach (object oo in ooList) { if (oo is bool) { ret.Add((bool)oo); } else { double val = 0; if (oo is double) { val = (double)oo; } else if (oo is int) { val = (int)oo; } else { throw new Exception("A unary TermInequality only works with a number or a bool"); } ret.Add(val != 0); } } return(ret); } List <object> o1List = ((Term)element1).GetValuesForList(functionsolver, lea); List <object> o2List = ((Term)element2).GetValuesForList(functionsolver, lea); List <object> .Enumerator o1e = o1List.GetEnumerator(), o2e = o2List.GetEnumerator(); try { List <bool> ret = new List <bool>(); while (o1e.MoveNext() && o2e.MoveNext()) { object o1 = o1e.Current, o2 = o2e.Current; double d1 = 0; if (o1 is int) { d1 = (int)o1; } else { d1 = (double)o1; } double d2 = 0; if (o2 is int) { d2 = (int)o2; } else { d2 = (double)o2; } ret.Add(evaluate(d1, d2)); } return(ret); } catch { throw new Exception("A TermInequality only works with two numbers"); } }