コード例 #1
0
        private static IList <IForestNode> GetFlattenedList(IIntermediateForestNode intermediate)
        {
            var children = new List <IForestNode>();

            for (var a = 0; a < intermediate.Children.Count; a++)
            {
                var andNode = intermediate.Children[a];
                for (var c = 0; c < andNode.Children.Count; c++)
                {
                    var child = andNode.Children[c];
                    switch (child.NodeType)
                    {
                    case ForestNodeType.Intermediate:
                        var childList = GetFlattenedList(child as IIntermediateForestNode);
                        children.AddRange(childList);
                        break;

                    default:
                        children.Add(child);
                        break;
                    }
                }
            }
            return(children);
        }
コード例 #2
0
 public override void Visit(IIntermediateForestNode intermediateNode)
 {
     VisitLog.Add(intermediateNode.ToString());
     foreach (var child in intermediateNode.Children)
     {
         Visit(child);
     }
 }
コード例 #3
0
 bool AreIntermediateNodesEqual(IIntermediateForestNode firstIntermediateForestNode, IIntermediateForestNode secondIntermediateForestNode)
 {
     if (!firstIntermediateForestNode.DottedRule.Equals(
             secondIntermediateForestNode.DottedRule))
     {
         return(false);
     }
     return(AreChildNodesEqual(firstIntermediateForestNode, secondIntermediateForestNode));
 }
コード例 #4
0
            public override void Visit(IIntermediateForestNode intermediateNode)
            {
                if (!_visited.Add(intermediateNode))
                {
                    return;
                }

                var childIndex = GetOrSetChildIndex(intermediateNode);
                var path       = intermediateNode.Children[childIndex];

                Visit(path);
            }
コード例 #5
0
        public void Visit(IIntermediateForestNode node)
        {
            if (!this.visited.Add(node))
            {
                return;
            }

            foreach (var child in node.Children)
            {
                Visit(child);
            }
        }
コード例 #6
0
ファイル: ForestNodeSet.cs プロジェクト: ArsenShnurkov/Pliant
        public IIntermediateForestNode AddOrGetExistingIntermediateNode(IState trigger, int origin, int location)
        {
            var hash = trigger.GetHashCode();
            IIntermediateForestNode intermediateNode = null;

            if (_intermediateNodes.TryGetValue(hash, out intermediateNode))
            {
                return(intermediateNode);
            }
            intermediateNode = new IntermediateForestNode(trigger, origin, location);
            _intermediateNodes.Add(hash, intermediateNode);
            return(intermediateNode);
        }
コード例 #7
0
        public void Visit(IIntermediateForestNode node)
        {
            if (!_visited.Add(node))
            {
                return;
            }

            for (var i = 0; i < node.Children.Count; i++)
            {
                var child = node.Children[i];
                Visit(child);
            }
        }
コード例 #8
0
ファイル: ForestNodeSet.cs プロジェクト: DinkDev/Pliant
        public IIntermediateForestNode AddOrGetExistingIntermediateNode(IDottedRule dottedRule, int origin, int location)
        {
            int hash = ComputeHashCode(dottedRule, origin, location);

            IIntermediateForestNode intermediateNode = null;

            if (_intermediateNodes.TryGetValue(hash, out intermediateNode))
            {
                return(intermediateNode);
            }

            intermediateNode = new IntermediateForestNode(dottedRule, origin, location);
            _intermediateNodes.Add(hash, intermediateNode);
            return(intermediateNode);
        }
コード例 #9
0
        private static IList<IForestNode> GetFlattenedList(IIntermediateForestNode intermediate)
        {
            var children = new List<IForestNode>();
            foreach (var andNode in intermediate.Children)
            {
                foreach (var child in andNode.Children)
                {
                    switch (child)
                    {
                        case IIntermediateForestNode intermediateChild:
                            var childList = GetFlattenedList(intermediateChild);
                            children.AddRange(childList);
                            break;
                        default:
                            children.Add(child);
                            break;
                    }
                }
            }

            return children;
        }
コード例 #10
0
        public override void Visit(IIntermediateForestNode intermediateNode)
        {
            var currentAndNode = ForestDisambiguationAlgorithm.GetCurrentAndNode(intermediateNode);

            Visit(currentAndNode);
        }
コード例 #11
0
 public abstract void Visit(IIntermediateForestNode intermediateNode);
コード例 #12
0
 public override void Visit(IIntermediateForestNode intermediateNode)
 {
     VisitLog.Add(intermediateNode.ToString());
     foreach (var child in intermediateNode.Children)
         Visit(child);
 }
コード例 #13
0
 public override void Visit(IIntermediateForestNode intermediateNode)
 {
     var currentAndNode = ForestDisambiguationAlgorithm.GetCurrentAndNode(intermediateNode);
     Visit(currentAndNode);
 }
コード例 #14
0
 public abstract void Visit(IIntermediateForestNode intermediateNode);
コード例 #15
0
            public override void Visit(IIntermediateForestNode intermediateNode)
            {
                if (!_visited.Add(intermediateNode))
                    return;

                var childIndex = GetOrSetChildIndex(intermediateNode);
                var path = intermediateNode.Children[childIndex];

                Visit(path);
            }
コード例 #16
0
 private static string GetIntermediateNodeString(IIntermediateForestNode node)
 {
     return($"({node.DottedRule}, {node.Origin}, {node.Location})");
 }