From f2be495e9572e541d5555e6319c330bc16647621 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Thu, 10 Apr 2014 19:10:00 -0400 Subject: [PATCH] implement shared data facade geometry loader and getter functions --- Server/DataStructures/SharedDataFacade.h | 40 +++++++++++++++++++--- Server/DataStructures/SharedDataType.h | 42 +++++++++++++++++++++++- 2 files changed, 76 insertions(+), 6 deletions(-) diff --git a/Server/DataStructures/SharedDataFacade.h b/Server/DataStructures/SharedDataFacade.h index 33ce972bc..429f44b27 100644 --- a/Server/DataStructures/SharedDataFacade.h +++ b/Server/DataStructures/SharedDataFacade.h @@ -80,6 +80,10 @@ private: ShM::vector m_turn_instruction_list; ShM::vector m_names_char_list; ShM::vector m_name_begin_indices; + ShM::vector m_egde_is_compressed; + ShM::vector m_geometry_indices; + ShM::vector m_geometry_list; + boost::shared_ptr< StaticRTree< RTreeLeaf, @@ -203,6 +207,28 @@ private: m_names_char_list.swap(names_char_list); } + void LoadGeometries() + { + unsigned * geometries_index_ptr = (unsigned *)( + shared_memory + data_layout->GetGeometriesIndicesOffset() + ); + + typename ShM::vector geometry_begin_indices( + geometries_index_ptr, + data_layout->geometries_index_list_size + ); + m_geometry_indices.swap(geometry_begin_indices); + + unsigned * geometries_list_ptr = (unsigned *)( + shared_memory + data_layout->GetGeometryListOffset() + ); + typename ShM::vector geometry_list( + geometries_list_ptr, + data_layout->geometries_list_size + ); + m_geometry_list.swap(geometry_list); + } + public: SharedDataFacade( ) { data_timestamp_ptr = (SharedDataTimestamp *)SharedMemoryFactory::Get( @@ -254,7 +280,7 @@ public: LoadGraph(); LoadNodeAndEdgeInformation(); - //TODO: LoadGeometries(); + LoadGeometries(); LoadRTree(ram_index_path); LoadTimestamp(); LoadViaNodeList(); @@ -321,19 +347,23 @@ public: FixedPointCoordinate GetCoordinateOfNode( const unsigned id ) const { - // const NodeID node = m_via_node_list.at(id); return m_coordinate_list->at(id); }; virtual bool EdgeIsCompressed( const unsigned id ) const { - //TODO!! - return false; + return m_egde_is_compressed.at(id); } virtual void GetUncompressedGeometry( const unsigned id, std::vector & result_nodes ) const { - //TODO!! + const unsigned begin = m_geometry_indices.at(id); + const unsigned end = m_geometry_indices.at(id+1); + + result_nodes.clear(); + result_nodes.insert(result_nodes.begin(), + m_geometry_list.begin() + begin, + m_geometry_list.begin() + end); } virtual unsigned GetGeometryIndexForEdgeID(const unsigned id) const { diff --git a/Server/DataStructures/SharedDataType.h b/Server/DataStructures/SharedDataType.h index 49cfac0a4..0da5ff504 100644 --- a/Server/DataStructures/SharedDataType.h +++ b/Server/DataStructures/SharedDataType.h @@ -56,6 +56,8 @@ struct SharedDataLayout { uint64_t coordinate_list_size; uint64_t turn_instruction_list_size; uint64_t r_search_tree_size; + uint64_t geometries_index_list_size; + uint64_t geometries_list_size; unsigned checksum; unsigned timestamp_length; @@ -72,8 +74,11 @@ struct SharedDataLayout { coordinate_list_size(0), turn_instruction_list_size(0), r_search_tree_size(0), + geometries_index_list_size(0), + geometries_list_size(0), checksum(0), timestamp_length(0) + { ram_index_file_name[0] = '\0'; } @@ -90,6 +95,8 @@ struct SharedDataLayout { SimpleLogger().Write(logDEBUG) << "coordinate_list_size: " << coordinate_list_size; SimpleLogger().Write(logDEBUG) << "turn_instruction_list_size: " << turn_instruction_list_size; SimpleLogger().Write(logDEBUG) << "r_search_tree_size: " << r_search_tree_size; + SimpleLogger().Write(logDEBUG) << "geometries_index_list_size: " << geometries_index_list_size; + SimpleLogger().Write(logDEBUG) << "geometry_list_size: " << geometries_list_size; SimpleLogger().Write(logDEBUG) << "sizeof(checksum): " << sizeof(checksum); SimpleLogger().Write(logDEBUG) << "ram index file name: " << ram_index_file_name; } @@ -106,6 +113,8 @@ struct SharedDataLayout { (coordinate_list_size * sizeof(FixedPointCoordinate) ) + (turn_instruction_list_size * sizeof(TurnInstructionsClass)) + (r_search_tree_size * sizeof(RTreeNode) ) + + (geometries_index_list_size * sizeof(unsigned) ) + + (geometries_list_size * sizeof(unsigned) ) + sizeof(checksum) + 1024*sizeof(char); return result; @@ -195,7 +204,7 @@ struct SharedDataLayout { (turn_instruction_list_size * sizeof(TurnInstructionsClass)); return result; } - uint64_t GetChecksumOffset() const { + uint64_t GetGeometriesIndicesOffset() const { uint64_t result = (name_index_list_size * sizeof(unsigned) ) + (name_char_list_size * sizeof(char) ) + @@ -209,6 +218,37 @@ struct SharedDataLayout { (r_search_tree_size * sizeof(RTreeNode) ); return result; } + uint64_t GetGeometryListOffset() const { + uint64_t result = + (name_index_list_size * sizeof(unsigned) ) + + (name_char_list_size * sizeof(char) ) + + (name_id_list_size * sizeof(unsigned) ) + + (via_node_list_size * sizeof(NodeID) ) + + (graph_node_list_size * sizeof(QueryGraph::_StrNode) ) + + (graph_edge_list_size * sizeof(QueryGraph::_StrEdge) ) + + (timestamp_length * sizeof(char) ) + + (coordinate_list_size * sizeof(FixedPointCoordinate) ) + + (turn_instruction_list_size * sizeof(TurnInstructionsClass)) + + (r_search_tree_size * sizeof(RTreeNode) ) + + (geometries_index_list_size * sizeof(unsigned) ); + return result; + } + uint64_t GetChecksumOffset() const { + uint64_t result = + (name_index_list_size * sizeof(unsigned) ) + + (name_char_list_size * sizeof(char) ) + + (name_id_list_size * sizeof(unsigned) ) + + (via_node_list_size * sizeof(NodeID) ) + + (graph_node_list_size * sizeof(QueryGraph::_StrNode) ) + + (graph_edge_list_size * sizeof(QueryGraph::_StrEdge) ) + + (timestamp_length * sizeof(char) ) + + (coordinate_list_size * sizeof(FixedPointCoordinate) ) + + (turn_instruction_list_size * sizeof(TurnInstructionsClass)) + + (r_search_tree_size * sizeof(RTreeNode) ) + + (geometries_index_list_size * sizeof(unsigned) ) + + (geometries_list_size * sizeof(unsigned) ); + return result; + } }; enum SharedDataType {