Remove ownership of block pointers from base class.

This commit is contained in:
Daniel Patterson 2016-11-11 12:47:11 -08:00
parent 02303904b8
commit 6949d7ee5b
3 changed files with 29 additions and 38 deletions

View File

@ -50,10 +50,6 @@ namespace datafacade
*/ */
class BigRAMBlockDataFacadeBase : public BaseDataFacade class BigRAMBlockDataFacadeBase : public BaseDataFacade
{ {
protected:
storage::DataLayout *data_layout;
char *memory_block;
private: private:
using super = BaseDataFacade; using super = BaseDataFacade;
using QueryGraph = util::StaticGraph<EdgeData, true>; using QueryGraph = util::StaticGraph<EdgeData, true>;
@ -115,20 +111,20 @@ class BigRAMBlockDataFacadeBase : public BaseDataFacade
std::shared_ptr<util::RangeTable<16, true>> m_bearing_ranges_table; std::shared_ptr<util::RangeTable<16, true>> m_bearing_ranges_table;
util::ShM<DiscreteBearing, true>::vector m_bearing_values_table; util::ShM<DiscreteBearing, true>::vector m_bearing_values_table;
void InitChecksum() void InitChecksum(storage::DataLayout *data_layout, char *memory_block)
{ {
m_check_sum = m_check_sum =
*data_layout->GetBlockPtr<unsigned>(memory_block, storage::DataLayout::HSGR_CHECKSUM); *data_layout->GetBlockPtr<unsigned>(memory_block, storage::DataLayout::HSGR_CHECKSUM);
util::SimpleLogger().Write() << "set checksum: " << m_check_sum; util::SimpleLogger().Write() << "set checksum: " << m_check_sum;
} }
void InitProfileProperties() void InitProfileProperties(storage::DataLayout *data_layout, char *memory_block)
{ {
m_profile_properties = data_layout->GetBlockPtr<extractor::ProfileProperties>( m_profile_properties = data_layout->GetBlockPtr<extractor::ProfileProperties>(
memory_block, storage::DataLayout::PROPERTIES); memory_block, storage::DataLayout::PROPERTIES);
} }
void InitTimestamp() void InitTimestamp(storage::DataLayout *data_layout, char *memory_block)
{ {
auto timestamp_ptr = auto timestamp_ptr =
data_layout->GetBlockPtr<char>(memory_block, storage::DataLayout::TIMESTAMP); data_layout->GetBlockPtr<char>(memory_block, storage::DataLayout::TIMESTAMP);
@ -138,7 +134,7 @@ class BigRAMBlockDataFacadeBase : public BaseDataFacade
m_timestamp.begin()); m_timestamp.begin());
} }
void InitRTree() void InitRTree(storage::DataLayout *data_layout, char *memory_block)
{ {
BOOST_ASSERT_MSG(!m_coordinate_list.empty(), "coordinates must be loaded before r-tree"); BOOST_ASSERT_MSG(!m_coordinate_list.empty(), "coordinates must be loaded before r-tree");
@ -163,7 +159,7 @@ class BigRAMBlockDataFacadeBase : public BaseDataFacade
new SharedGeospatialQuery(*m_static_rtree, m_coordinate_list, *this)); new SharedGeospatialQuery(*m_static_rtree, m_coordinate_list, *this));
} }
void InitGraph() void InitGraph(storage::DataLayout *data_layout, char *memory_block)
{ {
auto graph_nodes_ptr = auto graph_nodes_ptr =
data_layout->GetBlockPtr<GraphNode>(memory_block, storage::DataLayout::GRAPH_NODE_LIST); data_layout->GetBlockPtr<GraphNode>(memory_block, storage::DataLayout::GRAPH_NODE_LIST);
@ -178,7 +174,7 @@ class BigRAMBlockDataFacadeBase : public BaseDataFacade
m_query_graph.reset(new QueryGraph(node_list, edge_list)); m_query_graph.reset(new QueryGraph(node_list, edge_list));
} }
void InitNodeAndEdgeInformation() void InitNodeAndEdgeInformation(storage::DataLayout *data_layout, char *memory_block)
{ {
const auto coordinate_list_ptr = data_layout->GetBlockPtr<util::Coordinate>( const auto coordinate_list_ptr = data_layout->GetBlockPtr<util::Coordinate>(
memory_block, storage::DataLayout::COORDINATE_LIST); memory_block, storage::DataLayout::COORDINATE_LIST);
@ -251,7 +247,7 @@ class BigRAMBlockDataFacadeBase : public BaseDataFacade
m_post_turn_bearing = std::move(post_turn_bearing); m_post_turn_bearing = std::move(post_turn_bearing);
} }
void InitViaNodeList() void InitViaNodeList(storage::DataLayout *data_layout, char *memory_block)
{ {
auto via_geometry_list_ptr = auto via_geometry_list_ptr =
data_layout->GetBlockPtr<GeometryID>(memory_block, storage::DataLayout::VIA_NODE_LIST); data_layout->GetBlockPtr<GeometryID>(memory_block, storage::DataLayout::VIA_NODE_LIST);
@ -260,7 +256,7 @@ class BigRAMBlockDataFacadeBase : public BaseDataFacade
m_via_geometry_list = std::move(via_geometry_list); m_via_geometry_list = std::move(via_geometry_list);
} }
void InitNames() void InitNames(storage::DataLayout *data_layout, char *memory_block)
{ {
auto offsets_ptr = auto offsets_ptr =
data_layout->GetBlockPtr<unsigned>(memory_block, storage::DataLayout::NAME_OFFSETS); data_layout->GetBlockPtr<unsigned>(memory_block, storage::DataLayout::NAME_OFFSETS);
@ -281,7 +277,7 @@ class BigRAMBlockDataFacadeBase : public BaseDataFacade
m_names_char_list = std::move(names_char_list); m_names_char_list = std::move(names_char_list);
} }
void InitTurnLaneDescriptions() void InitTurnLaneDescriptions(storage::DataLayout *data_layout, char *memory_block)
{ {
auto offsets_ptr = data_layout->GetBlockPtr<std::uint32_t>( auto offsets_ptr = data_layout->GetBlockPtr<std::uint32_t>(
memory_block, storage::DataLayout::LANE_DESCRIPTION_OFFSETS); memory_block, storage::DataLayout::LANE_DESCRIPTION_OFFSETS);
@ -297,7 +293,7 @@ class BigRAMBlockDataFacadeBase : public BaseDataFacade
m_lane_description_masks = std::move(masks); m_lane_description_masks = std::move(masks);
} }
void InitCoreInformation() void InitCoreInformation(storage::DataLayout *data_layout, char *memory_block)
{ {
auto core_marker_ptr = auto core_marker_ptr =
data_layout->GetBlockPtr<unsigned>(memory_block, storage::DataLayout::CORE_MARKER); data_layout->GetBlockPtr<unsigned>(memory_block, storage::DataLayout::CORE_MARKER);
@ -306,7 +302,7 @@ class BigRAMBlockDataFacadeBase : public BaseDataFacade
m_is_core_node = std::move(is_core_node); m_is_core_node = std::move(is_core_node);
} }
void InitGeometries() void InitGeometries(storage::DataLayout *data_layout, char *memory_block)
{ {
auto geometries_index_ptr = auto geometries_index_ptr =
data_layout->GetBlockPtr<unsigned>(memory_block, storage::DataLayout::GEOMETRIES_INDEX); data_layout->GetBlockPtr<unsigned>(memory_block, storage::DataLayout::GEOMETRIES_INDEX);
@ -363,7 +359,7 @@ class BigRAMBlockDataFacadeBase : public BaseDataFacade
m_datasource_name_lengths = std::move(datasource_name_lengths); m_datasource_name_lengths = std::move(datasource_name_lengths);
} }
void InitIntersectionClasses() void InitIntersectionClasses(storage::DataLayout *data_layout, char *memory_block)
{ {
auto bearing_class_id_ptr = data_layout->GetBlockPtr<BearingClassID>( auto bearing_class_id_ptr = data_layout->GetBlockPtr<BearingClassID>(
memory_block, storage::DataLayout::BEARING_CLASSID); memory_block, storage::DataLayout::BEARING_CLASSID);
@ -397,20 +393,20 @@ class BigRAMBlockDataFacadeBase : public BaseDataFacade
} }
public: public:
void Init() void Init(storage::DataLayout *data_layout, char *memory_block)
{ {
InitGraph(); InitGraph(data_layout, memory_block);
InitChecksum(); InitChecksum(data_layout, memory_block);
InitNodeAndEdgeInformation(); InitNodeAndEdgeInformation(data_layout, memory_block);
InitGeometries(); InitGeometries(data_layout, memory_block);
InitTimestamp(); InitTimestamp(data_layout, memory_block);
InitViaNodeList(); InitViaNodeList(data_layout, memory_block);
InitNames(); InitNames(data_layout, memory_block);
InitTurnLaneDescriptions(); InitTurnLaneDescriptions(data_layout, memory_block);
InitCoreInformation(); InitCoreInformation(data_layout, memory_block);
InitProfileProperties(); InitProfileProperties(data_layout, memory_block);
InitRTree(); InitRTree(data_layout, memory_block);
InitIntersectionClasses(); InitIntersectionClasses(data_layout, memory_block);
} }
// search graph access // search graph access

View File

@ -41,12 +41,8 @@ class InternalDataFacade final : public BigRAMBlockDataFacadeBase
internal_memory.reset(new char[internal_layout->GetSizeOfLayout()]); internal_memory.reset(new char[internal_layout->GetSizeOfLayout()]);
storage.LoadData(internal_layout.get(), internal_memory.get()); storage.LoadData(internal_layout.get(), internal_memory.get());
// Set the common base-class pointers
data_layout = internal_layout.get();
memory_block = internal_memory.get();
// Adjust all the private m_* members to point to the right places // Adjust all the private m_* members to point to the right places
Init(); Init(internal_layout.get(), internal_memory.get());
} }
}; };
} }

View File

@ -80,12 +80,11 @@ class SharedDataFacade : public BigRAMBlockDataFacadeBase
BOOST_ASSERT(storage::SharedMemory::RegionExists(layout_region)); BOOST_ASSERT(storage::SharedMemory::RegionExists(layout_region));
m_layout_memory = storage::makeSharedMemory(layout_region); m_layout_memory = storage::makeSharedMemory(layout_region);
data_layout = static_cast<storage::DataLayout *>(m_layout_memory->Ptr());
BOOST_ASSERT(storage::SharedMemory::RegionExists(data_region)); BOOST_ASSERT(storage::SharedMemory::RegionExists(data_region));
m_large_memory = storage::makeSharedMemory(data_region); m_large_memory = storage::makeSharedMemory(data_region);
memory_block = (char *)(m_large_memory->Ptr());
Init(); Init(static_cast<storage::DataLayout *>(m_layout_memory->Ptr()),
static_cast<char *>(m_large_memory->Ptr()));
} }
}; };
} }