public static object NOT(object v) { return(!OPs.xl2bool(v)); }
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); }