Skipping ContractionCleantup entirely. Avoids a big allocation. Removing

DELETE() macro.
This commit is contained in:
DennisOSRM 2012-04-12 18:53:01 +02:00
parent b16f3f91d9
commit 8377e411cb
7 changed files with 35 additions and 29 deletions

View File

@ -69,6 +69,11 @@ public:
bool forward:1;
bool backward:1;
} data;
bool operator<( const Edge& right ) const {
if ( source != right.source )
return source < right.source;
return target < right.target;
}
//sorts by source and other attributes
static bool CompareBySource( const Edge& left, const Edge& right ) {

View File

@ -67,7 +67,7 @@ public:
}
virtual ~ViaRoutePlugin() {
DELETE( searchEngine );
delete searchEngine;
}
std::string GetDescriptor() const { return pluginDescriptorString; }
@ -139,6 +139,7 @@ public:
}
reply.status = http::Reply::ok;
//TODO: Move to member as smart pointer
BaseDescriptor<SearchEngine<EdgeData, StaticGraph<EdgeData> > > * desc;
std::string JSONParameter = routeParameters.options.Find("jsonp");
if("" != JSONParameter) {
@ -234,7 +235,7 @@ public:
break;
}
DELETE( desc );
delete desc;
return;
}
private:

View File

@ -44,7 +44,7 @@ public:
for(unsigned i = 0; i < _pluginVector.size(); i++) {
BasePlugin * tempPointer = _pluginVector[i];
DELETE( tempPointer );
delete tempPointer;
}
}

View File

@ -22,7 +22,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
#include "NASAGridSquare.h"
NasaGridSquare::~NasaGridSquare() {
DELETE(elevationMap);
delete elevationMap;
}
std::string NasaGridSquare::make_filename(const char* ext) const {
@ -66,7 +66,7 @@ void NasaGridSquare::load(const char* filename) {
INFO("uncompressed: " << stat.size);
INFO("compressed: " << stat.comp_size);
num_bytes = stat.size;
DELETE(elevationMap);
delete elevationMap;
elevationMap = new char[stat.size];
zip_file * file = zip_fopen_index(test, 0, 0 );

View File

@ -131,13 +131,13 @@ int main (int argc, char *argv[]) {
std::vector<EdgeBasedGraphFactory::EdgeBasedNode> nodeBasedEdgeList;
edgeBasedGraphFactory->GetEdgeBasedNodes(nodeBasedEdgeList);
DELETE(edgeBasedGraphFactory);
delete edgeBasedGraphFactory;
double expansionHasFinishedTime = get_timestamp() - startupTime;
WritableGrid * writeableGrid = new WritableGrid();
INFO("building grid ...");
writeableGrid->ConstructGrid(nodeBasedEdgeList, ramIndexOut, fileIndexOut);
DELETE( writeableGrid );
delete writeableGrid;
CRC32 crc32;
unsigned crc32OfNodeBasedEdgeList = crc32((char *)&(nodeBasedEdgeList[0]), nodeBasedEdgeList.size()*sizeof(EdgeBasedGraphFactory::EdgeBasedNode));
// INFO("CRC32 of data is " << crc32OfNodeBasedEdgeList);
@ -164,27 +164,27 @@ int main (int argc, char *argv[]) {
contractor->Run();
INFO("Contraction took " << get_timestamp() - contractionStartedTimestamp << " sec");
std::vector< ContractionCleanup::Edge > contractedEdges;
contractor->GetEdges( contractedEdges );
std::vector< ContractionCleanup::Edge > contractedEdgeList;
contractor->GetEdges( contractedEdgeList );
delete contractor;
ContractionCleanup * cleanup = new ContractionCleanup(edgeBasedNodeNumber, contractedEdges);
contractedEdges.clear();
std::vector<ContractionCleanup::Edge>().swap(contractedEdges);
cleanup->Run();
std::vector< InputEdge> cleanedEdgeList;
cleanup->GetData(cleanedEdgeList);
DELETE( cleanup );
// ContractionCleanup * cleanup = new ContractionCleanup(edgeBasedNodeNumber, contractedEdges);
// contractedEdges.clear();
// std::vector<ContractionCleanup::Edge>().swap(contractedEdges);
// cleanup->Run();
//
// std::vector< InputEdge> cleanedEdgeList;
// cleanup->GetData(cleanedEdgeList);
// delete cleanup;
INFO("Building Node Array");
sort(cleanedEdgeList.begin(), cleanedEdgeList.end());
sort(contractedEdgeList.begin(), contractedEdgeList.end());
unsigned numberOfNodes = 0;
unsigned numberOfEdges = cleanedEdgeList.size();
unsigned numberOfEdges = contractedEdgeList.size();
INFO("Serializing compacted graph");
ofstream edgeOutFile(edgeOut, ios::binary);
BOOST_FOREACH(InputEdge & edge, cleanedEdgeList) {
BOOST_FOREACH(ContractionCleanup::Edge & edge, contractedEdgeList) {
if(edge.source > numberOfNodes) {
numberOfNodes = edge.source;
}
@ -201,7 +201,7 @@ int main (int argc, char *argv[]) {
StaticGraph<EdgeData>::EdgeIterator position = 0;
for ( StaticGraph<EdgeData>::NodeIterator node = 0; node <= numberOfNodes; ++node ) {
StaticGraph<EdgeData>::EdgeIterator lastEdge = edge;
while ( edge < numberOfEdges && cleanedEdgeList[edge].source == node )
while ( edge < numberOfEdges && contractedEdgeList[edge].source == node )
++edge;
_nodes[node].firstEdge = position; //=edge
position += edge - lastEdge; //remove
@ -219,11 +219,11 @@ int main (int argc, char *argv[]) {
StaticGraph<EdgeData>::_StrEdge currentEdge;
for ( StaticGraph<EdgeData>::NodeIterator node = 0; node < numberOfNodes; ++node ) {
for ( StaticGraph<EdgeData>::EdgeIterator i = _nodes[node].firstEdge, e = _nodes[node+1].firstEdge; i != e; ++i ) {
assert(node != cleanedEdgeList[edge].target);
currentEdge.target = cleanedEdgeList[edge].target;
currentEdge.data = cleanedEdgeList[edge].data;
assert(node != contractedEdgeList[edge].target);
currentEdge.target = contractedEdgeList[edge].target;
currentEdge.data = contractedEdgeList[edge].data;
if(currentEdge.data.distance <= 0) {
INFO("Edge: " << i << ",source: " << cleanedEdgeList[edge].source << ", target: " << cleanedEdgeList[edge].target << ", dist: " << currentEdge.data.distance);
INFO("Edge: " << i << ",source: " << contractedEdgeList[edge].source << ", target: " << contractedEdgeList[edge].target << ", dist: " << currentEdge.data.distance);
ERR("Failed at edges of node " << node << " of " << numberOfNodes);
}
//Serialize edges
@ -237,7 +237,7 @@ int main (int argc, char *argv[]) {
INFO("Contraction: " << (edgeBasedNodeNumber/expansionHasFinishedTime) << " nodes/sec and "<< usedEdgeCounter/endTime << " edges/sec");
edgeOutFile.close();
cleanedEdgeList.clear();
//cleanedEdgeList.clear();
_nodes.clear();
INFO("finished preprocessing");
return 0;

View File

@ -126,8 +126,8 @@ int main (int argc, char *argv[]) {
std::cout << std::endl << "[server] shutting down" << std::endl;
s->Stop();
t.join();
DELETE(s);
DELETE(objects);
delete s;
delete objects;
} catch (std::exception& e) {
std::cerr << "[fatal error] exception: " << e.what() << std::endl;
}

View File

@ -47,7 +47,7 @@ using namespace std;
#define DEBUG(x) do {std::cout << "[debug " << __FILE__ << ":" << __LINE__ << "] " << x << std::endl;} while(0);
#define GUARANTEE(x,y) do { {do{ if(false == (x)) { ERR(y) } } while(0);} } while(0);
#endif
#define DELETE(x) do { if(NULL != x) { delete x; x = NULL; } }while(0);
//#define DELETE(x) do { if(NULL != x) { delete x; x = NULL; } }while(0);
#ifndef M_PI
#define M_PI 3.14159265358979323846