diff --git a/DataStructures/NodeInformationHelpDesk.h b/DataStructures/NodeInformationHelpDesk.h index cda10cd40..ff539024f 100644 --- a/DataStructures/NodeInformationHelpDesk.h +++ b/DataStructures/NodeInformationHelpDesk.h @@ -195,8 +195,7 @@ private: edges_input_stream.close(); SimpleLogger().Write(logDEBUG) << "Loaded " << number_of_edges << " orig edges"; - SimpleLogger().Write(logDEBUG) - << "Opening NN indices"; + SimpleLogger().Write(logDEBUG) << "Opening NN indices"; } std::vector m_coordinate_list; diff --git a/DataStructures/SearchEngine.cpp b/DataStructures/SearchEngine.cpp deleted file mode 100644 index 334acc42a..000000000 --- a/DataStructures/SearchEngine.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - open source routing machine - Copyright (C) Dennis Luxen, others 2010 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU AFFERO General Public License as published by -the Free Software Foundation; either version 3 of the License, or -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -or see http://www.gnu.org/licenses/agpl.txt. - */ - -#include "SearchEngine.h" - -SearchEngine::SearchEngine( QueryObjectsStorage * query_objects ) : - _queryData(query_objects), - shortestPath(_queryData), - alternativePaths(_queryData) -{} - -SearchEngine::~SearchEngine() {} - -void SearchEngine::GetCoordinatesForNodeID( - NodeID id, - FixedPointCoordinate& result -) const { - result = _queryData.nodeHelpDesk->GetCoordinateOfNode(id); -} - -void SearchEngine::FindPhantomNodeForCoordinate( - const FixedPointCoordinate & location, - PhantomNode & result, - const unsigned zoomLevel -) const { - _queryData.nodeHelpDesk->FindPhantomNodeForCoordinate( - location, - result, zoomLevel - ); -} - -NodeID SearchEngine::GetNameIDForOriginDestinationNodeID( - const NodeID s, - const NodeID t -) const { - if(s == t) { - return 0; - } - - EdgeID e = _queryData.graph->FindEdge(s, t); - if(e == UINT_MAX) { - e = _queryData.graph->FindEdge( t, s ); - } - - if(UINT_MAX == e) { - return 0; - } - - assert(e != UINT_MAX); - const QueryEdge::EdgeData ed = _queryData.graph->GetEdgeData(e); - return ed.id; -} - -std::string SearchEngine::GetEscapedNameForNameID(const unsigned nameID) const { - std::string result; - _queryData.query_objects->GetName(nameID, result); - return HTMLEntitize(result); -} - -SearchEngineHeapPtr SearchEngineData::forwardHeap; -SearchEngineHeapPtr SearchEngineData::backwardHeap; - -SearchEngineHeapPtr SearchEngineData::forwardHeap2; -SearchEngineHeapPtr SearchEngineData::backwardHeap2; - -SearchEngineHeapPtr SearchEngineData::forwardHeap3; -SearchEngineHeapPtr SearchEngineData::backwardHeap3; diff --git a/DataStructures/SearchEngine.h b/DataStructures/SearchEngine.h index 3aad89b22..f73624cd9 100644 --- a/DataStructures/SearchEngine.h +++ b/DataStructures/SearchEngine.h @@ -18,48 +18,54 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or see http://www.gnu.org/licenses/agpl.txt. */ -#ifndef SEARCHENGINE_H_ -#define SEARCHENGINE_H_ +#ifndef SEARCHENGINE_H +#define SEARCHENGINE_H #include "Coordinate.h" #include "NodeInformationHelpDesk.h" +#include "SearchEngineData.h" #include "PhantomNodes.h" #include "QueryEdge.h" -#include "SearchEngineData.h" #include "../RoutingAlgorithms/AlternativePathRouting.h" #include "../RoutingAlgorithms/ShortestPathRouting.h" -#include "../Server/DataStructures/QueryObjectsStorage.h" #include "../Util/StringUtil.h" #include "../typedefs.h" +#include + #include #include #include +template class SearchEngine { private: - SearchEngineData _queryData; - + DataFacadeT * facade; + SearchEngineData engine_working_data; public: - ShortestPathRouting shortestPath; - AlternativeRouting alternativePaths; + ShortestPathRouting shortest_path; + AlternativeRouting alternative_path; - SearchEngine( QueryObjectsStorage * query_objects ); - ~SearchEngine(); + SearchEngine( DataFacadeT * facade ) + : + facade (facade), + engine_working_data(facade), + shortest_path (facade, engine_working_data), + alternative_path (facade, engine_working_data) + {} - void GetCoordinatesForNodeID(NodeID id, FixedPointCoordinate& result) const; + ~SearchEngine() {} - void FindPhantomNodeForCoordinate( - const FixedPointCoordinate & location, - PhantomNode & result, - unsigned zoomLevel - ) const; - - NodeID GetNameIDForOriginDestinationNodeID( - const NodeID s, const NodeID t) const; - - std::string GetEscapedNameForNameID(const unsigned nameID) const; }; -#endif /* SEARCHENGINE_H_ */ +SearchEngineHeapPtr SearchEngineData::forwardHeap; +SearchEngineHeapPtr SearchEngineData::backwardHeap; + +SearchEngineHeapPtr SearchEngineData::forwardHeap2; +SearchEngineHeapPtr SearchEngineData::backwardHeap2; + +SearchEngineHeapPtr SearchEngineData::forwardHeap3; +SearchEngineHeapPtr SearchEngineData::backwardHeap3; + +#endif // SEARCHENGINE_H diff --git a/DataStructures/SearchEngineData.cpp b/DataStructures/SearchEngineData.cpp index afb5241d9..6eb790696 100644 --- a/DataStructures/SearchEngineData.cpp +++ b/DataStructures/SearchEngineData.cpp @@ -20,40 +20,40 @@ or see http://www.gnu.org/licenses/agpl.txt. #include "SearchEngineData.h" -void SearchEngineData::InitializeOrClearFirstThreadLocalStorage() { +void SearchEngineData::InitializeOrClearFirstThreadLocalStorage(const unsigned number_of_nodes) { if(!forwardHeap.get()) { - forwardHeap.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes())); + forwardHeap.reset(new QueryHeap(number_of_nodes)); } else { forwardHeap->Clear(); } if(!backwardHeap.get()) { - backwardHeap.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes())); + backwardHeap.reset(new QueryHeap(number_of_nodes)); } else { backwardHeap->Clear(); } } -void SearchEngineData::InitializeOrClearSecondThreadLocalStorage() { +void SearchEngineData::InitializeOrClearSecondThreadLocalStorage(const unsigned number_of_nodes) { if(!forwardHeap2.get()) { - forwardHeap2.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes())); + forwardHeap2.reset(new QueryHeap(number_of_nodes)); } else { forwardHeap2->Clear(); } if(!backwardHeap2.get()) { - backwardHeap2.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes())); + backwardHeap2.reset(new QueryHeap(number_of_nodes)); } else { backwardHeap2->Clear(); } } -void SearchEngineData::InitializeOrClearThirdThreadLocalStorage() { +void SearchEngineData::InitializeOrClearThirdThreadLocalStorage(const unsigned number_of_nodes) { if(!forwardHeap3.get()) { - forwardHeap3.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes())); + forwardHeap3.reset(new QueryHeap(number_of_nodes)); } else { forwardHeap3->Clear(); } if(!backwardHeap3.get()) { - backwardHeap3.reset(new QueryHeap(nodeHelpDesk->GetNumberOfNodes())); + backwardHeap3.reset(new QueryHeap(number_of_nodes)); } else { backwardHeap3->Clear(); } diff --git a/DataStructures/SearchEngineData.h b/DataStructures/SearchEngineData.h index 90c157d29..43ee455e3 100644 --- a/DataStructures/SearchEngineData.h +++ b/DataStructures/SearchEngineData.h @@ -18,10 +18,12 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA or see http://www.gnu.org/licenses/agpl.txt. */ +#ifndef SEARCH_ENGINE_DATA_H +#define SEARCH_ENGINE_DATA_H + #include "BinaryHeap.h" #include "QueryEdge.h" #include "StaticGraph.h" -#include "../Server/DataStructures/QueryObjectsStorage.h" #include "../typedefs.h" @@ -34,23 +36,16 @@ struct _HeapData { NodeID parent; _HeapData( NodeID p ) : parent(p) { } }; + typedef StaticGraph QueryGraph; typedef BinaryHeap< NodeID, NodeID, int, _HeapData, UnorderedMapStorage > QueryHeapType; typedef boost::thread_specific_ptr SearchEngineHeapPtr; struct SearchEngineData { - typedef QueryGraph Graph; - typedef QueryHeapType QueryHeap; - SearchEngineData(QueryObjectsStorage * query_objects) - : - query_objects(query_objects), - graph(query_objects->graph), - nodeHelpDesk(query_objects->nodeHelpDesk) - {} + typedef QueryGraph QueryGraph; + typedef QueryHeapType QueryHeap; - const QueryObjectsStorage * query_objects; - const QueryGraph * graph; - const NodeInformationHelpDesk * nodeHelpDesk; + SearchEngineData() { } static SearchEngineHeapPtr forwardHeap; static SearchEngineHeapPtr backwardHeap; @@ -59,9 +54,11 @@ struct SearchEngineData { static SearchEngineHeapPtr forwardHeap3; static SearchEngineHeapPtr backwardHeap3; - void InitializeOrClearFirstThreadLocalStorage(); + void InitializeOrClearFirstThreadLocalStorage(const unsigned number_of_nodes); - void InitializeOrClearSecondThreadLocalStorage(); + void InitializeOrClearSecondThreadLocalStorage(const unsigned number_of_nodes); - void InitializeOrClearThirdThreadLocalStorage(); + void InitializeOrClearThirdThreadLocalStorage(const unsigned number_of_nodes); }; + +#endif // SEARCH_ENGINE_DATA_H