nompute a vector<bool> that indicates if it's possible at all to take a turn at a certain node

This commit is contained in:
Dennis Luxen 2010-09-29 16:40:36 +00:00
parent 676f64b0ef
commit 94cfb4aad7
3 changed files with 35 additions and 6 deletions

View File

@ -107,10 +107,7 @@ public:
} }
void Run() { void Run() {
double time = _Timestamp();
RemoveUselessShortcuts(); RemoveUselessShortcuts();
time = _Timestamp() - time;
cout << "Postprocessing Time: " << time << " s" << endl;
} }
template< class EdgeT > template< class EdgeT >

View File

@ -274,7 +274,7 @@ public:
} }
template< class InputEdge > template< class InputEdge >
void checkForAllOrigEdges(std::vector< InputEdge >& inputEdges) void CheckForAllOrigEdges(std::vector< InputEdge >& inputEdges)
{ {
for(unsigned int i = 0; i < inputEdges.size(); i++) for(unsigned int i = 0; i < inputEdges.size(); i++)
{ {
@ -295,6 +295,29 @@ public:
} }
} }
template< class InputEdge >
void ComputeTurnInfoVector(std::vector< InputEdge >& inputEdges, std::vector<bool> * forwardTurnInfo, std::vector<bool> * backwardTurnInfo)
{
forwardTurnInfo->resize(inputEdges.size(), false);
backwardTurnInfo->resize(inputEdges.size(), false);
for(unsigned n = 0; n < inputEdges.size(); n++) {
if(inputEdges[n].data.forward)
{
NodeID target = inputEdges[n].target;
if(_graph->BeginEdges(target)+1 < _graph->EndEdges(target)) {
forwardTurnInfo->at(n) = true;
}
}
if(inputEdges[n].data.backward)
{
NodeID source = inputEdges[n].source;
if(_graph->BeginEdges(source)+1 < _graph->EndEdges(source)) {
backwardTurnInfo->at(n) = true;
}
}
}
}
void Run() { void Run() {
const NodeID numberOfNodes = _graph->GetNumberOfNodes(); const NodeID numberOfNodes = _graph->GetNumberOfNodes();
_LogData log; _LogData log;
@ -480,7 +503,6 @@ public:
} }
private: private:
double _Timestamp() { double _Timestamp() {
return time(NULL); return time(NULL);
} }

View File

@ -132,7 +132,7 @@ int main (int argc, char *argv[])
contractor->Run(); contractor->Run();
cout << "checking data sanity ..." << flush; cout << "checking data sanity ..." << flush;
contractor->checkForAllOrigEdges(edgeList); contractor->CheckForAllOrigEdges(edgeList);
cout << "ok" << endl; cout << "ok" << endl;
std::vector< ContractionCleanup::Edge > contractedEdges; std::vector< ContractionCleanup::Edge > contractedEdges;
contractor->GetEdges( contractedEdges ); contractor->GetEdges( contractedEdges );
@ -143,6 +143,14 @@ int main (int argc, char *argv[])
std::vector< GridEdge> cleanedEdgeList; std::vector< GridEdge> cleanedEdgeList;
cleanup->GetData(cleanedEdgeList); cleanup->GetData(cleanedEdgeList);
cout << "computing turn vector info ..." << flush;
vector<bool> * forwardTurnInfo = new vector<bool>();
vector<bool> * backwardTurnInfo = new vector<bool>();
contractor->ComputeTurnInfoVector(cleanedEdgeList, forwardTurnInfo, backwardTurnInfo);
assert(backwardTurnInfo->size() == forwardTurnInfo->size());
//todo: serialize info somewhere
cout << "ok" << endl;
ofstream edgeOutFile(edgeOut, ios::binary); ofstream edgeOutFile(edgeOut, ios::binary);
//Serializing the edge list. //Serializing the edge list.
@ -182,5 +190,7 @@ int main (int argc, char *argv[])
delete cleanup; delete cleanup;
delete contractor; delete contractor;
delete forwardTurnInfo;
delete backwardTurnInfo;
cout << "finished" << endl; cout << "finished" << endl;
} }