diff --git a/Plugins/LocatePlugin.h b/Plugins/LocatePlugin.h index 6f233a352..35261a9d5 100644 --- a/Plugins/LocatePlugin.h +++ b/Plugins/LocatePlugin.h @@ -26,19 +26,23 @@ or see http://www.gnu.org/licenses/agpl.txt. #include "../Server/DataStructures/QueryObjectsStorage.h" #include "../Util/StringUtil.h" -/* - * This Plugin locates the nearest node in the road network for a given coordinate. - */ +//locates the nearest node in the road network for a given coordinate. //TODO: Rework data access to go through facade template class LocatePlugin : public BasePlugin { public: - LocatePlugin(DataFacadeT * objects) : descriptor_string("locate") { - nodeHelpDesk = objects->nodeHelpDesk; - } + LocatePlugin(DataFacadeT * facade) + : + descriptor_string("locate"), + facade(facade) + { } const std::string & GetDescriptor() const { return descriptor_string; } - void HandleRequest(const RouteParameters & routeParameters, http::Reply& reply) { + + void HandleRequest( + const RouteParameters & routeParameters, + http::Reply& reply + ) { //check number of parameters if(!routeParameters.coordinates.size()) { reply = http::Reply::stockReply(http::Reply::badRequest); @@ -54,7 +58,6 @@ public: std::string tmp; //json -// JSONParameter = routeParameters.options.Find("jsonp"); if(!routeParameters.jsonpParameter.empty()) { reply.content += routeParameters.jsonpParameter; reply.content += "("; @@ -62,7 +65,7 @@ public: reply.status = http::Reply::ok; reply.content += ("{"); reply.content += ("\"version\":0.3,"); - if(!nodeHelpDesk->LocateClosestEndPointForCoordinate(routeParameters.coordinates[0], result)) { + if(!facade->LocateClosestEndPointForCoordinate(routeParameters.coordinates[0], result)) { reply.content += ("\"status\":207,"); reply.content += ("\"mapped_coordinate\":[]"); } else { @@ -100,8 +103,8 @@ public: } private: - NodeInformationHelpDesk * nodeHelpDesk; std::string descriptor_string; + DataFacadeT * facade; }; #endif /* LOCATEPLUGIN_H_ */ diff --git a/Plugins/NearestPlugin.h b/Plugins/NearestPlugin.h index d662b79c7..45c1c90d0 100644 --- a/Plugins/NearestPlugin.h +++ b/Plugins/NearestPlugin.h @@ -30,14 +30,12 @@ or see http://www.gnu.org/licenses/agpl.txt. * This Plugin locates the nearest point on a street in the road network for a given coordinate. */ -//TODO: Rework data access to go through facade - template class NearestPlugin : public BasePlugin { public: - NearestPlugin(DataFacadeT * objects ) + NearestPlugin(DataFacadeT * facade ) : - m_query_objects(objects), + facade(facade), descriptor_string("nearest") { descriptorTable.insert(std::make_pair("" , 0)); //default descriptor @@ -50,14 +48,13 @@ public: reply = http::Reply::stockReply(http::Reply::badRequest); return; } - if(false == checkCoord(routeParameters.coordinates[0])) { + if( !checkCoord(routeParameters.coordinates[0]) ) { reply = http::Reply::stockReply(http::Reply::badRequest); return; } - NodeInformationHelpDesk * nodeHelpDesk = m_query_objects->nodeHelpDesk; - //query to helpdesk + PhantomNode result; - nodeHelpDesk->FindPhantomNodeForCoordinate( + facade->FindPhantomNodeForCoordinate( routeParameters.coordinates[0], result, routeParameters.zoomLevel @@ -92,14 +89,14 @@ public: reply.content += "],"; reply.content += "\"name\":\""; if(UINT_MAX != result.edgeBasedNode) { - m_query_objects->GetName(result.nodeBasedEdgeNameID, temp_string); + facade->GetName(result.nodeBasedEdgeNameID, temp_string); reply.content += temp_string; } reply.content += "\""; reply.content += ",\"transactionId\":\"OSRM Routing Engine JSON Nearest (v0.3)\""; reply.content += ("}"); reply.headers.resize(3); - if("" != routeParameters.jsonpParameter) { + if( !routeParameters.jsonpParameter.empty() ) { reply.content += ")"; reply.headers[1].name = "Content-Type"; reply.headers[1].value = "text/javascript"; @@ -117,7 +114,7 @@ public: } private: - DataFacadeT * m_query_objects; + DataFacadeT * facade; HashTable descriptorTable; std::string descriptor_string; }; diff --git a/Plugins/TimestampPlugin.h b/Plugins/TimestampPlugin.h index 38514e957..b6a9b6b4f 100644 --- a/Plugins/TimestampPlugin.h +++ b/Plugins/TimestampPlugin.h @@ -27,8 +27,8 @@ or see http://www.gnu.org/licenses/agpl.txt. template class TimestampPlugin : public BasePlugin { public: - TimestampPlugin(DataFacadeT * o) - : objects(o), descriptor_string("timestamp") + TimestampPlugin(const DataFacadeT * facade) + : facade(facade), descriptor_string("timestamp") { } const std::string & GetDescriptor() const { return descriptor_string; } void HandleRequest(const RouteParameters & routeParameters, http::Reply& reply) { @@ -46,7 +46,7 @@ public: reply.content += ("\"status\":"); reply.content += "0,"; reply.content += ("\"timestamp\":\""); - reply.content += objects->timestamp; + reply.content += facade->GetTimestamp(); reply.content += "\""; reply.content += ",\"transactionId\":\"OSRM Routing Engine JSON timestamp (v0.3)\""; reply.content += ("}"); @@ -68,7 +68,7 @@ public: reply.headers[0].value = tmp; } private: - DataFacadeT * objects; + const DataFacadeT * facade; std::string descriptor_string; }; diff --git a/Plugins/ViaRoutePlugin.h b/Plugins/ViaRoutePlugin.h index cfca2878c..e36549448 100644 --- a/Plugins/ViaRoutePlugin.h +++ b/Plugins/ViaRoutePlugin.h @@ -44,34 +44,32 @@ or see http://www.gnu.org/licenses/agpl.txt. template class ViaRoutePlugin : public BasePlugin { private: - NodeInformationHelpDesk * nodeHelpDesk; - StaticGraph * graph; - HashTable descriptorTable; - SearchEngine * searchEnginePtr; + boost::unordered_map descriptorTable; + SearchEngine * search_engine_ptr; public: - ViaRoutePlugin(DataFacadeT * objects) + ViaRoutePlugin(DataFacadeT * facade) : - // objects(objects), - descriptor_string("viaroute") + descriptor_string("viaroute"), + facade(facade) { - nodeHelpDesk = objects->nodeHelpDesk; - graph = objects->graph; + //TODO: set up an engine for each thread!! + search_engine_ptr = new SearchEngine(facade); - searchEnginePtr = new SearchEngine(objects); - - // descriptorTable.emplace("" , 0); descriptorTable.emplace("json", 0); descriptorTable.emplace("gpx" , 1); } virtual ~ViaRoutePlugin() { - delete searchEnginePtr; + delete search_engine_ptr; } const std::string & GetDescriptor() const { return descriptor_string; } - void HandleRequest(const RouteParameters & routeParameters, http::Reply& reply) { + void HandleRequest( + const RouteParameters & routeParameters, + http::Reply& reply + ) { //check number of parameters if( 2 > routeParameters.coordinates.size() ) { reply = http::Reply::stockReply(http::Reply::badRequest); @@ -79,11 +77,11 @@ public: } RawRouteData rawRoute; - rawRoute.checkSum = nodeHelpDesk->GetCheckSum(); + rawRoute.checkSum = facade->GetCheckSum(); bool checksumOK = (routeParameters.checkSum == rawRoute.checkSum); std::vector textCoord; for(unsigned i = 0; i < routeParameters.coordinates.size(); ++i) { - if(false == checkCoord(routeParameters.coordinates[i])) { + if( !checkCoord(routeParameters.coordinates[i]) ) { reply = http::Reply::stockReply(http::Reply::badRequest); return; } @@ -94,13 +92,17 @@ public: if(checksumOK && i < routeParameters.hints.size() && "" != routeParameters.hints[i]) { // SimpleLogger().Write() <<"Decoding hint: " << routeParameters.hints[i] << " for location index " << i; DecodeObjectFromBase64(routeParameters.hints[i], phantomNodeVector[i]); - if(phantomNodeVector[i].isValid(nodeHelpDesk->GetNumberOfNodes())) { + if(phantomNodeVector[i].isValid(facade->GetNumberOfNodes())) { // SimpleLogger().Write() << "Decoded hint " << i << " successfully"; continue; } } // SimpleLogger().Write() << "Brute force lookup of coordinate " << i; - searchEnginePtr->FindPhantomNodeForCoordinate( rawRoute.rawViaNodeCoordinates[i], phantomNodeVector[i], routeParameters.zoomLevel); + facade->FindPhantomNodeForCoordinate( + rawRoute.rawViaNodeCoordinates[i], + phantomNodeVector[i], + routeParameters.zoomLevel + ); } for(unsigned i = 0; i < phantomNodeVector.size()-1; ++i) { @@ -109,22 +111,29 @@ public: segmentPhantomNodes.targetPhantom = phantomNodeVector[i+1]; rawRoute.segmentEndCoordinates.push_back(segmentPhantomNodes); } - if( ( routeParameters.alternateRoute ) && (1 == rawRoute.segmentEndCoordinates.size()) ) { -// SimpleLogger().Write() << "Checking for alternative paths"; - searchEnginePtr->alternativePaths(rawRoute.segmentEndCoordinates[0], rawRoute); - + if( + ( routeParameters.alternateRoute ) && + (1 == rawRoute.segmentEndCoordinates.size()) + ) { + search_engine_ptr->alternativePaths( + rawRoute.segmentEndCoordinates[0], + rawRoute + ); } else { - searchEnginePtr->shortestPath(rawRoute.segmentEndCoordinates, rawRoute); + search_engine_ptr->shortestPath( + rawRoute.segmentEndCoordinates, + rawRoute + ); } - if(INT_MAX == rawRoute.lengthOfShortestPath ) { - SimpleLogger().Write(logDEBUG) << "Error occurred, single path not found"; + SimpleLogger().Write(logDEBUG) << + "Error occurred, single path not found"; } reply.status = http::Reply::ok; //TODO: Move to member as smart pointer - BaseDescriptor * desc; + BaseDescriptor * desc; if("" != routeParameters.jsonpParameter) { reply.content += routeParameters.jsonpParameter; reply.content += "("; @@ -143,15 +152,15 @@ public: switch(descriptorType){ case 0: - desc = new JSONDescriptor(); + desc = new JSONDescriptor(); break; case 1: - desc = new GPXDescriptor(); + desc = new GPXDescriptor(); break; default: - desc = new JSONDescriptor(); + desc = new JSONDescriptor(); break; } @@ -164,7 +173,7 @@ public: // SimpleLogger().Write() << "Number of segments: " << rawRoute.segmentEndCoordinates.size(); desc->SetConfig(descriptorConfig); - desc->Run(reply, rawRoute, phantomNodes, *searchEnginePtr); + desc->Run(reply, rawRoute, phantomNodes, facade); if("" != routeParameters.jsonpParameter) { reply.content += ")\n"; } @@ -175,7 +184,7 @@ public: reply.headers[0].value = tmp; switch(descriptorType){ case 0: - if("" != routeParameters.jsonpParameter){ + if( !routeParameters.jsonpParameter.empty() ){ reply.headers[1].name = "Content-Type"; reply.headers[1].value = "text/javascript"; reply.headers[2].name = "Content-Disposition"; @@ -196,7 +205,7 @@ public: break; default: - if("" != routeParameters.jsonpParameter){ + if( !routeParameters.jsonpParameter.empty() ){ reply.headers[1].name = "Content-Type"; reply.headers[1].value = "text/javascript"; reply.headers[2].name = "Content-Disposition"; @@ -215,6 +224,7 @@ public: } private: std::string descriptor_string; + DataFacadeT * facade; };