Example #1
0
        //TODO: Distribution

        public override Expression GetExpression(IReadOnlyDictionary <string, ParameterExpression> parameters)
        {
            Check(DepthParameter, parameters);
            Check(BranchParameter, parameters);

            var condition = Expression.Equal(Expression.Constant(Name), BranchParameter);

            // TODO: Negative depth
            if (MinDepth > 1)
            {
                condition = Expression.AndAlso(condition,
                                               Expression.LessThanOrEqual(Expression.Constant((byte)MinDepth), DepthParameter));
            }

            if (MaxDepth >= 1)
            {
                condition = Expression.AndAlso(condition,
                                               Expression.LessThanOrEqual(DepthParameter, Expression.Constant((byte)MaxDepth)));
            }

            return(Expression.Condition(condition, Matched?.GetExpression(parameters) ?? Expression.Constant(0f),
                                        NotMatched?.GetExpression(parameters) ?? Expression.Constant(0f)));
        }