示例#1
0
        /// <summary>
        /// Calculates this logical expression.
        /// </summary>
        /// <param name="parameters">A collection of variables that are used in the expression.</param>
        /// <returns>A result of the calculation.</returns>
        /// <seealso cref="LogicParameterCollection" />
        /// <exception cref="ArgumentNullException"><paramref name="parameters"/> is null.</exception>
        public bool Calculate(LogicParameterCollection parameters)
        {
            if (parameters == null)
                throw new ArgumentNullException("parameters");

            return parameters[variable];
        }
示例#2
0
        public LogicWorkspace(int countOfExps)
        {
            this.countOfExps = countOfExps;

            expressions = new List<LogicWorkspaceItem>(countOfExps >= 20 ? 20 : countOfExps);
            parser = new LogicParser();
            parameters = new LogicParameterCollection();
        }
示例#3
0
        /// <summary>
        /// Calculates this logical expression.
        /// </summary>
        /// <param name="parameters">A collection of variables that are used in the expression.</param>
        /// <returns>A result of the calculation.</returns>
        /// <seealso cref="LogicParameterCollection" />
        /// <exception cref="System.ArgumentNullException"><paramref name="parameters"/> is null.</exception>
        public bool Calculate(LogicParameterCollection parameters)
        {
            if (parameters == null)
                throw new ArgumentNullException("parameters");

            parameters.Remove(variable.Name);

            return false;
        }
示例#4
0
        public void CalculateTest()
        {
            LogicParameterCollection parameters = new LogicParameterCollection();
            ILogicExpression def = new Assign(new Variable("a"), new Const(true));
            def.Calculate(parameters);
            Assert.AreEqual(true, parameters["a"]);

            ILogicExpression undef = new Undefine(new Variable("a"));
            undef.Calculate(parameters);
            Assert.IsFalse(parameters.Contains("a"));
        }
示例#5
0
        public void CalculateTest()
        {
            ILogicExpression exp = parser.Parse("!a");
            LogicParameterCollection parameters = new LogicParameterCollection();
            parameters.Add("a");

            parameters["a"] = true;
            Assert.IsFalse(exp.Calculate(parameters));

            parameters["a"] = false;
            Assert.IsTrue(exp.Calculate(parameters));
        }
示例#6
0
        public void GetLogicParametersTest()
        {
            string function = "a | b & c & (a | c)";
            var expected = new LogicParameterCollection()
                            {
                                "a",
                                "b",
                                "c"
                            };

            LogicParameterCollection actual = logicParser.GetLogicParameters(function);

            CollectionAssert.AreEqual(expected, actual);
        }
示例#7
0
文件: And.cs 项目: ronnycsharp/xFunc
 /// <summary>
 /// Calculates this AND expression.
 /// </summary>
 /// <param name="parameters">A collection of variables that are used in the expression.</param>
 /// <returns>A result of the calculation.</returns>
 public override bool Calculate(LogicParameterCollection parameters)
 {
     return left.Calculate(parameters) & right.Calculate(parameters);
 }
        private void GenerateTruthTable(IEnumerable<ILogicExpression> exps, LogicParameterCollection parameters)
        {
            truthTableGridView.Columns.Clear();

            truthTableGridView.Columns.Add(new GridViewColumn
            {
                Header = "#",
                DisplayMemberBinding = new Binding("Index")
            });
            for (int i = 0; i < parameters.Count; i++)
            {
                truthTableGridView.Columns.Add(new GridViewColumn
                {
                    Header = parameters[i],
                    DisplayMemberBinding = new Binding(string.Format("VarsValues[{0}]", i))
                });
            }
            for (int i = 0; i < exps.Count() - 1; i++)
            {
                truthTableGridView.Columns.Add(new GridViewColumn
                {
                    Header = exps.ElementAt(i),
                    DisplayMemberBinding = new Binding(string.Format("Values[{0}]", i))
                });
            }
            if (exps.Count() != 0)
                truthTableGridView.Columns.Add(new GridViewColumn
                {
                    Header = exps.ElementAt(exps.Count() - 1),
                    DisplayMemberBinding = new Binding("Result")
                });
        }
示例#9
0
        /// <summary>
        /// Calculates this logical expression.
        /// </summary>
        /// <param name="parameters">A collection of variables that are used in the expression.</param>
        /// <returns>A result of the calculation.</returns>
        /// <seealso cref="LogicParameterCollection" />
        /// <exception cref="ArgumentNullException"><paramref name="parameters"/> is null.</exception>
        public bool Calculate(LogicParameterCollection parameters)
        {
            if (parameters == null)
                throw new ArgumentNullException("parameters");

            var localValue = value.Calculate(parameters);
            parameters.Add(variable.Name);
            parameters[variable.Name] = localValue;

            return false;
        }
示例#10
0
 /// <summary>
 /// Calculates this logical expression.
 /// </summary>
 /// <param name="parameters">A collection of variables that are used in the expression.</param>
 /// <returns>A result of the calculation.</returns>
 /// <seealso cref="LogicParameterCollection" />
 public bool Calculate(LogicParameterCollection parameters)
 {
     return value;
 }
示例#11
0
 /// <summary>
 /// Calculates this logical expression.
 /// </summary>
 /// <param name="parameters">A collection of variables that are used in the expression.</param>
 /// <returns>A result of the calculation.</returns>
 /// <seealso cref="LogicParameterCollection" />
 public abstract bool Calculate(LogicParameterCollection parameters);
示例#12
0
文件: Not.cs 项目: ronnycsharp/xFunc
 /// <summary>
 /// Calculates this logical expression.
 /// </summary>
 /// <param name="parameters">A collection of variables that are used in the expression.</param>
 /// <returns>A result of the calculation.</returns>
 /// <seealso cref="LogicParameterCollection" />
 public override bool Calculate(LogicParameterCollection parameters)
 {
     return !argument.Calculate(parameters);
 }
示例#13
0
 /// <summary>
 /// Always throws <see cref="NotSupportedException"/>.
 /// </summary>
 /// <param name="parameters">The parameters.</param>
 /// <returns></returns>
 /// <exception cref="NotSupportedException">Always.</exception>
 public override bool Calculate(LogicParameterCollection parameters)
 {
     throw new NotSupportedException();
 }
示例#14
0
        public void Generate(string strExp)
        {
            expression = parser.Parse(strExp);
            expressions = parser.ConvertLogicExpressionToCollection(expression);
            parameters = parser.GetLogicParameters(strExp);
            table = new List<TruthTableRowViewModel>();

            for (int i = (int)Math.Pow(2, parameters.Count) - 1; i >= 0; i--)
            {
                parameters.Bits = i;
                bool b = expression.Calculate(parameters);

                var row = new TruthTableRowViewModel(parameters.Count, expressions.Count());

                row.Index = (int)Math.Pow(2, parameters.Count) - i;
                for (int j = 0; j < parameters.Count; j++)
                {
                    row.VarsValues[j] = parameters[parameters[j]];
                }

                for (int j = 0; j < expressions.Count() - 1; j++)
                {
                    row.Values[j] = expressions.ElementAt(j).Calculate(parameters);
                }

                if (expressions.Count() != 0)
                    row.Result = b;

                table.Add(row);
            }
        }