diff --git a/Server/DataStructures/BaseDataFacade.h b/Server/DataStructures/BaseDataFacade.h index 6d63b8a18..7897ca4c4 100644 --- a/Server/DataStructures/BaseDataFacade.h +++ b/Server/DataStructures/BaseDataFacade.h @@ -101,6 +101,11 @@ template class BaseDataFacade PhantomNode &resulting_phantom_node, const unsigned zoom_level) const = 0; + virtual bool IncrementalFindPhantomNodeForCoordinate(const FixedPointCoordinate &input_coordinate, + std::vector &resulting_phantom_node_vector, + const unsigned zoom_level, + const unsigned number_of_results) const = 0; + virtual unsigned GetCheckSum() const = 0; virtual unsigned GetNameIndexFromEdgeID(const unsigned id) const = 0; diff --git a/Server/DataStructures/InternalDataFacade.h b/Server/DataStructures/InternalDataFacade.h index afa82f58a..16b112dd3 100644 --- a/Server/DataStructures/InternalDataFacade.h +++ b/Server/DataStructures/InternalDataFacade.h @@ -176,7 +176,7 @@ template class InternalDataFacade : public BaseDataFacade 0) { geometry_stream.read((char *)&(m_geometry_indices[0]), - number_of_indices * sizeof(unsigned)); + number_of_indices * sizeof(unsigned)); } geometry_stream.read((char *)&number_of_compressed_geometries, sizeof(unsigned)); @@ -187,7 +187,7 @@ template class InternalDataFacade : public BaseDataFacade 0) { geometry_stream.read((char *)&(m_geometry_list[0]), - number_of_compressed_geometries * sizeof(unsigned)); + number_of_compressed_geometries * sizeof(unsigned)); } geometry_stream.close(); } @@ -319,7 +319,10 @@ template class InternalDataFacade : public BaseDataFacadeEndEdges(n); } - EdgeRange GetAdjacentEdgeRange(const NodeID node) const { return m_query_graph->GetAdjacentEdgeRange(node); }; + EdgeRange GetAdjacentEdgeRange(const NodeID node) const + { + return m_query_graph->GetAdjacentEdgeRange(node); + }; // searches for a specific edge EdgeID FindEdge(const NodeID from, const NodeID to) const @@ -362,9 +365,18 @@ template class InternalDataFacade : public BaseDataFacadeFindPhantomNodeForCoordinate( + return m_static_rtree->FindPhantomNodeForCoordinate( input_coordinate, resulting_phantom_node, zoom_level); - return found; + } + + bool + IncrementalFindPhantomNodeForCoordinate(const FixedPointCoordinate &input_coordinate, + std::vector &resulting_phantom_node_vector, + const unsigned zoom_level, + const unsigned number_of_results) const + { + return m_static_rtree->IncrementalFindPhantomNodeForCoordinate( + input_coordinate, resulting_phantom_node_vector, zoom_level, number_of_results); } unsigned GetCheckSum() const { return m_check_sum; } diff --git a/Server/DataStructures/SharedDataFacade.h b/Server/DataStructures/SharedDataFacade.h index 477089471..a2cb99028 100644 --- a/Server/DataStructures/SharedDataFacade.h +++ b/Server/DataStructures/SharedDataFacade.h @@ -90,26 +90,27 @@ template class SharedDataFacade : public BaseDataFacadeGetBlockPtr(shared_memory, SharedDataLayout::HSGR_CHECKSUM); + m_check_sum = + *data_layout->GetBlockPtr(shared_memory, SharedDataLayout::HSGR_CHECKSUM); SimpleLogger().Write() << "set checksum: " << m_check_sum; } - void LoadTimestamp() { - char *timestamp_ptr = data_layout->GetBlockPtr(shared_memory, SharedDataLayout::TIMESTAMP); + char *timestamp_ptr = + data_layout->GetBlockPtr(shared_memory, SharedDataLayout::TIMESTAMP); m_timestamp.resize(data_layout->GetBlockSize(SharedDataLayout::TIMESTAMP)); - std::copy( - timestamp_ptr, - timestamp_ptr + data_layout->GetBlockSize(SharedDataLayout::TIMESTAMP), - m_timestamp.begin()); + std::copy(timestamp_ptr, + timestamp_ptr + data_layout->GetBlockSize(SharedDataLayout::TIMESTAMP), + m_timestamp.begin()); } void LoadRTree(const boost::filesystem::path &file_index_path) { BOOST_ASSERT_MSG(!m_coordinate_list->empty(), "coordinates must be loaded before r-tree"); - RTreeNode *tree_ptr = data_layout->GetBlockPtr(shared_memory, SharedDataLayout::R_SEARCH_TREE); + RTreeNode *tree_ptr = + data_layout->GetBlockPtr(shared_memory, SharedDataLayout::R_SEARCH_TREE); m_static_rtree = std::make_shared::vector, true>>( tree_ptr, @@ -127,73 +128,84 @@ template class SharedDataFacade : public BaseDataFacadeGetBlockPtr(shared_memory, SharedDataLayout::GRAPH_EDGE_LIST); - typename ShM::vector node_list(graph_nodes_ptr, - data_layout->num_entries[SharedDataLayout::GRAPH_NODE_LIST]); - typename ShM::vector edge_list(graph_edges_ptr, - data_layout->num_entries[SharedDataLayout::GRAPH_EDGE_LIST]); + typename ShM::vector node_list( + graph_nodes_ptr, data_layout->num_entries[SharedDataLayout::GRAPH_NODE_LIST]); + typename ShM::vector edge_list( + graph_edges_ptr, data_layout->num_entries[SharedDataLayout::GRAPH_EDGE_LIST]); m_query_graph.reset(new QueryGraph(node_list, edge_list)); } void LoadNodeAndEdgeInformation() { - FixedPointCoordinate *coordinate_list_ptr = - data_layout->GetBlockPtr(shared_memory, SharedDataLayout::COORDINATE_LIST); + FixedPointCoordinate *coordinate_list_ptr = data_layout->GetBlockPtr( + shared_memory, SharedDataLayout::COORDINATE_LIST); m_coordinate_list = std::make_shared::vector>( coordinate_list_ptr, data_layout->num_entries[SharedDataLayout::COORDINATE_LIST]); - TurnInstruction *turn_instruction_list_ptr = - data_layout->GetBlockPtr(shared_memory, SharedDataLayout::TURN_INSTRUCTION); + TurnInstruction *turn_instruction_list_ptr = data_layout->GetBlockPtr( + shared_memory, SharedDataLayout::TURN_INSTRUCTION); typename ShM::vector turn_instruction_list( - turn_instruction_list_ptr, data_layout->num_entries[SharedDataLayout::TURN_INSTRUCTION]); + turn_instruction_list_ptr, + data_layout->num_entries[SharedDataLayout::TURN_INSTRUCTION]); m_turn_instruction_list.swap(turn_instruction_list); - unsigned *name_id_list_ptr = data_layout->GetBlockPtr(shared_memory, SharedDataLayout::NAME_ID_LIST); - typename ShM::vector name_id_list(name_id_list_ptr, - data_layout->num_entries[SharedDataLayout::NAME_ID_LIST]); + unsigned *name_id_list_ptr = + data_layout->GetBlockPtr(shared_memory, SharedDataLayout::NAME_ID_LIST); + typename ShM::vector name_id_list( + name_id_list_ptr, data_layout->num_entries[SharedDataLayout::NAME_ID_LIST]); m_name_ID_list.swap(name_id_list); } void LoadViaNodeList() { - NodeID *via_node_list_ptr = data_layout->GetBlockPtr(shared_memory, SharedDataLayout::VIA_NODE_LIST); - typename ShM::vector via_node_list(via_node_list_ptr, - data_layout->num_entries[SharedDataLayout::VIA_NODE_LIST]); + NodeID *via_node_list_ptr = + data_layout->GetBlockPtr(shared_memory, SharedDataLayout::VIA_NODE_LIST); + typename ShM::vector via_node_list( + via_node_list_ptr, data_layout->num_entries[SharedDataLayout::VIA_NODE_LIST]); m_via_node_list.swap(via_node_list); } void LoadNames() { - unsigned *offsets_ptr = data_layout->GetBlockPtr(shared_memory, SharedDataLayout::NAME_OFFSETS); - NameIndexBlock *blocks_ptr = data_layout->GetBlockPtr(shared_memory, SharedDataLayout::NAME_BLOCKS); - typename ShM::vector name_offsets(offsets_ptr, - data_layout->num_entries[SharedDataLayout::NAME_OFFSETS]); - typename ShM::vector name_blocks(blocks_ptr, - data_layout->num_entries[SharedDataLayout::NAME_BLOCKS]); + unsigned *offsets_ptr = + data_layout->GetBlockPtr(shared_memory, SharedDataLayout::NAME_OFFSETS); + NameIndexBlock *blocks_ptr = + data_layout->GetBlockPtr(shared_memory, SharedDataLayout::NAME_BLOCKS); + typename ShM::vector name_offsets( + offsets_ptr, data_layout->num_entries[SharedDataLayout::NAME_OFFSETS]); + typename ShM::vector name_blocks( + blocks_ptr, data_layout->num_entries[SharedDataLayout::NAME_BLOCKS]); - char *names_list_ptr = data_layout->GetBlockPtr(shared_memory, SharedDataLayout::NAME_CHAR_LIST); - typename ShM::vector names_char_list(names_list_ptr, - data_layout->num_entries[SharedDataLayout::NAME_CHAR_LIST]); - m_name_table = std::make_shared>(name_offsets, name_blocks, names_char_list.size()); + char *names_list_ptr = + data_layout->GetBlockPtr(shared_memory, SharedDataLayout::NAME_CHAR_LIST); + typename ShM::vector names_char_list( + names_list_ptr, data_layout->num_entries[SharedDataLayout::NAME_CHAR_LIST]); + m_name_table = std::make_shared>( + name_offsets, name_blocks, names_char_list.size()); m_names_char_list.swap(names_char_list); } void LoadGeometries() { - unsigned *geometries_compressed_ptr = data_layout->GetBlockPtr(shared_memory, SharedDataLayout::GEOMETRIES_INDICATORS); - typename ShM::vector egde_is_compressed(geometries_compressed_ptr, - data_layout->num_entries[SharedDataLayout::GEOMETRIES_INDICATORS]); + unsigned *geometries_compressed_ptr = data_layout->GetBlockPtr( + shared_memory, SharedDataLayout::GEOMETRIES_INDICATORS); + typename ShM::vector egde_is_compressed( + geometries_compressed_ptr, + data_layout->num_entries[SharedDataLayout::GEOMETRIES_INDICATORS]); m_egde_is_compressed.swap(egde_is_compressed); - unsigned *geometries_index_ptr = data_layout->GetBlockPtr(shared_memory, SharedDataLayout::GEOMETRIES_INDEX); + unsigned *geometries_index_ptr = + data_layout->GetBlockPtr(shared_memory, SharedDataLayout::GEOMETRIES_INDEX); typename ShM::vector geometry_begin_indices( geometries_index_ptr, data_layout->num_entries[SharedDataLayout::GEOMETRIES_INDEX]); m_geometry_indices.swap(geometry_begin_indices); - unsigned *geometries_list_ptr = data_layout->GetBlockPtr(shared_memory, SharedDataLayout::GEOMETRIES_LIST); - typename ShM::vector geometry_list(geometries_list_ptr, - data_layout->num_entries[SharedDataLayout::GEOMETRIES_LIST]); + unsigned *geometries_list_ptr = + data_layout->GetBlockPtr(shared_memory, SharedDataLayout::GEOMETRIES_LIST); + typename ShM::vector geometry_list( + geometries_list_ptr, data_layout->num_entries[SharedDataLayout::GEOMETRIES_LIST]); m_geometry_list.swap(geometry_list); } @@ -236,7 +248,8 @@ template class SharedDataFacade : public BaseDataFacadeGetSizeOfLayout()); out.close(); - const char* file_index_ptr = data_layout->GetBlockPtr(shared_memory, SharedDataLayout::FILE_INDEX_PATH); + const char *file_index_ptr = + data_layout->GetBlockPtr(shared_memory, SharedDataLayout::FILE_INDEX_PATH); boost::filesystem::path file_index_path(file_index_ptr); if (!boost::filesystem::exists(file_index_path)) { @@ -277,7 +290,10 @@ template class SharedDataFacade : public BaseDataFacadeEndEdges(n); } - EdgeRange GetAdjacentEdgeRange(const NodeID node) const { return m_query_graph->GetAdjacentEdgeRange(node); }; + EdgeRange GetAdjacentEdgeRange(const NodeID node) const + { + return m_query_graph->GetAdjacentEdgeRange(node); + }; // searches for a specific edge EdgeID FindEdge(const NodeID from, const NodeID to) const @@ -336,9 +352,18 @@ template class SharedDataFacade : public BaseDataFacadeFindPhantomNodeForCoordinate( + return m_static_rtree->FindPhantomNodeForCoordinate( input_coordinate, resulting_phantom_node, zoom_level); - return found; + } + + bool + IncrementalFindPhantomNodeForCoordinate(const FixedPointCoordinate &input_coordinate, + std::vector &resulting_phantom_node_vector, + const unsigned zoom_level, + const unsigned number_of_results) const + { + return m_static_rtree->IncrementalFindPhantomNodeForCoordinate( + input_coordinate, resulting_phantom_node_vector, zoom_level, number_of_results); } unsigned GetCheckSum() const { return m_check_sum; }