implement GetName() for shared memory (copy&paste)

This commit is contained in:
Dennis Luxen 2013-09-24 15:12:06 +02:00
parent 581c9c570b
commit 71fe8ed80d

View File

@ -55,8 +55,8 @@ private:
ShM<NodeID, true>::vector m_via_node_list; ShM<NodeID, true>::vector m_via_node_list;
ShM<unsigned, true>::vector m_name_ID_list; ShM<unsigned, true>::vector m_name_ID_list;
ShM<TurnInstruction, true>::vector m_turn_instruction_list; ShM<TurnInstruction, true>::vector m_turn_instruction_list;
ShM<char, false>::vector m_names_char_list; ShM<char, true>::vector m_names_char_list;
ShM<unsigned, false>::vector m_name_begin_indices; ShM<unsigned, true>::vector m_name_begin_indices;
StaticRTree<RTreeLeaf, true> * m_static_rtree; StaticRTree<RTreeLeaf, true> * m_static_rtree;
SharedDataFacade() { } SharedDataFacade() { }
@ -88,13 +88,13 @@ private:
} }
void LoadGraph() { void LoadGraph() {
m_number_of_nodes = *static_cast<unsigned *>( m_number_of_nodes = *static_cast<uint32_t *>(
SharedMemoryFactory::Get(GRAPH_NODE_LIST_SIZE)->Ptr() SharedMemoryFactory::Get(GRAPH_NODE_LIST_SIZE)->Ptr()
); );
SharedMemory * graph_nodes = SharedMemoryFactory::Get(GRAPH_NODE_LIST); SharedMemory * graph_nodes = SharedMemoryFactory::Get(GRAPH_NODE_LIST);
GraphNode * graph_nodes_ptr = static_cast<GraphNode *>( graph_nodes->Ptr() ); GraphNode * graph_nodes_ptr = static_cast<GraphNode *>( graph_nodes->Ptr() );
uint32_t number_of_edges = *static_cast<unsigned *>( uint32_t number_of_edges = *static_cast<uint32_t *>(
SharedMemoryFactory::Get(GRAPH_EDGE_LIST_SIZE)->Ptr() SharedMemoryFactory::Get(GRAPH_EDGE_LIST_SIZE)->Ptr()
); );
SharedMemory * graph_edges = SharedMemoryFactory::Get(GRAPH_EDGE_LIST); SharedMemory * graph_edges = SharedMemoryFactory::Get(GRAPH_EDGE_LIST);
@ -110,7 +110,7 @@ private:
} }
void LoadNodeAndEdgeInformation() { void LoadNodeAndEdgeInformation() {
uint32_t number_of_coordinates = *static_cast<unsigned *>( uint32_t number_of_coordinates = *static_cast<uint32_t *>(
SharedMemoryFactory::Get(COORDINATE_LIST_SIZE)->Ptr() SharedMemoryFactory::Get(COORDINATE_LIST_SIZE)->Ptr()
); );
FixedPointCoordinate * coordinate_list_ptr = static_cast<FixedPointCoordinate *>( FixedPointCoordinate * coordinate_list_ptr = static_cast<FixedPointCoordinate *>(
@ -122,7 +122,7 @@ private:
); );
m_coordinate_list.swap( coordinate_list ); m_coordinate_list.swap( coordinate_list );
uint32_t number_of_turn_instructions = *static_cast<unsigned *>( uint32_t number_of_turn_instructions = *static_cast<uint32_t *>(
SharedMemoryFactory::Get(TURN_INSTRUCTION_LIST_SIZE)->Ptr() SharedMemoryFactory::Get(TURN_INSTRUCTION_LIST_SIZE)->Ptr()
); );
@ -139,7 +139,7 @@ private:
} }
void LoadViaNodeList() { void LoadViaNodeList() {
uint32_t number_of_via_nodes = * static_cast<unsigned *> ( uint32_t number_of_via_nodes = * static_cast<uint32_t *> (
SharedMemoryFactory::Get(VIA_NODE_LIST_SIZE)->Ptr() SharedMemoryFactory::Get(VIA_NODE_LIST_SIZE)->Ptr()
); );
NodeID * via_node_list_ptr = static_cast<NodeID *>( NodeID * via_node_list_ptr = static_cast<NodeID *>(
@ -153,7 +153,29 @@ private:
} }
void LoadNames() { void LoadNames() {
uint32_t street_names_index_size = * static_cast<uint32_t *> (
SharedMemoryFactory::Get(NAME_INDEX_SIZE)->Ptr()
);
unsigned * street_names_index_ptr = static_cast<unsigned *>(
SharedMemoryFactory::Get(NAMES_INDEX)->Ptr()
);
typename ShM<unsigned, true>::vector name_begin_indices(
street_names_index_ptr,
street_names_index_size
);
m_name_begin_indices.swap(m_name_begin_indices);
uint32_t names_list_size = * static_cast<uint32_t *>(
SharedMemoryFactory::Get(NAMES_LIST_SIZE)->Ptr()
);
char * names_list_ptr = static_cast<char *>(
SharedMemoryFactory::Get(NAMES_LIST)->Ptr()
);
typename ShM<char, true>::vector names_char_list(
names_list_ptr,
names_list_size
);
m_names_char_list.swap(names_char_list);
} }
public: public:
@ -276,10 +298,35 @@ public:
unsigned GetNameIndexFromEdgeID(const unsigned id) const { return 0; }; unsigned GetNameIndexFromEdgeID(const unsigned id) const { return 0; };
void GetName( void GetName( const unsigned name_id, std::string & result ) const {
const unsigned name_id, if(UINT_MAX == name_id) {
std::string & result result = "";
) const { return; }; return;
}
BOOST_ASSERT_MSG(
name_id < m_name_begin_indices.size(),
"name id too high"
);
unsigned begin_index = m_name_begin_indices[name_id];
unsigned end_index = m_name_begin_indices[name_id+1];
BOOST_ASSERT_MSG(
begin_index < m_names_char_list.size(),
"begin index of name too high"
);
BOOST_ASSERT_MSG(
end_index < m_names_char_list.size(),
"end index of name too high"
);
BOOST_ASSERT_MSG(begin_index <= end_index, "string ends before begin");
result.clear();
result.resize(end_index - begin_index);
std::copy(
m_names_char_list.begin() + begin_index,
m_names_char_list.begin() + end_index,
result.begin()
);
}
std::string GetTimestamp() const { std::string GetTimestamp() const {
return m_timestamp; return m_timestamp;