From 8377e411cb37e9908bfff8b6b8d1f03bba456564 Mon Sep 17 00:00:00 2001 From: DennisOSRM Date: Thu, 12 Apr 2012 18:53:01 +0200 Subject: [PATCH] Skipping ContractionCleantup entirely. Avoids a big allocation. Removing DELETE() macro. --- Contractor/ContractionCleanup.h | 5 ++++ Plugins/ViaRoutePlugin.h | 5 ++-- Server/RequestHandler.h | 2 +- Util/NASAGridSquare.cpp | 4 ++-- createHierarchy.cpp | 42 ++++++++++++++++----------------- routed.cpp | 4 ++-- typedefs.h | 2 +- 7 files changed, 35 insertions(+), 29 deletions(-) diff --git a/Contractor/ContractionCleanup.h b/Contractor/ContractionCleanup.h index 0d030fcda..4786e58ca 100644 --- a/Contractor/ContractionCleanup.h +++ b/Contractor/ContractionCleanup.h @@ -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 ) { diff --git a/Plugins/ViaRoutePlugin.h b/Plugins/ViaRoutePlugin.h index a512d6fcd..317ee2593 100644 --- a/Plugins/ViaRoutePlugin.h +++ b/Plugins/ViaRoutePlugin.h @@ -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 > > * desc; std::string JSONParameter = routeParameters.options.Find("jsonp"); if("" != JSONParameter) { @@ -234,7 +235,7 @@ public: break; } - DELETE( desc ); + delete desc; return; } private: diff --git a/Server/RequestHandler.h b/Server/RequestHandler.h index 6f8ee368f..95ffa8585 100644 --- a/Server/RequestHandler.h +++ b/Server/RequestHandler.h @@ -44,7 +44,7 @@ public: for(unsigned i = 0; i < _pluginVector.size(); i++) { BasePlugin * tempPointer = _pluginVector[i]; - DELETE( tempPointer ); + delete tempPointer; } } diff --git a/Util/NASAGridSquare.cpp b/Util/NASAGridSquare.cpp index 2d319e570..49a5169e2 100644 --- a/Util/NASAGridSquare.cpp +++ b/Util/NASAGridSquare.cpp @@ -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 ); diff --git a/createHierarchy.cpp b/createHierarchy.cpp index 83caa9806..7d9123301 100644 --- a/createHierarchy.cpp +++ b/createHierarchy.cpp @@ -131,13 +131,13 @@ int main (int argc, char *argv[]) { std::vector 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().swap(contractedEdges); - cleanup->Run(); - - std::vector< InputEdge> cleanedEdgeList; - cleanup->GetData(cleanedEdgeList); - DELETE( cleanup ); +// ContractionCleanup * cleanup = new ContractionCleanup(edgeBasedNodeNumber, contractedEdges); +// contractedEdges.clear(); +// std::vector().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::EdgeIterator position = 0; for ( StaticGraph::NodeIterator node = 0; node <= numberOfNodes; ++node ) { StaticGraph::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::_StrEdge currentEdge; for ( StaticGraph::NodeIterator node = 0; node < numberOfNodes; ++node ) { for ( StaticGraph::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; diff --git a/routed.cpp b/routed.cpp index ec8a5bc04..ee3138ba3 100644 --- a/routed.cpp +++ b/routed.cpp @@ -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; } diff --git a/typedefs.h b/typedefs.h index 815ea8196..6c0f94eda 100644 --- a/typedefs.h +++ b/typedefs.h @@ -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