Adding util method to load hsgr graph without any edge data type.
This commit is contained in:
parent
a8ad4695aa
commit
ac3ccf1d7a
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user