Adding util method to load hsgr graph without any edge data type.

This commit is contained in:
Dennis Luxen 2011-07-07 08:15:56 +00:00
parent a8ad4695aa
commit ac3ccf1d7a

View File

@ -289,9 +289,9 @@ NodeID readDTMPGraphFromStream(istream &in, vector<EdgeT>& edgeList, vector<Node
cout << "ok" << endl; cout << "ok" << endl;
return n; return n;
} }
template<typename EdgeT>
NodeID readDDSGGraphFromStream(istream &in, vector<EdgeT>& edgeList, vector<NodeInfo> * int2ExtNodeMap) { template<typename EdgeT>
NodeID readDDSGGraphFromStream(istream &in, vector<EdgeT>& edgeList, vector<NodeID> & int2ExtNodeMap) {
ExternalNodeMap nodeMap; nodeMap.set_empty_key(UINT_MAX); ExternalNodeMap nodeMap; nodeMap.set_empty_key(UINT_MAX);
NodeID n, source, target; NodeID n, source, target;
unsigned numberOfNodes = 0; unsigned numberOfNodes = 0;
@ -301,8 +301,9 @@ NodeID readDDSGGraphFromStream(istream &in, vector<EdgeT>& edgeList, vector<Node
in >> d; in >> d;
in >> n; in >> n;
in >> m; in >> m;
#ifndef DEBUG
std::cout << "expecting " << n << " nodes and " << m << " edges ..." << flush; std::cout << "expecting " << n << " nodes and " << m << " edges ..." << flush;
#endif
edgeList.reserve(m); edgeList.reserve(m);
for (EdgeID i=0; i<m; i++) { for (EdgeID i=0; i<m; i++) {
EdgeWeight weight; EdgeWeight weight;
@ -327,26 +328,29 @@ NodeID readDDSGGraphFromStream(istream &in, vector<EdgeT>& edgeList, vector<Node
if( nodeMap.find(source) == nodeMap.end()) { if( nodeMap.find(source) == nodeMap.end()) {
nodeMap.insert(std::make_pair(source, numberOfNodes )); nodeMap.insert(std::make_pair(source, numberOfNodes ));
int2ExtNodeMap.push_back(source);
numberOfNodes++; numberOfNodes++;
} }
if( nodeMap.find(target) == nodeMap.end()) { if( nodeMap.find(target) == nodeMap.end()) {
nodeMap.insert(std::make_pair(target, numberOfNodes)); nodeMap.insert(std::make_pair(target, numberOfNodes));
int2ExtNodeMap.push_back(target);
numberOfNodes++; numberOfNodes++;
} }
EdgeT inputEdge(source, target, 0, weight, forward, backward, 1 ); EdgeT inputEdge(source, target, 0, weight, forward, backward, 1 );
edgeList.push_back(inputEdge); edgeList.push_back(inputEdge);
} }
vector<EdgeT>(edgeList.begin(), edgeList.end()).swap(edgeList); //remove excess candidates. vector<EdgeT>(edgeList.begin(), edgeList.end()).swap(edgeList); //remove excess candidates.
cout << "ok" << endl;
std::cout << "imported " << numberOfNodes << " nodes and " << edgeList.size() << " edges" << std::endl; // cout << "ok" << endl;
// std::cout << "imported " << numberOfNodes << " nodes and " << edgeList.size() << " edges" << std::endl;
nodeMap.clear(); nodeMap.clear();
return numberOfNodes; return numberOfNodes;
} }
template<typename EdgeT> template<typename EdgeT>
unsigned readHSGRFromStream(istream &in, vector<EdgeT> * edgeList) { unsigned readHSGRFromStream(istream &in, vector<EdgeT> * edgeList) {
unsigned numberOfNodes = 0; unsigned numberOfNodes = 0;
ExternalNodeMap nodeMap; nodeMap.set_empty_key(UINT_MAX); ExternalNodeMap nodeMap; nodeMap.set_empty_key(UINT_MAX);
while(!in.eof()) { while(!in.eof()) {
EdgeT g; EdgeT g;
EdgeData e; EdgeData e;
@ -370,17 +374,63 @@ unsigned readHSGRFromStream(istream &in, vector<EdgeT> * edgeList) {
in.read((char *)&(source), sizeof(NodeID)); in.read((char *)&(source), sizeof(NodeID));
in.read((char *)&(target), 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.backward = backward; e.distance = distance; e.forward = forward; e.middleName.middle = middle; e.shortcut = shortcut; e.type = type;
g.data = e; g.source = source; g.target = target; g.data = e;
g.source = source; g.target = target;
if(source > numberOfNodes) if(source > numberOfNodes)
numberOfNodes = source; numberOfNodes = source;
if(target > numberOfNodes) if(target > numberOfNodes)
numberOfNodes = target; numberOfNodes = target;
if(middle > numberOfNodes) if(middle > numberOfNodes)
numberOfNodes = middle; numberOfNodes = middle;
edgeList->push_back(g); edgeList->push_back(g);
} }
return numberOfNodes+1; return numberOfNodes+1;
} }
template<typename EdgeT>
unsigned readHSGRFromStreamWithOutEdgeData(const char * hsgrName, vector<EdgeT> * edgeList) {
std::ifstream hsgrInStream(hsgrName, std::ios::binary);
unsigned numberOfNodes = 0;
ExternalNodeMap nodeMap; nodeMap.set_empty_key(UINT_MAX);
while(!hsgrInStream.eof()) {
EdgeT g;
// EdgeData e;
int distance;
bool shortcut;
bool forward;
bool backward;
short type;
NodeID middle;
NodeID source;
NodeID target;
hsgrInStream.read((char *)&(distance), sizeof(int));
assert(distance > 0);
hsgrInStream.read((char *)&(shortcut), sizeof(bool));
hsgrInStream.read((char *)&(forward), sizeof(bool));
hsgrInStream.read((char *)&(backward), sizeof(bool));
hsgrInStream.read((char *)&(middle), sizeof(NodeID));
hsgrInStream.read((char *)&(type), sizeof(short));
hsgrInStream.read((char *)&(source), sizeof(NodeID));
hsgrInStream.read((char *)&(target), sizeof(NodeID));
g.data.backward = backward; g.data.distance = distance; g.data.forward = forward; g.data.shortcut = shortcut;
g.source = source; g.target = target;
if( nodeMap.find(source) == nodeMap.end()) {
nodeMap[numberOfNodes] = source;
numberOfNodes++;
}
if( nodeMap.find(target) == nodeMap.end()) {
nodeMap[numberOfNodes] = target;
numberOfNodes++;
}
edgeList->push_back(g);
}
hsgrInStream.close();
return numberOfNodes;
}
#endif // GRAPHLOADER_H #endif // GRAPHLOADER_H