private static Domain CalculateDomain(IVariable[] arguments) { Domain domain; if (MultiplyBinaryVariables(arguments)) { domain = Domain.BinaryInteger; } else if (arguments.All(a => a.IsPositiveOrZero() || a.IsBinary())) { domain = arguments.Any(a => a.IsReal()) ? Domain.PositiveOrZeroReal : Domain.PositiveOrZeroInteger; } else { domain = arguments.Any(a => a.IsReal()) ? Domain.AnyReal : Domain.AnyInteger; } return arguments.All(a => a.IsConstant()) ? domain.MakeConstant() : domain; }
private static Domain CalculateDomain(IVariable[] arguments) { if (arguments.All(a => a.IsPositiveOrZero() || a.IsBinary())) { if (arguments.Any(a => a.IsReal())) { return arguments.Any(a => a.IsNotConstant()) ? Domain.PositiveOrZeroReal : Domain.PositiveOrZeroConstantReal; } return arguments.Any(a => a.IsNotConstant()) ? Domain.PositiveOrZeroInteger : Domain.PositiveOrZeroConstantInteger; } if (arguments.Any(a => a.IsReal())) { return arguments.Any(a => a.IsNotConstant()) ? Domain.AnyReal : Domain.AnyConstantReal; } return arguments.Any(a => a.IsNotConstant()) ? Domain.AnyInteger : Domain.AnyConstantInteger; }