Ejemplo n.º 1
0
TraversorCell<MAP, ORBIT, OPT>::TraversorCell(const MAP& map, bool forceDartMarker) :
	m(map),
	dmark(NULL),
	cmark(NULL),
	quickTraversal(NULL),
	current(NIL),
	firstTraversal(true)
{
	dimension = map.dimension();

	switch(OPT)
	{
		case FORCE_DART_MARKING:
			dmark = new DartMarker<MAP>(map) ;
			break;
		case FORCE_CELL_MARKING:
			cmark = new CellMarker<MAP, ORBIT>(map) ;
			break;
		case FORCE_QUICK_TRAVERSAL:
			quickTraversal = map.template getQuickTraversal<ORBIT>() ;
			assert(quickTraversal != NULL);
			cont = &(map.template getAttributeContainer<ORBIT>()) ;
			break;
		case AUTO:
			if(forceDartMarker)
				dmark = new DartMarker<MAP>(map) ;
			else
			{
				quickTraversal = map.template getQuickTraversal<ORBIT>() ;
				if(quickTraversal != NULL)
				{
					cont = &(map.template getAttributeContainer<ORBIT>()) ;

				}
				else
				{
					if(map.template isOrbitEmbedded<ORBIT>())
						cmark = new CellMarker<MAP, ORBIT>(map) ;
					else
						dmark = new DartMarker<MAP>(map) ;
				}
			}
			break;
		default:
			break;
	}
}