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<TurnInstruction, true>::vector m_turn_instruction_list;
|
||||||
ShM<char, true>::vector m_names_char_list;
|
ShM<char, true>::vector m_names_char_list;
|
||||||
ShM<unsigned, true>::vector m_name_begin_indices;
|
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<
|
boost::shared_ptr<
|
||||||
StaticRTree<
|
StaticRTree<
|
||||||
RTreeLeaf,
|
RTreeLeaf,
|
||||||
@ -203,6 +207,28 @@ private:
|
|||||||
m_names_char_list.swap(names_char_list);
|
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:
|
public:
|
||||||
SharedDataFacade( ) {
|
SharedDataFacade( ) {
|
||||||
data_timestamp_ptr = (SharedDataTimestamp *)SharedMemoryFactory::Get(
|
data_timestamp_ptr = (SharedDataTimestamp *)SharedMemoryFactory::Get(
|
||||||
@ -254,7 +280,7 @@ public:
|
|||||||
|
|
||||||
LoadGraph();
|
LoadGraph();
|
||||||
LoadNodeAndEdgeInformation();
|
LoadNodeAndEdgeInformation();
|
||||||
//TODO: LoadGeometries();
|
LoadGeometries();
|
||||||
LoadRTree(ram_index_path);
|
LoadRTree(ram_index_path);
|
||||||
LoadTimestamp();
|
LoadTimestamp();
|
||||||
LoadViaNodeList();
|
LoadViaNodeList();
|
||||||
@ -321,19 +347,23 @@ public:
|
|||||||
FixedPointCoordinate GetCoordinateOfNode(
|
FixedPointCoordinate GetCoordinateOfNode(
|
||||||
const unsigned id
|
const unsigned id
|
||||||
) const {
|
) const {
|
||||||
// const NodeID node = m_via_node_list.at(id);
|
|
||||||
return m_coordinate_list->at(id);
|
return m_coordinate_list->at(id);
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual bool EdgeIsCompressed( const unsigned id ) const {
|
virtual bool EdgeIsCompressed( const unsigned id ) const {
|
||||||
//TODO!!
|
return m_egde_is_compressed.at(id);
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void GetUncompressedGeometry(
|
virtual void GetUncompressedGeometry(
|
||||||
const unsigned id, std::vector<unsigned> & result_nodes
|
const unsigned id, std::vector<unsigned> & result_nodes
|
||||||
) const {
|
) 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 {
|
virtual unsigned GetGeometryIndexForEdgeID(const unsigned id) const {
|
||||||
|
@ -56,6 +56,8 @@ struct SharedDataLayout {
|
|||||||
uint64_t coordinate_list_size;
|
uint64_t coordinate_list_size;
|
||||||
uint64_t turn_instruction_list_size;
|
uint64_t turn_instruction_list_size;
|
||||||
uint64_t r_search_tree_size;
|
uint64_t r_search_tree_size;
|
||||||
|
uint64_t geometries_index_list_size;
|
||||||
|
uint64_t geometries_list_size;
|
||||||
|
|
||||||
unsigned checksum;
|
unsigned checksum;
|
||||||
unsigned timestamp_length;
|
unsigned timestamp_length;
|
||||||
@ -72,8 +74,11 @@ struct SharedDataLayout {
|
|||||||
coordinate_list_size(0),
|
coordinate_list_size(0),
|
||||||
turn_instruction_list_size(0),
|
turn_instruction_list_size(0),
|
||||||
r_search_tree_size(0),
|
r_search_tree_size(0),
|
||||||
|
geometries_index_list_size(0),
|
||||||
|
geometries_list_size(0),
|
||||||
checksum(0),
|
checksum(0),
|
||||||
timestamp_length(0)
|
timestamp_length(0)
|
||||||
|
|
||||||
{
|
{
|
||||||
ram_index_file_name[0] = '\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) << "coordinate_list_size: " << coordinate_list_size;
|
||||||
SimpleLogger().Write(logDEBUG) << "turn_instruction_list_size: " << turn_instruction_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) << "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) << "sizeof(checksum): " << sizeof(checksum);
|
||||||
SimpleLogger().Write(logDEBUG) << "ram index file name: " << ram_index_file_name;
|
SimpleLogger().Write(logDEBUG) << "ram index file name: " << ram_index_file_name;
|
||||||
}
|
}
|
||||||
@ -106,6 +113,8 @@ struct SharedDataLayout {
|
|||||||
(coordinate_list_size * sizeof(FixedPointCoordinate) ) +
|
(coordinate_list_size * sizeof(FixedPointCoordinate) ) +
|
||||||
(turn_instruction_list_size * sizeof(TurnInstructionsClass)) +
|
(turn_instruction_list_size * sizeof(TurnInstructionsClass)) +
|
||||||
(r_search_tree_size * sizeof(RTreeNode) ) +
|
(r_search_tree_size * sizeof(RTreeNode) ) +
|
||||||
|
(geometries_index_list_size * sizeof(unsigned) ) +
|
||||||
|
(geometries_list_size * sizeof(unsigned) ) +
|
||||||
sizeof(checksum) +
|
sizeof(checksum) +
|
||||||
1024*sizeof(char);
|
1024*sizeof(char);
|
||||||
return result;
|
return result;
|
||||||
@ -195,7 +204,7 @@ struct SharedDataLayout {
|
|||||||
(turn_instruction_list_size * sizeof(TurnInstructionsClass));
|
(turn_instruction_list_size * sizeof(TurnInstructionsClass));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
uint64_t GetChecksumOffset() const {
|
uint64_t GetGeometriesIndicesOffset() const {
|
||||||
uint64_t result =
|
uint64_t result =
|
||||||
(name_index_list_size * sizeof(unsigned) ) +
|
(name_index_list_size * sizeof(unsigned) ) +
|
||||||
(name_char_list_size * sizeof(char) ) +
|
(name_char_list_size * sizeof(char) ) +
|
||||||
@ -209,6 +218,37 @@ struct SharedDataLayout {
|
|||||||
(r_search_tree_size * sizeof(RTreeNode) );
|
(r_search_tree_size * sizeof(RTreeNode) );
|
||||||
return result;
|
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 {
|
enum SharedDataType {
|
||||||
|
Loading…
Reference in New Issue
Block a user