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); }
/// <inheritdoc /> public override bool Equals(FlexpressionBrick other) { if (IsEmpty && (other?.IsEmpty ?? false)) { return(true); } return(other is TextMatchingBrick cb && Text.Equals(cb.Text)); }
/// <inheritdoc /> public override bool Equals(FlexpressionBrick other) { if (IsEmpty && (other?.IsEmpty ?? false)) { return(true); } return(other is RulePlaceholderBrick cb && RuleName.Equals(cb.RuleName)); }
/// <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)); }
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); }
/// <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); }
/// <inheritdoc /> protected override void ApplyRuleDefinition( string name, FlexpressionBrick content, bool recursion, bool freeze) { if (name == RuleName && _rule.TrySet(content, recursion)) { if (freeze) { _rule.Freeze(); } } }
/// <inheritdoc /> public override bool Equals(FlexpressionBrick other) { if (other is null) { return(false); } if (ReferenceEquals(other, this)) { return(true); } return(other.Equals(this)); }
/// <inheritdoc /> protected override void ApplyRuleDefinition(string name, FlexpressionBrick content, bool recursion, bool freeze) { }
public override bool Equals(FlexpressionBrick other) { return(other is CurrentRulePlaceholderBrick); }
/// <inheritdoc /> public override bool Equals(FlexpressionBrick other) { return(other is NegationBrick nb && nb.Content.Equals(Content)); }
/// <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); }
/// <inheritdoc /> public NegationBrick(IFlexpressionAlgebra algebra, FlexpressionBrick content) : base(algebra) { Content = content; }
public ConcatenationBrick(IFlexpressionAlgebra algebra, FlexpressionBrick b1, FlexpressionBrick b2, FlexpressionBrick b3) : base(algebra, b1, b2, b3, CanMakeFlat) { }
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> >(); }
public AlternationBrick(IFlexpressionAlgebra algebra, FlexpressionBrick b1, FlexpressionBrick b2) : base(algebra, b1, b2, CanMakeFlat) { }
/// <inheritdoc /> public override bool Equals(FlexpressionBrick other) { return(other is StandardCharacterRangeBrick lb && lb._range == _range); }
public QuantifierBrick(IFlexpressionAlgebra algebra, FlexpressionBrick content, in Quantifier quantity)