Beispiel #1
0
        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);
        }
Beispiel #2
0
 public override List <object> GetValuesForList(CustomTermEvaluater functionsolver, ListEvaluationAid lea)
 {
     throw new NotImplementedException();
 }
Beispiel #3
0
        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");
            }
        }