implement shared data facade geometry loader and getter functions
This commit is contained in:
		
							parent
							
								
									6d8465a04d
								
							
						
					
					
						commit
						f2be495e95
					
				@ -80,6 +80,10 @@ private:
 | 
			
		||||
    ShM<TurnInstruction, true>::vector      m_turn_instruction_list;
 | 
			
		||||
    ShM<char, true>::vector                 m_names_char_list;
 | 
			
		||||
    ShM<unsigned, true>::vector             m_name_begin_indices;
 | 
			
		||||
    ShM<bool, true>::vector                m_egde_is_compressed;
 | 
			
		||||
    ShM<unsigned, true>::vector            m_geometry_indices;
 | 
			
		||||
    ShM<unsigned, true>::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<unsigned, true>::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<unsigned, true>::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<unsigned> & 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 {
 | 
			
		||||
 | 
			
		||||
@ -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 {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user