示例#1
0
			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();
			}
示例#2
0
		public static void VisitChildChains(GISADataset CurrentDataSet, GISADataset.NivelRow CurrentNivel, INivelChainVisitor CurrentVisitor)
		{
			// TODO Visit the graph downwards, Width-First.
			new WidthFirstVisitorChildren().Run(CurrentDataSet, CurrentNivel, CurrentVisitor);
		}