var error = require('./utils/error'); var utils = require('./utils/common'); var information = require('./information'); exports.AND = function() { var args = utils.flatten(arguments); var result = true; for (var i = 0; i < args.length; i++) { if (!args[i]) { result = false; } } return result; }; exports.CHOOSE = function() { if (arguments.length < 2) { return error.na; } var index = arguments[0]; if (index < 1 || index > 254) { return error.value; } if (arguments.length < index + 1) { return error.value; } return arguments[index]; }; exports.FALSE = function() { return false; }; exports.IF = function(test, then_value, otherwise_value) { return test ? then_value : otherwise_value; }; exports.IFERROR = function(value, valueIfError) { if (information.ISERROR(value)) { return valueIfError; } return value; }; exports.IFNA = function(value, value_if_na) { return value === error.na ? value_if_na : value; }; exports.NOT = function(logical) { return !logical; }; exports.OR = function() { var args = utils.flatten(arguments); var result = false; for (var i = 0; i < args.length; i++) { if (args[i]) { result = true; } } return result; }; exports.TRUE = function() { return true; }; exports.XOR = function() { var args = utils.flatten(arguments); var result = 0; for (var i = 0; i < args.length; i++) { if (args[i]) { result++; } } return (Math.floor(Math.abs(result)) & 1) ? true : false; }; exports.SWITCH = function () { var result; if (arguments.length > 0) { var targetValue = arguments[0]; var argc = arguments.length - 1; var switchCount = Math.floor(argc / 2); var switchSatisfied = false; var hasDefaultClause = argc % 2 !== 0; var defaultClause = argc % 2 === 0 ? null : arguments[arguments.length - 1]; if (switchCount) { for (var index = 0; index < switchCount; index++) { if (targetValue === arguments[index * 2 + 1]) { result = arguments[index * 2 + 2]; switchSatisfied = true; break; } } } if (!switchSatisfied) { result = hasDefaultClause ? defaultClause : error.na; } } else { result = error.value; } return result; };