public static CLBinaryOperator LoadBinaryDivide(int priority = TimesPriority, bool valOnLeft = true, bool valOnRight = true) { BinaryDivide = CLOperators.BinaryOperators.GetOrNull("/") ?? new CLBinaryOperator("/", priority, valOnLeft, valOnRight); BinaryDivide.AddFunction(tNum, tNum, BinDivideNumbers); BinaryDivide.AddFunction(tNum, tLst, (left, right, vars, context) => BinDivideNumbers(left, ListToNum(right), vars, context)); BinaryDivide.AddFunction(tLst, tNum, BinDivideList); BinaryDivide.AddFunction(tLst, tLst, (left, right, vars, context) => BinDivideList(left, ListToNum(right), vars, context)); BinaryDivide.AddFunction(tStr, tNum, BinDivideStringException); BinaryDivide.AddFunction(tNum, tStr, BinDivideStringException); return(BinaryDivide); }
// Returns the quotient of a list's items over a number. public static CalcValue BinDivideList(CalcObject left, CalcObject right, CLLocalStore vars, CLContextProvider context) { CalcList lstLeft = left as CalcList; CalcNumber numRight = right as CalcNumber; // We will *not* do string checking here // It's entirely possible someone writes a string divider and this function will use it. CalcValue[] lstRet = new CalcValue[lstLeft.Count]; for (int i = 0; i < lstRet.Length; i++) { lstRet[i] = BinaryDivide.Run(lstLeft[i], numRight, vars, context); } return(new CalcList(lstRet)); }