Exemple #1
0
        /// <summary>
        /// Breadth-first walk of the tree
        /// </summary>
        /// <param name="visit">Visit type delegate</param>
        public void WalkTree(VisitNode visitNode, VisitEdge visitEdge)
        {
            Queue <Node> walkingQueue = new Queue <Node>();

            for (walkingQueue.Enqueue(this.RootNode); walkingQueue.Count > 0;)
            {
                var currentNode = walkingQueue.Dequeue();
                visitNode((int)currentNode.Label);
                foreach (var edge in currentNode.Edges)
                {
                    walkingQueue.Enqueue(edge.Value.EndNode);
                    visitEdge((int)currentNode.Label, (int)edge.Value.EndNode.Label, edge.Value.Start, NormalizeEndValue(edge.Value.End));
                }
            }
        }
        private void OnVisitEdge(TEdge edge)
        {
            Debug.Assert(edge != null);

            VisitEdge?.Invoke(edge);
        }
Exemple #3
0
        /// <summary>
        /// Breadth-first walk of the tree
        /// </summary>
        /// <param name="visit">Visit type delegate</param>
        public void WalkTree(VisitNode visitNode, VisitEdge visitEdge)
        {
            Queue<Node> walkingQueue = new Queue<Node>();

            for (walkingQueue.Enqueue(this.RootNode); walkingQueue.Count > 0; )
            {
                var currentNode = walkingQueue.Dequeue();
                visitNode((int)currentNode.Label);
                foreach (var edge in currentNode.Edges)
                {
                    walkingQueue.Enqueue(edge.Value.EndNode);
                    visitEdge((int)currentNode.Label, (int)edge.Value.EndNode.Label, edge.Value.Start, NormalizeEndValue(edge.Value.End));
                }
            }
        }