示例#1
0
inline void PBFParser::ParseData() {
	while (true) {
		_ThreadData *threadData;
		threadDataQueue->wait_and_pop(threadData);
		if( NULL==threadData ) {
			SimpleLogger().Write() << "Parse Data Thread Finished";
			threadDataQueue->push(NULL); // Signal end of data for other threads
			break;
		}

		loadBlock(threadData);

		for(int i = 0, groupSize = threadData->PBFprimitiveBlock.primitivegroup_size(); i < groupSize; ++i) {
			threadData->currentGroupID = i;
			loadGroup(threadData);

			if(threadData->entityTypeIndicator == TypeNode) {
				parseNode(threadData);
			}
			if(threadData->entityTypeIndicator == TypeWay) {
				parseWay(threadData);
			}
			if(threadData->entityTypeIndicator == TypeRelation) {
				parseRelation(threadData);
			}
			if(threadData->entityTypeIndicator == TypeDenseNode) {
				parseDenseNode(threadData);
			}
		}

		delete threadData;
		threadData = NULL;
	}
}
示例#2
0
文件: PBFParser.cpp 项目: fredj/osrm
inline void PBFParser::ParseData()
{
    tbb::task_scheduler_init init(num_parser_threads);

    while (true)
    {
        ParserThreadData *thread_data;
        thread_data_queue->wait_and_pop(thread_data);
        if (nullptr == thread_data)
        {
            thread_data_queue->push(nullptr); // Signal end of data for other threads
            break;
        }

        loadBlock(thread_data);

        int group_size = thread_data->PBFprimitiveBlock.primitivegroup_size();
        for (int i = 0; i < group_size; ++i)
        {
            thread_data->currentGroupID = i;
            loadGroup(thread_data);

            if (thread_data->entityTypeIndicator == TypeNode)
            {
                parseNode(thread_data);
            }
            if (thread_data->entityTypeIndicator == TypeWay)
            {
                parseWay(thread_data);
            }
            if (thread_data->entityTypeIndicator == TypeRelation)
            {
                parseRelation(thread_data);
            }
            if (thread_data->entityTypeIndicator == TypeDenseNode)
            {
                parseDenseNode(thread_data);
            }
        }

        delete thread_data;
        thread_data = nullptr;
    }
}