private void AddBrick(FlexpressionBrick[] source, FlexpressionBrick added, Func <CompositeFlexpressionBrick, bool> canFlattenPredicate, ref int pos)
 {
     if (canFlattenPredicate != null && added is CompositeFlexpressionBrick cb && canFlattenPredicate.Invoke(cb))
     {
         var len = cb.Bricks.Length;
         Array.Copy(cb.Bricks, 0, source, pos, len);
         pos += len;
     }
        /// <inheritdoc />
        protected override void ApplyRuleDefinition(string name, FlexpressionBrick content, bool recursion, bool freeze)
        {
            if (!recursion || _rule.IsDefined)
            {
                return;
            }

            _rule.Set(name, content);
        }
Ejemplo n.º 3
0
        /// <inheritdoc />
        public override bool Equals(FlexpressionBrick other)
        {
            if (IsEmpty && (other?.IsEmpty ?? false))
            {
                return(true);
            }

            return(other is TextMatchingBrick cb && Text.Equals(cb.Text));
        }
Ejemplo n.º 4
0
        /// <inheritdoc />
        public override bool Equals(FlexpressionBrick other)
        {
            if (IsEmpty && (other?.IsEmpty ?? false))
            {
                return(true);
            }

            return(other is RulePlaceholderBrick cb && RuleName.Equals(cb.RuleName));
        }
Ejemplo n.º 5
0
        /// <inheritdoc />
        public override bool Equals(FlexpressionBrick other)
        {
            if (IsEmpty && (other?.IsEmpty ?? false))
            {
                return(true);
            }

            return(other is CapturingGroupBrick cb && cb.GroupName == GroupName && cb.Content.Equals(Content));
        }
Ejemplo n.º 6
0
        public CapturingGroupBrick(ExpressionTypeDescriptor expressionType, IFlexpressionAlgebra algebra, FlexpressionBrick content, bool freeze)
            : base(algebra)
        {
            Guard.ArgNotNull(expressionType, nameof(expressionType));

            _expressionType = expressionType;
            Content         = content;
            ApplyRuleDefinition(Content, GroupName, content, true, freeze);
        }
Ejemplo n.º 7
0
        /// <inheritdoc />
        protected override void ApplyRuleDefinition(string name, FlexpressionBrick content, bool recursion, bool freeze)
        {
            if (name == GroupName)
            {
                return;
            }

            ApplyRuleDefinition(Content, name, content, recursion, freeze);
        }
        protected CompositeFlexpressionBrick(IFlexpressionAlgebra algebra, FlexpressionBrick b1, FlexpressionBrick b2, FlexpressionBrick b3, Func <CompositeFlexpressionBrick, bool> canFlattenPredicate)
            : base(algebra.GetHighestPrioritizedAlgebra(b1, b2, b3))
        {
            var flatLength = GetSourceLength(b1, canFlattenPredicate) + GetSourceLength(b2, canFlattenPredicate) + GetSourceLength(b3, canFlattenPredicate);

            Bricks = new FlexpressionBrick[flatLength];
            var pos = 0;

            AddBrick(Bricks, b1, canFlattenPredicate, ref pos);
            AddBrick(Bricks, b2, canFlattenPredicate, ref pos);
            AddBrick(Bricks, b3, canFlattenPredicate, ref pos);
        }
Ejemplo n.º 9
0
 /// <inheritdoc />
 protected override void ApplyRuleDefinition(
     string name,
     FlexpressionBrick content,
     bool recursion,
     bool freeze)
 {
     if (name == RuleName && _rule.TrySet(content, recursion))
     {
         if (freeze)
         {
             _rule.Freeze();
         }
     }
 }
Ejemplo n.º 10
0
        /// <inheritdoc />
        public override bool Equals(FlexpressionBrick other)
        {
            if (other is null)
            {
                return(false);
            }

            if (ReferenceEquals(other, this))
            {
                return(true);
            }

            return(other.Equals(this));
        }
Ejemplo n.º 11
0
 /// <inheritdoc />
 protected override void ApplyRuleDefinition(string name, FlexpressionBrick content, bool recursion, bool freeze)
 {
 }
 public override bool Equals(FlexpressionBrick other)
 {
     return(other is CurrentRulePlaceholderBrick);
 }
Ejemplo n.º 13
0
 /// <inheritdoc />
 public override bool Equals(FlexpressionBrick other)
 {
     return(other is NegationBrick nb && nb.Content.Equals(Content));
 }
Ejemplo n.º 14
0
 /// <inheritdoc />
 public override bool Equals(FlexpressionBrick other)
 {
     return(other is CharBrick cb && Character.Equals(cb.Character));
 }
 private static int GetSourceLength(FlexpressionBrick brick, Func <CompositeFlexpressionBrick, bool> canFlattenPredicate)
 {
     return(canFlattenPredicate != null && brick is CompositeFlexpressionBrick cb && canFlattenPredicate.Invoke(cb) ? cb.Bricks.Length : 1);
 }
Ejemplo n.º 16
0
 /// <inheritdoc />
 public NegationBrick(IFlexpressionAlgebra algebra, FlexpressionBrick content) : base(algebra)
 {
     Content = content;
 }
Ejemplo n.º 17
0
 public ConcatenationBrick(IFlexpressionAlgebra algebra, FlexpressionBrick b1, FlexpressionBrick b2, FlexpressionBrick b3)
     : base(algebra, b1, b2, b3, CanMakeFlat)
 {
 }
Ejemplo n.º 18
0
 public RulePlaceholderBrick(IFlexpressionAlgebra algebra, string ruleName, FlexpressionBrick defaultRule)
     : base(algebra.GetHighestPrioritizedAlgebra(defaultRule))
 {
     RuleName = ruleName;
     _rule    = defaultRule != null ? new FreezableValue <Tuple <FlexpressionBrick, bool> >(Tuple.Create(defaultRule, false)) : new FreezableValue <Tuple <FlexpressionBrick, bool> >();
 }
Ejemplo n.º 19
0
 public AlternationBrick(IFlexpressionAlgebra algebra, FlexpressionBrick b1, FlexpressionBrick b2)
     : base(algebra, b1, b2, CanMakeFlat)
 {
 }
Ejemplo n.º 20
0
 /// <inheritdoc />
 public override bool Equals(FlexpressionBrick other)
 {
     return(other is StandardCharacterRangeBrick lb && lb._range == _range);
 }
Ejemplo n.º 21
0
 public QuantifierBrick(IFlexpressionAlgebra algebra, FlexpressionBrick content, in Quantifier quantity)