Removed Dead code

This commit is contained in:
Dennis Luxen 2011-03-10 16:01:44 +00:00
parent 75ba542c38
commit d2c532e4d5
3 changed files with 225 additions and 385 deletions

View File

@ -43,11 +43,11 @@ private:
}
};
#ifdef _MANYCORES
typedef BinaryHeap< NodeID, NodeID, int, _HeapData, DenseStorage<NodeID, NodeID> > _Heap;
typedef BinaryHeap< NodeID, NodeID, int, _HeapData, DenseStorage<NodeID, NodeID> > _Heap;
#else
typedef BinaryHeap< NodeID, NodeID, int, _HeapData > _Heap;
typedef BinaryHeap< NodeID, NodeID, int, _HeapData > _Heap;
#endif
struct _ThreadData {
struct _ThreadData {
_Heap* _heapForward;
_Heap* _heapBackward;
_ThreadData( NodeID nodes ) {
@ -59,15 +59,15 @@ private:
delete _heapBackward;
delete _heapForward;
}
};
union _MiddleName {
};
union _MiddleName {
NodeID nameID;
NodeID middle;
};
};
public:
struct Edge {
struct Edge {
NodeID source;
NodeID target;
struct EdgeData {
@ -97,23 +97,23 @@ public:
bool operator== ( const Edge& right ) const {
return ( source == right.source && target == right.target && data.distance == right.data.distance && data.shortcut == right.data.shortcut && data.forward == right.data.forward && data.backward == right.data.backward && data.middleName.middle == right.data.middleName.middle );
}
};
};
ContractionCleanup( int numNodes, const std::vector< Edge >& edges ) {
ContractionCleanup( int numNodes, const std::vector< Edge >& edges ) {
_graph = edges;
_numNodes = numNodes;
}
}
~ContractionCleanup() {
~ContractionCleanup() {
}
}
void Run() {
void Run() {
RemoveUselessShortcuts();
}
}
template< class EdgeT >
void GetData( std::vector< EdgeT >& edges ) {
template< class EdgeT >
void GetData( std::vector< EdgeT >& edges ) {
for ( int edge = 0, endEdges = ( int ) _graph.size(); edge != endEdges; ++edge ) {
EdgeT newEdge;
newEdge.source = _graph[edge].source;
@ -130,57 +130,57 @@ public:
edges.push_back( newEdge );
}
#ifdef _GLIBCXX_PARALLEL
__gnu_parallel::sort( edges.begin(), edges.end() );
__gnu_parallel::sort( edges.begin(), edges.end() );
#else
sort( edges.begin(), edges.end() );
#endif
}
}
private:
class AllowForwardEdge {
public:
class AllowForwardEdge {
public:
bool operator()( const Edge& data ) const {
return data.data.forward;
}
};
};
class AllowBackwardEdge {
public:
class AllowBackwardEdge {
public:
bool operator()( const Edge& data ) const {
return data.data.backward;
}
};
};
double _Timestamp() {
double _Timestamp() {
struct timeval tp;
gettimeofday(&tp, NULL);
return double(tp.tv_sec) + tp.tv_usec / 1000000.;
}
}
void BuildOutgoingGraph() {
void BuildOutgoingGraph() {
//sort edges by source
#ifdef _GLIBCXX_PARALLEL
__gnu_parallel::sort( _graph.begin(), _graph.end(), Edge::CompareBySource );
__gnu_parallel::sort( _graph.begin(), _graph.end(), Edge::CompareBySource );
#else
sort( _graph.begin(), _graph.end(), Edge::CompareBySource );
sort( _graph.begin(), _graph.end(), Edge::CompareBySource );
#endif
try {
try {
_firstEdge.resize( _numNodes + 1 );
} catch(...) {
} catch(...) {
cerr << "Not enough RAM on machine" << endl;
}
_firstEdge[0] = 0;
for ( NodeID i = 0, node = 0; i < ( NodeID ) _graph.size(); i++ ) {
}
_firstEdge[0] = 0;
for ( NodeID i = 0, node = 0; i < ( NodeID ) _graph.size(); i++ ) {
while ( _graph[i].source != node )
_firstEdge[++node] = i;
if ( i == ( NodeID ) _graph.size() - 1 )
while ( node < _numNodes )
_firstEdge[++node] = ( int ) _graph.size();
}
}
}
}
void RemoveUselessShortcuts() {
void RemoveUselessShortcuts() {
int maxThreads = omp_get_max_threads();
std::vector < _ThreadData* > threadData;
for ( int threadNum = 0; threadNum < maxThreads; ++threadNum ) {
@ -214,10 +214,6 @@ private:
int result = _ComputeDistance( _graph[i].source, _graph[i].target, threadData[omp_get_thread_num()] );
if ( result < _graph[i].data.distance ) {
_graph[i].data.forward = false;
Contractor::Witness temp;
temp.source = _graph[i].source;
temp.target = _graph[i].target;
temp.middleName.middle = _graph[i].data.middleName.middle;
}
}
if ( _graph[i].data.backward ) {
@ -225,10 +221,6 @@ private:
if ( result < _graph[i].data.distance ) {
_graph[i].data.backward = false;
Contractor::Witness temp;
temp.source = _graph[i].target;
temp.target = _graph[i].source;
temp.middleName.middle = _graph[i].data.middleName.middle;
}
}
}
@ -246,9 +238,9 @@ private:
for ( int threadNum = 0; threadNum < maxThreads; ++threadNum ) {
delete threadData[threadNum];
}
}
}
template< class EdgeAllowed, class StallEdgeAllowed > void _ComputeStep( _Heap* heapForward, _Heap* heapBackward, const EdgeAllowed& edgeAllowed, const StallEdgeAllowed& stallEdgeAllowed, NodeID* middle, int* targetDistance ) {
template< class EdgeAllowed, class StallEdgeAllowed > void _ComputeStep( _Heap* heapForward, _Heap* heapBackward, const EdgeAllowed& edgeAllowed, const StallEdgeAllowed& stallEdgeAllowed, NodeID* middle, int* targetDistance ) {
const NodeID node = heapForward->DeleteMin();
const int distance = heapForward->GetKey( node );
@ -284,9 +276,9 @@ private:
}
}
}
}
}
int _ComputeDistance( NodeID source, NodeID target, _ThreadData * data, std::vector< NodeID >* path = NULL ) {
int _ComputeDistance( NodeID source, NodeID target, _ThreadData * data, std::vector< NodeID >* path = NULL ) {
data->_heapForward->Clear();
data->_heapBackward->Clear();
//insert source into heap
@ -313,10 +305,10 @@ private:
return std::numeric_limits< unsigned >::max();
return targetDistance;
}
NodeID _numNodes;
std::vector< Edge > _graph;
std::vector< unsigned > _firstEdge;
}
NodeID _numNodes;
std::vector< Edge > _graph;
std::vector< unsigned > _firstEdge;
};
#endif // CONTRACTIONCLEANUP_H_INCLUDED

View File

@ -44,15 +44,6 @@ private:
NodeID nameID;
};
public:
struct Witness {
NodeID source;
NodeID target;
_MiddleName middleName;
};
private:
struct _EdgeData {
unsigned distance;
unsigned originalEdges : 29;
@ -78,7 +69,6 @@ private:
struct _ThreadData {
_Heap heap;
std::vector< _ImportEdge > insertedEdges;
std::vector< Witness > witnessList;
_ThreadData( NodeID nodes ): heap( nodes ) {
}
};

View File

@ -1,142 +0,0 @@
/*
open source routing machine
Copyright (C) Dennis Luxen, others 2010
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU AFFERO General Public License as published by
the Free Software Foundation; either version 3 of the License, or
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
or see http://www.gnu.org/licenses/agpl.txt.
*/
#ifndef CREATEGRAPH_H
#define GRAPHLOADER_H
#include <cassert>
#include <cmath>
#include <fstream>
#include <iostream>
#include <iomanip>
#include <vector>
#include <google/dense_hash_map>
#ifdef _GLIBCXX_PARALLEL
#include <parallel/algorithm>
#else
#include <algorithm>
#endif
#include "../DataStructures/ImportEdge.h"
#include "../typedefs.h"
typedef google::dense_hash_map<NodeID, NodeID> ExternalNodeMap;
template<typename EdgeT>
NodeID readOSRMGraphFromStream(istream &in, vector<EdgeT>& edgeList, vector<NodeInfo> * int2ExtNodeMap) {
NodeID n, source, target, id;
EdgeID m;
short locatable;
int dir, xcoord, ycoord;// direction (0 = open, 1 = forward, 2+ = open)
ExternalNodeMap ext2IntNodeMap;
ext2IntNodeMap.set_empty_key(UINT_MAX);
in >> n;
VERBOSE(cout << "Importing n = " << n << " nodes ..." << flush;)
for (NodeID i=0; i<n;i++) {
in >> id >> ycoord >> xcoord;
int2ExtNodeMap->push_back(NodeInfo(xcoord, ycoord, id));
ext2IntNodeMap.insert(make_pair(id, i));
}
in >> m;
VERBOSE(cout << " and " << m << " edges ..." << flush;)
edgeList.reserve(m);
for (EdgeID i=0; i<m; i++) {
EdgeWeight weight;
short type;
NodeID nameID;
int length;
in >> source >> target >> length >> dir >> weight >> type >> nameID;
assert(length > 0);
assert(weight > 0);
assert(0<=dir && dir<=2);
bool forward = true;
bool backward = true;
if (dir == 1) backward = false;
if (dir == 2) forward = false;
if(length == 0)
{ cerr << "loaded null length edge" << endl; exit(1); }
// translate the external NodeIDs to internal IDs
ExternalNodeMap::iterator intNodeID = ext2IntNodeMap.find(source);
if( ext2IntNodeMap.find(source) == ext2IntNodeMap.end())
{
cerr << "after " << edgeList.size() << " edges" << endl;
cerr << "->" << source << "," << target << "," << length << "," << dir << "," << weight << endl;
cerr << "unresolved source NodeID: " << source << endl; exit(0);
}
source = intNodeID->second;
intNodeID = ext2IntNodeMap.find(target);
if(ext2IntNodeMap.find(target) == ext2IntNodeMap.end()) { cerr << "unresolved target NodeID : " << target << endl; exit(0); }
target = intNodeID->second;
if(source == UINT_MAX || target == UINT_MAX) { cerr << "nonexisting source or target" << endl; exit(0); }
EdgeT inputEdge(source, target, nameID, weight, forward, backward, type );
edgeList.push_back(inputEdge);
}
ext2IntNodeMap.clear();
vector<ImportEdge>(edgeList.begin(), edgeList.end()).swap(edgeList); //remove excess candidates.
cout << "ok" << endl;
return n;
}
template<typename EdgeT>
void readHSGRFromStream(istream &in, vector<EdgeT> * edgeList) {
while(!in.eof())
{
EdgeT g;
EdgeData e;
int distance;
bool shortcut;
bool forward;
bool backward;
bool forwardTurn;
bool backwardTurn;
short type;
NodeID middle;
NodeID source;
NodeID target;
in.read((char *)&(distance), sizeof(int));
assert(distance > 0);
in.read((char *)&(forwardTurn), sizeof(bool));
in.read((char *)&(backwardTurn), sizeof(bool));
in.read((char *)&(shortcut), sizeof(bool));
in.read((char *)&(forward), sizeof(bool));
in.read((char *)&(backward), sizeof(bool));
in.read((char *)&(middle), sizeof(NodeID));
in.read((char *)&(type), sizeof(short));
in.read((char *)&(source), sizeof(NodeID));
in.read((char *)&(target), sizeof(NodeID));
e.backward = backward; e.distance = distance; e.forward = forward; e.middleName.middle = middle; e.shortcut = shortcut; e.type = type;
e.forwardTurn = forwardTurn; e.backwardTurn = backwardTurn;
g.data = e; g.source = source; g.target = target;
edgeList->push_back(g);
}
}
#endif // CREATEGRAPH_H