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