- /// <summary>
- /// 操作符服务
- /// </summary>
- public static class OperatorService
- {
- #region Math
-
- public static double Multiply(in BaseNode a, in BaseNode b)
- {
- var (result, _a, _b) = IsNumber(a, b);
- if (result)
- {
- return _a * _b;
- }
- return default;
- }
- public static double Divide(in BaseNode a, in BaseNode b)
- {
- var (result, _a, _b) = IsNumber(a, b);
- if (result)
- {
- return _a / _b;
- }
- return default;
- }
- public static double Plus(in BaseNode a, in BaseNode b)
- {
- var (result, _a, _b) = IsNumber(a, b);
- if (result)
- {
- return _a + _b;
- }
- return default;
- }
- public static double Minus(in BaseNode a, in BaseNode b)
- {
- var (result, _a, _b) = IsNumber(a, b);
- if (result)
- {
- return _a - _b;
- }
- return default;
- }
- public static double Power(in BaseNode a, in BaseNode b)
- {
- var (result, _a, _b) = IsNumber(a, b);
- if (result)
- {
- return Math.Pow(_a, _b);
- }
- return default;
- }
- /// <summary>
- /// 判断是不是数字类型,并返回数字
- /// </summary>
- /// <param name="a"></param>
- /// <returns></returns>
- private static (bool,double,double) IsNumber(BaseNode a, in BaseNode b)
- {
- if(a.NodeType == NodeTypeEnum.Number && b.NodeType == NodeTypeEnum.Number)
- {
- var _a = a as NumberNode;
- var _b = b as NumberNode;
- return (true, _a.Number, _b.Number);
- }
- return (false, default, default);
- }
- #endregion
- }