Example #1
0
            //[DebuggerHidden]
            object Const(object arg)
            {
                IList arrA = arg as IList;

                if (arrA == null || acceptVector)
                {
                    return(func(arg));
                }
                try
                {
                    int       n = arrA.Count;
                    ArrayList result;
                    if (resultCanBeLazy)
                    {
                        result = new ListOfVals(n);
                    }
                    else
                    {
                        result = new ListOfConst(n);
                    }
                    object[] prev = null;
                    for (int i = 0; i < n; i++)
                    {
                        var r = func(arrA[i]);
                        if (r is IEnumerable <object[]> multiRes)
                        {
                            throw new NotImplementedException();
                        }
                        else
                        {
                            if (r is object[] curr)
                            {
                                if (prev != null && Cmp.CompareTimed(prev, curr) == 0)
                                {
                                    continue;
                                }
                                prev = curr;
                            }
                            result.Add(r);
                        }
                    }
                    return(result);
                }
                catch (Exception ex) { return(ex.Wrap()); }// new Exception(string.Format("unaryOp: " + ex.Message)); }
            }
Example #2
0
        public static object binaryOpConst(Fxy op, object constA, object constB, bool resultCanBeLazy)
        {
            IList arrA = constA as IList;
            IList arrB = constB as IList;

            if (arrA == null && arrB == null)
            {
                return(op(constA, constB));
            }
            try
            {
                ArrayList result;
                if (arrA == null)      // || arrA.Count == 1)
                {
                    object a = constA; // arrA == null ? argA : arrA[0];
                    if (resultCanBeLazy)
                    {
                        result = new ListOfVals(arrB.Count);
                    }
                    else
                    {
                        result = new ListOfConst(arrB.Count);
                    }
                    for (int i = 0; i < arrB.Count; i++)
                    {
                        result.Add(op(a, arrB[i]));
                    }
                }
                else if (arrB == null) // || arrB.Count == 1)
                {
                    object b = constB; // arrB == null ? argB : arrB[0];
                    if (resultCanBeLazy)
                    {
                        result = new ListOfVals(arrA.Count);
                    }
                    else
                    {
                        result = new ListOfConst(arrA.Count);
                    }
                    for (int i = 0; i < arrA.Count; i++)
                    {
                        result.Add(op(arrA[i], b));
                    }
                }
                else if (arrA.Count == arrB.Count)
                {
                    int n = arrA.Count;
                    if (resultCanBeLazy)
                    {
                        result = new ListOfVals(n);
                    }
                    else
                    {
                        result = new ListOfConst(n);
                    }
                    for (int i = 0; i < n; i++)
                    {
                        result.Add(op(arrA[i], arrB[i]));
                    }
                }
                else
                {
                    return(new ArgumentOutOfRangeException("binaryOp: arguments dimensions mismatch").Wrap());
                }
                return(result);
            }
            catch (Exception ex) { return(ex.Wrap()); }// new Exception(string.Format("binaryOp: " + ex.Message)); }
        }