public void Run(GISADataset CurrentDataSet, GISADataset.NivelRow CurrentNivel, INivelChainVisitor CurrentVisitor) { Queue PendingNivel = new Queue(); Stack ContextNivel = new Stack(); PendingNivel.Enqueue(CurrentNivel); CurrentVisitor.InitVisit(); while (PendingNivel.Count > 0) { GISADataset.NivelRow CursorNivel = (GISADataset.NivelRow)(PendingNivel.Dequeue()); if (CursorNivel == null) { ContextNivel.Pop(); } else { ContextNivel.Push(CursorNivel); GISADataset.NivelRow[] ContextNivelEx = null; ContextNivelEx = new GISADataset.NivelRow[ContextNivel.Count]; ContextNivel.CopyTo(ContextNivelEx, 0); CurrentVisitor.Visit(CurrentDataSet, ContextNivelEx); foreach (GISADataset.RelacaoHierarquicaRow rhRow in GetNextNivelRows(CurrentDataSet, CursorNivel)) { PendingNivel.Enqueue(rhRow.NivelRowByNivelRelacaoHierarquica); } PendingNivel.Enqueue(null); } } CurrentVisitor.DoneVisit(); }
public static void VisitChildChains(GISADataset CurrentDataSet, GISADataset.NivelRow CurrentNivel, INivelChainVisitor CurrentVisitor) { // TODO Visit the graph downwards, Width-First. new WidthFirstVisitorChildren().Run(CurrentDataSet, CurrentNivel, CurrentVisitor); }