Using DeallocatingVector class instead of doing vector-swap-tricks
This commit is contained in:
parent
818c66e774
commit
417fcde9db
@ -137,7 +137,7 @@ void EdgeBasedGraphFactory::GetEdgeBasedEdges(DeallocatingVector< EdgeBasedEdge
|
|||||||
edgeBasedEdges.swap(outputEdgeList);
|
edgeBasedEdges.swap(outputEdgeList);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EdgeBasedGraphFactory::GetEdgeBasedNodes( std::vector< EdgeBasedNode> & nodes) {
|
void EdgeBasedGraphFactory::GetEdgeBasedNodes( DeallocatingVector< EdgeBasedNode> & nodes) {
|
||||||
BOOST_FOREACH(EdgeBasedNode & node, edgeBasedNodes){
|
BOOST_FOREACH(EdgeBasedNode & node, edgeBasedNodes){
|
||||||
assert(node.lat1 != INT_MAX); assert(node.lon1 != INT_MAX);
|
assert(node.lat1 != INT_MAX); assert(node.lon1 != INT_MAX);
|
||||||
assert(node.lat2 != INT_MAX); assert(node.lon2 != INT_MAX);
|
assert(node.lat2 != INT_MAX); assert(node.lon2 != INT_MAX);
|
||||||
@ -351,11 +351,11 @@ void EdgeBasedGraphFactory::Run(const char * originalEdgeDataFilename) {
|
|||||||
|
|
||||||
INFO("Sorting edge-based Nodes");
|
INFO("Sorting edge-based Nodes");
|
||||||
std::sort(edgeBasedNodes.begin(), edgeBasedNodes.end());
|
std::sort(edgeBasedNodes.begin(), edgeBasedNodes.end());
|
||||||
INFO("Removing duplicate nodes (if any)");
|
// INFO("Removing duplicate nodes (if any)");
|
||||||
edgeBasedNodes.erase( std::unique(edgeBasedNodes.begin(), edgeBasedNodes.end()), edgeBasedNodes.end() );
|
// edgeBasedNodes.erase( std::unique(edgeBasedNodes.begin(), edgeBasedNodes.end()), edgeBasedNodes.end() );
|
||||||
// INFO("Applying vector self-swap trick to free up memory");
|
// INFO("Applying vector self-swap trick to free up memory");
|
||||||
// INFO("size: " << edgeBasedNodes.size() << ", cap: " << edgeBasedNodes.capacity());
|
// INFO("size: " << edgeBasedNodes.size() << ", cap: " << edgeBasedNodes.capacity());
|
||||||
std::vector<EdgeBasedNode>(edgeBasedNodes).swap(edgeBasedNodes);
|
// std::vector<EdgeBasedNode>(edgeBasedNodes).swap(edgeBasedNodes);
|
||||||
// INFO("size: " << edgeBasedNodes.size() << ", cap: " << edgeBasedNodes.capacity());
|
// INFO("size: " << edgeBasedNodes.size() << ", cap: " << edgeBasedNodes.capacity());
|
||||||
INFO("Node-based graph contains " << nodeBasedEdgeCounter << " edges");
|
INFO("Node-based graph contains " << nodeBasedEdgeCounter << " edges");
|
||||||
// INFO("Edge-based graph contains " << edgeBasedEdges.size() << " edges, blowup is " << 2*((double)edgeBasedEdges.size()/(double)nodeBasedEdgeCounter));
|
// INFO("Edge-based graph contains " << edgeBasedEdges.size() << " edges, blowup is " << 2*((double)edgeBasedEdges.size()/(double)nodeBasedEdgeCounter));
|
||||||
|
@ -105,10 +105,10 @@ private:
|
|||||||
RestrictionMap _restrictionMap;
|
RestrictionMap _restrictionMap;
|
||||||
|
|
||||||
|
|
||||||
DeallocatingVector<EdgeBasedEdge> edgeBasedEdges;
|
DeallocatingVector<EdgeBasedEdge> edgeBasedEdges;
|
||||||
std::vector<EdgeBasedNode> edgeBasedNodes;
|
DeallocatingVector<EdgeBasedNode> edgeBasedNodes;
|
||||||
std::vector<OriginalEdgeData> originalEdgeData;
|
std::vector<OriginalEdgeData> originalEdgeData;
|
||||||
std::vector<NodeInfo> inputNodeInfoList;
|
std::vector<NodeInfo> inputNodeInfoList;
|
||||||
|
|
||||||
NodeID CheckForEmanatingIsOnlyTurn(const NodeID u, const NodeID v) const;
|
NodeID CheckForEmanatingIsOnlyTurn(const NodeID u, const NodeID v) const;
|
||||||
bool CheckIfTurnIsRestricted(const NodeID u, const NodeID v, const NodeID w) const;
|
bool CheckIfTurnIsRestricted(const NodeID u, const NodeID v, const NodeID w) const;
|
||||||
@ -131,7 +131,7 @@ public:
|
|||||||
|
|
||||||
void Run(const char * originalEdgeDataFilename);
|
void Run(const char * originalEdgeDataFilename);
|
||||||
void GetEdgeBasedEdges( DeallocatingVector< EdgeBasedEdge >& edges );
|
void GetEdgeBasedEdges( DeallocatingVector< EdgeBasedEdge >& edges );
|
||||||
void GetEdgeBasedNodes( std::vector< EdgeBasedNode> & nodes);
|
void GetEdgeBasedNodes( DeallocatingVector< EdgeBasedNode> & nodes);
|
||||||
void GetOriginalEdgeData( std::vector< OriginalEdgeData> & originalEdgeData);
|
void GetOriginalEdgeData( std::vector< OriginalEdgeData> & originalEdgeData);
|
||||||
short AnalyzeTurn(const NodeID u, const NodeID v, const NodeID w) const;
|
short AnalyzeTurn(const NodeID u, const NodeID v, const NodeID w) const;
|
||||||
unsigned GetNumberOfNodes() const;
|
unsigned GetNumberOfNodes() const;
|
||||||
|
@ -40,6 +40,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <boost/unordered_map.hpp>
|
#include <boost/unordered_map.hpp>
|
||||||
|
|
||||||
|
#include "DeallocatingVector.h"
|
||||||
#include "ExtractorStructs.h"
|
#include "ExtractorStructs.h"
|
||||||
#include "GridEdge.h"
|
#include "GridEdge.h"
|
||||||
#include "Percent.h"
|
#include "Percent.h"
|
||||||
@ -88,7 +89,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename EdgeT>
|
template<typename EdgeT>
|
||||||
inline void ConstructGrid(std::vector<EdgeT> & edgeList, char * ramIndexOut, char * fileIndexOut) {
|
inline void ConstructGrid(DeallocatingVector<EdgeT> & edgeList, char * ramIndexOut, char * fileIndexOut) {
|
||||||
//TODO: Implement this using STXXL-Streams
|
//TODO: Implement this using STXXL-Streams
|
||||||
#ifndef ROUTED
|
#ifndef ROUTED
|
||||||
Percent p(edgeList.size());
|
Percent p(edgeList.size());
|
||||||
|
@ -161,7 +161,7 @@ int main (int argc, char *argv[]) {
|
|||||||
// oedOutFile.close();
|
// oedOutFile.close();
|
||||||
// std::vector<OriginalEdgeData>().swap(originalEdgeData);
|
// std::vector<OriginalEdgeData>().swap(originalEdgeData);
|
||||||
|
|
||||||
std::vector<EdgeBasedGraphFactory::EdgeBasedNode> nodeBasedEdgeList;
|
DeallocatingVector<EdgeBasedGraphFactory::EdgeBasedNode> nodeBasedEdgeList;
|
||||||
edgeBasedGraphFactory->GetEdgeBasedNodes(nodeBasedEdgeList);
|
edgeBasedGraphFactory->GetEdgeBasedNodes(nodeBasedEdgeList);
|
||||||
delete edgeBasedGraphFactory;
|
delete edgeBasedGraphFactory;
|
||||||
double expansionHasFinishedTime = get_timestamp() - startupTime;
|
double expansionHasFinishedTime = get_timestamp() - startupTime;
|
||||||
@ -176,7 +176,7 @@ int main (int argc, char *argv[]) {
|
|||||||
delete writeableGrid;
|
delete writeableGrid;
|
||||||
CRC32 crc32;
|
CRC32 crc32;
|
||||||
unsigned crc32OfNodeBasedEdgeList = crc32((char *)&(nodeBasedEdgeList[0]), nodeBasedEdgeList.size()*sizeof(EdgeBasedGraphFactory::EdgeBasedNode));
|
unsigned crc32OfNodeBasedEdgeList = crc32((char *)&(nodeBasedEdgeList[0]), nodeBasedEdgeList.size()*sizeof(EdgeBasedGraphFactory::EdgeBasedNode));
|
||||||
std::vector<EdgeBasedGraphFactory::EdgeBasedNode>().swap(nodeBasedEdgeList);
|
nodeBasedEdgeList.clear();
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* Contracting the edge-expanded graph
|
* Contracting the edge-expanded graph
|
||||||
|
Loading…
Reference in New Issue
Block a user