bool ContractionHierarchiesClient::LoadData()
{
	QString filename = fileInDirectory( m_directory,"Contraction Hierarchies" );
	UnloadData();

	if ( !m_graph.loadGraph( filename, 1024 * 1024 * 4 ) )
		return false;

	m_namesFile.setFileName( filename + "_names" );
	if ( !openQFile( &m_namesFile, QIODevice::ReadOnly ) )
		return false;
	m_names = ( const char* ) m_namesFile.map( 0, m_namesFile.size() );
	if ( m_names == NULL )
		return false;
	m_namesFile.close();

	m_heapForward = new Heap( m_graph.numberOfNodes() );
	m_heapBackward = new Heap( m_graph.numberOfNodes() );

	QFile typeFile( filename + "_types" );
	if ( !openQFile( &typeFile, QIODevice::ReadOnly ) )
		return false;

	QByteArray buffer = typeFile.readAll();
	QString types = QString::fromUtf8( buffer.constData() );
	m_types = types.split( ';' );

	return true;
}
Example #2
0
void handleConsoleInput() {
    uint8_t retval;
	uint8_t index=0;
	uint8_t ch='0';
	SdFile finger;
    
    switch (console.keyValue()) {
        case _DIR_:
			console.printf("SOD:\r\n");
            root.ls(LS_DATE | LS_SIZE);
 			console.printf("EOD:\r\n");
			break;
        case _LSV_:
			console.printf("LSV:" BOM_VERSION "\r\n");
			break;
        case _TYP_:  
            typeFile(console.arguments());
            break;
        case _NSC_:  
			console.printf("SOD:\r\n");
			retval=networkScan();
			console.printf("EOD:\r\n");
            console.printf("\nDBG: found=%d\r\n",retval);
            break;
        case _NJN_:  
			//console.printf("SOD:\r\n");
			retval=networkJoin(console.arguments());
			//console.printf("EOD:\r\n");
            console.printf("\nDBG: joined=%s\r\n",retval?"TRUE":"FALSE");
            break;
        case _NPW_:  
			//console.printf("SOD:\r\n");
			retval=networkSetPassword(console.arguments());
			//console.printf("EOD:\r\n");
            console.printf("\nDBG: pwd set=%s\r\n",retval?"TRUE":"FALSE");
            break;
        case _NST_:  
			retval=networkStatus();
            console.printf("NST: %s\r\n",retval?"CONNECTED":"NOT CONNECTED");
            break;
		case _FMT_: // there really should be some REALLY do you mean this here but.....
			root.openRoot(&volume);
			if (finger.open(&root, ".", O_WRITE|O_READ)) {
				console.printf("\nDBG: Opened / \r\n");
				finger.rmRfStar();
			} else {
				console.printf("\nDBG: FAIL \r\n");
			}	
			break;
            
		case _TPT_:
			toPachube(1, console.arguments());
			break;
        case _TX2_:
            radio.printf("%s",console.arguments());
            index=0;
            // delay(1000);
            while (radio.available()) {
                inBuffer[index++]=ch=radio.read();
				if( index>= 99 || ((ch== '\n') || ch !='\r')) {
					inBuffer[index]='\0';
					console.puts(inBuffer);
					index=0; 
					delay(100);
				}
            } 
            inBuffer[index]='\0';
            console.puts(inBuffer);
			console.puts((char *) "\r\n");
            break;
// set to one to test output for.
#if 1
        case _TS1_: toPachube(0, console.arguments()); break;
        case _TS2_: toPachube(1, console.arguments()); break;
        case _TS3_: toPachube(2, console.arguments()); break;
        case _TS4_: toPachube(3, console.arguments()); break;
        case _TS5_: toPachube(4, console.arguments()); break;
        case _FAN_: toPachube(5, console.arguments()); break;
        case _CHL_: toPachube(6, console.arguments()); break;
        case _STC_: toPachube(7, console.arguments()); break;
#endif			

        case _PKY_:
            strncpy(pachubeKey, console.arguments(), MAX_PATCHUBE_KEY_LENGHT-1);
            stripcrlf(pachubeKey);
            break;
        case _PFD_:
            strncpy(pachubeFeed, console.arguments(), MAX_PATCHUBE_FEED_LENGHT-1);
            stripcrlf(pachubeFeed);
            break;
        case _SGT_ :
            readSettings();
            break;
        case _SSV_ :
            writeSettings();
            break;
            
        default:
            console.printf("DBG: forwarding (%s) to device\r\n",console.key());
            device.puts(console.line());
            //device.puts("\r\n");
            break;
    }
    
    
}
COptionTreeWrapper::COptionTreeWrapper(DWORD dwStyle, RECT rcRect, CWnd* pParentWnd, DWORD dwTreeOptions, UINT nID, CString basePath)
{
	m_viewName = _T("COptionTreeWrapper");	
	
	m_Style = dwStyle;
	m_Rect = rcRect;
	m_pParentWnd = pParentWnd;
	m_TreeOptions = dwTreeOptions;
	m_ID = nID;

	m_mTrees[NULL].m_Tree = new COptionTree();	
	m_mTrees[NULL].m_Tree->Create(dwStyle, rcRect, pParentWnd, dwTreeOptions, nID);
	m_mTrees[NULL].m_Tree->SetNotify(TRUE, pParentWnd);

	m_ToolBox = EngineGetToolBox();

	m_szBasePath = basePath;
	
	MAPTYPECREATEFUNC *createFuncs;
	CHashString typeInt(_T("int"));
	CHashString typeFloat(_T("float"));
	CHashString typeDouble(_T("double"));
	CHashString typeBool(_T("bool"));
	CHashString typeString(_T("string"));
	
	CHashString typeCheckBox(_T("check"));
	CHashString typeRadio(_T("radio"));
	CHashString typeSpinner(_T("spinner"));
	CHashString typeEdit(_T("edit"));
	CHashString typeStatic(_T("static"));
	CHashString typeHidden(_T("hidden"));
	CHashString typeFile(_T("file"));
	CHashString typeCombo(_T("combo"));
	CHashString typeColor(_T("color"));

	// setting up optiontree additem function calls
	createFuncs = new MAPTYPECREATEFUNC;
	createFuncs->insert( make_pair(typeInt.GetUniqueID(), &COptionTreeWrapper::SerializeSpinnerItemInt) );
	createFuncs->insert( make_pair(typeFloat.GetUniqueID(), &COptionTreeWrapper::SerializeSpinnerItemFloat) );
	createFuncs->insert( make_pair(typeDouble.GetUniqueID(), &COptionTreeWrapper::SerializeSpinnerItemDouble) );
	m_TypeFuncMap[typeSpinner.GetUniqueID()] = createFuncs;

	createFuncs = new MAPTYPECREATEFUNC;
	createFuncs->insert( make_pair(typeInt.GetUniqueID(), &COptionTreeWrapper::SerializeEditItemInt) );
	createFuncs->insert( make_pair(typeFloat.GetUniqueID(), &COptionTreeWrapper::SerializeEditItemFloat) );
	createFuncs->insert( make_pair(typeDouble.GetUniqueID(), &COptionTreeWrapper::SerializeEditItemDouble) );
	createFuncs->insert( make_pair(typeString.GetUniqueID(), &COptionTreeWrapper::SerializeEditItemString) );
	m_TypeFuncMap[typeEdit.GetUniqueID()] = createFuncs;

	createFuncs = new MAPTYPECREATEFUNC;
	createFuncs->insert( make_pair(typeInt.GetUniqueID(), &COptionTreeWrapper::SerializeStaticItemInt) );
	createFuncs->insert( make_pair(typeFloat.GetUniqueID(), &COptionTreeWrapper::SerializeStaticItemFloat) );
	createFuncs->insert( make_pair(typeDouble.GetUniqueID(), &COptionTreeWrapper::SerializeStaticItemDouble) );
	createFuncs->insert( make_pair(typeString.GetUniqueID(), &COptionTreeWrapper::SerializeStaticItemString) );
	m_TypeFuncMap[typeStatic.GetUniqueID()] = createFuncs;

	createFuncs = new MAPTYPECREATEFUNC;
	createFuncs->insert( make_pair(typeInt.GetUniqueID(), &COptionTreeWrapper::SerializeStaticItemInt) );
	createFuncs->insert( make_pair(typeFloat.GetUniqueID(), &COptionTreeWrapper::SerializeStaticItemFloat) );
	createFuncs->insert( make_pair(typeDouble.GetUniqueID(), &COptionTreeWrapper::SerializeStaticItemDouble) );
	createFuncs->insert( make_pair(typeString.GetUniqueID(), &COptionTreeWrapper::SerializeStaticItemString) );
	createFuncs->insert( make_pair(typeBool.GetUniqueID(), &COptionTreeWrapper::SerializeStaticItemBool) );
	m_TypeFuncMap[typeHidden.GetUniqueID()] = createFuncs;

	createFuncs = new MAPTYPECREATEFUNC;
	createFuncs->insert( make_pair(typeString.GetUniqueID(), &COptionTreeWrapper::SerializeFileItem) );
	m_TypeFuncMap[typeFile.GetUniqueID()] = createFuncs;

	createFuncs = new MAPTYPECREATEFUNC;
	createFuncs->insert( make_pair(typeString.GetUniqueID(), &COptionTreeWrapper::SerializeComboItem) );
	m_TypeFuncMap[typeCombo.GetUniqueID()] = createFuncs;

	createFuncs = new MAPTYPECREATEFUNC;
	createFuncs->insert( make_pair(typeBool.GetUniqueID(), &COptionTreeWrapper::SerializeCheckBoxItem) );
	m_TypeFuncMap[typeCheckBox.GetUniqueID()] = createFuncs;

	createFuncs = new MAPTYPECREATEFUNC;
	createFuncs->insert( make_pair(typeString.GetUniqueID(), &COptionTreeWrapper::SerializeRadioItem) );
	m_TypeFuncMap[typeRadio.GetUniqueID()] = createFuncs;

	createFuncs = new MAPTYPECREATEFUNC;
	createFuncs->insert( make_pair(typeInt.GetUniqueID(), &COptionTreeWrapper::SerializeColorItem) );
	m_TypeFuncMap[typeColor.GetUniqueID()] = createFuncs;

	// setting up coptiontreeitem create functions
	m_TreeItemCreateFuncs[typeSpinner.GetUniqueID()] = &COptionTreeWrapper::CreateSpinnerItem;
	m_TreeItemCreateFuncs[typeEdit.GetUniqueID()] = &COptionTreeWrapper::CreateEditItem;
	m_TreeItemCreateFuncs[typeStatic.GetUniqueID()] = &COptionTreeWrapper::CreateStaticItem;
	m_TreeItemCreateFuncs[typeHidden.GetUniqueID()] = &COptionTreeWrapper::CreateHiddenItem;
	m_TreeItemCreateFuncs[typeFile.GetUniqueID()] = &COptionTreeWrapper::CreateFileItem;
	m_TreeItemCreateFuncs[typeCheckBox.GetUniqueID()] = &COptionTreeWrapper::CreateCheckBoxItem;
	m_TreeItemCreateFuncs[typeRadio.GetUniqueID()] = &COptionTreeWrapper::CreateRadioItem;
	m_TreeItemCreateFuncs[typeCombo.GetUniqueID()] = &COptionTreeWrapper::CreateComboItem;
	m_TreeItemCreateFuncs[typeColor.GetUniqueID()] = &COptionTreeWrapper::CreateColorItem;	
 }
bool ContractionHierarchies::Preprocess( IImporter* importer, QString dir )
{
	QString filename = fileInDirectory( dir, "Contraction Hierarchies" );

	std::vector< IImporter::RoutingNode > inputNodes;
	std::vector< IImporter::RoutingEdge > inputEdges;

	if ( !importer->GetRoutingNodes( &inputNodes ) )
		return false;
	if ( !importer->GetRoutingEdges( &inputEdges ) )
		return false;

	unsigned numEdges = inputEdges.size();
	unsigned numNodes = inputNodes.size();

	Contractor* contractor = new Contractor( numNodes, inputEdges );
	std::vector< IImporter::RoutingEdge >().swap( inputEdges );
	contractor->Run();

	std::vector< Contractor::Witness > witnessList;
	contractor->GetWitnessList( witnessList );

	std::vector< ContractionCleanup::Edge > contractedEdges;
	std::vector< ContractionCleanup::Edge > contractedLoops;
	contractor->GetEdges( &contractedEdges );
	contractor->GetLoops( &contractedLoops );
	delete contractor;

	ContractionCleanup* cleanup = new ContractionCleanup( inputNodes.size(), contractedEdges, contractedLoops, witnessList );
	std::vector< ContractionCleanup::Edge >().swap( contractedEdges );
	std::vector< ContractionCleanup::Edge >().swap( contractedLoops );
	std::vector< Contractor::Witness >().swap( witnessList );
	cleanup->Run();

	std::vector< CompressedGraph::Edge > edges;
	std::vector< NodeID > map;
	cleanup->GetData( &edges, &map );
	delete cleanup;

	{
		std::vector< unsigned > edgeIDs( numEdges );
		for ( unsigned edge = 0; edge < edges.size(); edge++ ) {
			if ( edges[edge].data.shortcut )
				continue;
			unsigned id = 0;
			unsigned otherEdge = edge;
			while ( true ) {
				if ( otherEdge == 0 )
					break;
				otherEdge--;
				if ( edges[otherEdge].source != edges[edge].source )
					break;
				if ( edges[otherEdge].target != edges[edge].target )
					continue;
				if ( edges[otherEdge].data.shortcut )
					continue;
				id++;
			}
			edgeIDs[edges[edge].data.id] = id;
		}
		importer->SetEdgeIDMap( edgeIDs );
	}

	std::vector< IRouter::Node > nodes( numNodes );
	for ( std::vector< IImporter::RoutingNode >::const_iterator i = inputNodes.begin(), iend = inputNodes.end(); i != iend; i++ )
		nodes[map[i - inputNodes.begin()]].coordinate = i->coordinate;
	std::vector< IImporter::RoutingNode >().swap( inputNodes );

	std::vector< IRouter::Node > pathNodes;
	{
		std::vector< IImporter::RoutingNode > edgePaths;
		if ( !importer->GetRoutingEdgePaths( &edgePaths ) )
			return false;
		pathNodes.resize( edgePaths.size() );
		for ( unsigned i = 0; i < edgePaths.size(); i++ )
			pathNodes[i].coordinate = edgePaths[i].coordinate;
	}

	if ( !importer->GetRoutingEdges( &inputEdges ) )
		return false;

	{
		std::vector< QString > inputNames;
		if ( !importer->GetRoutingWayNames( &inputNames ) )
			return false;

		QFile nameFile( filename + "_names" );
		if ( !openQFile( &nameFile, QIODevice::WriteOnly ) )
			return false;

		std::vector< unsigned > nameMap( inputNames.size() );
		for ( unsigned name = 0; name < inputNames.size(); name++ ) {
			nameMap[name] = nameFile.pos();
			QByteArray buffer = inputNames[name].toUtf8();
			buffer.push_back( ( char ) 0 );
			nameFile.write( buffer );
		}

		nameFile.close();
		nameFile.open( QIODevice::ReadOnly );
		const char* test = ( const char* ) nameFile.map( 0, nameFile.size() );
		for ( unsigned name = 0; name < inputNames.size(); name++ ) {
			QString testName = QString::fromUtf8( test + nameMap[name] );
			assert( testName == inputNames[name] );
		}

		for ( unsigned edge = 0; edge < numEdges; edge++ )
			inputEdges[edge].nameID = nameMap[inputEdges[edge].nameID];
	}

	{
		std::vector< QString > inputTypes;
		if ( !importer->GetRoutingWayTypes( &inputTypes ) )
			return false;

		QFile typeFile( filename + "_types" );
		if ( !openQFile( &typeFile, QIODevice::WriteOnly ) )
			return false;

		QStringList typeList;
		for ( unsigned type = 0; type < inputTypes.size(); type++ )
			typeList.push_back( inputTypes[type] );

		typeFile.write( typeList.join( ";" ).toUtf8() );
	}

	for ( std::vector< IImporter::RoutingEdge >::iterator i = inputEdges.begin(), iend = inputEdges.end(); i != iend; i++ ) {
		i->source = map[i->source];
		i->target = map[i->target];
	}

	CompressedGraphBuilder* builder = new CompressedGraphBuilder( 1u << m_settings.blockSize, nodes, edges, inputEdges, pathNodes );
	if ( !builder->run( filename, &map ) )
		return false;
	delete builder;

	importer->SetIDMap( map );

	return true;
}