Ejemplo n.º 1
0
 public static object NOT(object v)
 {
     return(!OPs.xl2bool(v));
 }
Ejemplo n.º 2
0
        public static async Task <object> AND(AsyncExprCtx ae, IList args)
        {
            bool[] results = null;
            int    cnt     = args.Count;

            for (int j = 0; j < cnt; j++)
            {
                object v = await OPs.ConstValueOf(ae, args[j]);

                try
                {
                    IList lst = v as IList;
                    if (lst == null)
                    {
                        if (!OPs.xl2bool(v))
                        {
                            if (results == null)
                            {
                                return(False); // scalar, scalar
                            }
                            else
                            {   // vector, scalar
                                for (int i = results.Length - 1; i >= 0; i--)
                                {
                                    results[i] = false;
                                }
                                return(results);
                            }
                        }
                    }
                    else
                    {
                        bool allFalse = true;
                        if (results == null)
                        {   // scalar, vector
                            int n = lst.Count;
                            results = new bool[n];
                            for (int i = n - 1; i >= 0; i--)
                            {
                                bool tmp = OPs.xl2bool(lst[i]);
                                allFalse   = allFalse && !tmp;
                                results[i] = tmp;
                            }
                        }
                        else
                        {   // vector, vector
                            int n = Math.Min(results.Length, lst.Count);
                            if (n < results.Length)
                            {
                                Array.Resize <bool>(ref results, n);
                            }
                            for (int i = n - 1; i >= 0; i--)
                            {
                                if (!results[i])
                                {
                                    continue;
                                }
                                bool tmp = OPs.xl2bool(lst[i]);
                                allFalse   = allFalse && !tmp;
                                results[i] = tmp;
                            }
                        }
                        if (allFalse)
                        {
                            return(results);
                        }
                    }
                }
                catch (OperationCanceledException) { throw; }
                catch { }
            }
            return(results ?? True);
        }