fix storage
This commit is contained in:
parent
9c8bf820de
commit
44b841a25d
@ -312,6 +312,65 @@ int Storage::Run()
|
|||||||
shared_layout_ptr->SetBlockSize<std::size_t>(SharedDataLayout::DATASOURCE_NAME_LENGTHS,
|
shared_layout_ptr->SetBlockSize<std::size_t>(SharedDataLayout::DATASOURCE_NAME_LENGTHS,
|
||||||
m_datasource_name_lengths.size());
|
m_datasource_name_lengths.size());
|
||||||
|
|
||||||
|
boost::filesystem::ifstream intersection_stream(config.intersection_class_path,
|
||||||
|
std::ios::binary);
|
||||||
|
if (!static_cast<bool>(intersection_stream))
|
||||||
|
throw util::exception("Could not open " + config.intersection_class_path.string() +
|
||||||
|
" for reading.");
|
||||||
|
|
||||||
|
if (!util::readAndCheckFingerprint(intersection_stream))
|
||||||
|
throw util::exception("Fingerprint of " + config.intersection_class_path.string() +
|
||||||
|
" does not match or could not read from file");
|
||||||
|
|
||||||
|
std::vector<BearingClassID> bearing_class_id_table;
|
||||||
|
if (!util::deserializeVector(intersection_stream, bearing_class_id_table))
|
||||||
|
throw util::exception("Failed to read from " + config.names_data_path.string());
|
||||||
|
|
||||||
|
shared_layout_ptr->SetBlockSize<BearingClassID>(SharedDataLayout::BEARING_CLASSID,
|
||||||
|
bearing_class_id_table.size());
|
||||||
|
unsigned bearing_blocks = 0;
|
||||||
|
intersection_stream.read((char *)&bearing_blocks, sizeof(unsigned));
|
||||||
|
unsigned sum_lengths = 0;
|
||||||
|
intersection_stream.read((char *)&sum_lengths, sizeof(unsigned));
|
||||||
|
|
||||||
|
shared_layout_ptr->SetBlockSize<unsigned>(SharedDataLayout::BEARING_OFFSETS, bearing_blocks);
|
||||||
|
shared_layout_ptr->SetBlockSize<typename util::RangeTable<16, true>::BlockT>(
|
||||||
|
SharedDataLayout::BEARING_BLOCKS, bearing_blocks);
|
||||||
|
|
||||||
|
std::vector<unsigned> bearing_offsets_data(bearing_blocks);
|
||||||
|
std::vector<unsigned> bearing_blocks_data(bearing_blocks);
|
||||||
|
|
||||||
|
if (bearing_blocks)
|
||||||
|
{
|
||||||
|
intersection_stream.read(
|
||||||
|
reinterpret_cast<char *>(&bearing_offsets_data[0]),
|
||||||
|
shared_layout_ptr->GetBlockSize(SharedDataLayout::BEARING_OFFSETS));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bearing_blocks)
|
||||||
|
{
|
||||||
|
intersection_stream.read(reinterpret_cast<char *>(&bearing_blocks_data[0]),
|
||||||
|
shared_layout_ptr->GetBlockSize(SharedDataLayout::BEARING_BLOCKS));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::uint64_t num_bearings;
|
||||||
|
intersection_stream >> num_bearings;
|
||||||
|
|
||||||
|
std::vector<DiscreteBearing> bearing_class_table(num_bearings);
|
||||||
|
intersection_stream.read(reinterpret_cast<char *>(&bearing_class_table[0]),
|
||||||
|
sizeof(bearing_class_table[0]) * num_bearings);
|
||||||
|
shared_layout_ptr->SetBlockSize<DiscreteBearing>(SharedDataLayout::BEARING_VALUES,
|
||||||
|
num_bearings);
|
||||||
|
if (!static_cast<bool>(intersection_stream))
|
||||||
|
throw util::exception("Failed to read from " + config.names_data_path.string());
|
||||||
|
|
||||||
|
std::vector<util::guidance::EntryClass> entry_class_table;
|
||||||
|
if (!util::deserializeVector(intersection_stream, entry_class_table))
|
||||||
|
throw util::exception("Failed to read from " + config.names_data_path.string());
|
||||||
|
|
||||||
|
shared_layout_ptr->SetBlockSize<util::guidance::EntryClass>(SharedDataLayout::ENTRY_CLASS,
|
||||||
|
entry_class_table.size());
|
||||||
|
|
||||||
// allocate shared memory block
|
// allocate shared memory block
|
||||||
util::SimpleLogger().Write() << "allocating shared memory of "
|
util::SimpleLogger().Write() << "allocating shared memory of "
|
||||||
<< shared_layout_ptr->GetSizeOfLayout() << " bytes";
|
<< shared_layout_ptr->GetSizeOfLayout() << " bytes";
|
||||||
@ -572,23 +631,6 @@ int Storage::Run()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// load intersection classes
|
// load intersection classes
|
||||||
{
|
|
||||||
boost::filesystem::ifstream intersection_stream(config.intersection_class_path,
|
|
||||||
std::ios::binary);
|
|
||||||
if (!static_cast<bool>(intersection_stream))
|
|
||||||
throw util::exception("Could not open " + config.intersection_class_path.string() +
|
|
||||||
" for reading.");
|
|
||||||
|
|
||||||
if (!util::readAndCheckFingerprint(intersection_stream))
|
|
||||||
throw util::exception("Fingerprint of " + config.intersection_class_path.string() +
|
|
||||||
" does not match or could not read from file");
|
|
||||||
|
|
||||||
std::vector<BearingClassID> bearing_class_id_table;
|
|
||||||
if (!util::deserializeVector(intersection_stream, bearing_class_id_table))
|
|
||||||
throw util::exception("Failed to read from " + config.names_data_path.string());
|
|
||||||
|
|
||||||
shared_layout_ptr->SetBlockSize<BearingClassID>(SharedDataLayout::BEARING_CLASSID,
|
|
||||||
bearing_class_id_table.size());
|
|
||||||
if (!bearing_class_id_table.empty())
|
if (!bearing_class_id_table.empty())
|
||||||
{
|
{
|
||||||
auto bearing_id_ptr = shared_layout_ptr->GetBlockPtr<BearingClassID, true>(
|
auto bearing_id_ptr = shared_layout_ptr->GetBlockPtr<BearingClassID, true>(
|
||||||
@ -596,42 +638,21 @@ int Storage::Run()
|
|||||||
std::copy(bearing_class_id_table.begin(), bearing_class_id_table.end(), bearing_id_ptr);
|
std::copy(bearing_class_id_table.begin(), bearing_class_id_table.end(), bearing_id_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned bearing_blocks = 0;
|
|
||||||
intersection_stream.read((char *)&bearing_blocks, sizeof(unsigned));
|
|
||||||
unsigned sum_lengths = 0;
|
|
||||||
intersection_stream.read((char *)&sum_lengths, sizeof(unsigned));
|
|
||||||
|
|
||||||
shared_layout_ptr->SetBlockSize<unsigned>(SharedDataLayout::BEARING_OFFSETS,
|
|
||||||
bearing_blocks);
|
|
||||||
shared_layout_ptr->SetBlockSize<typename util::RangeTable<16, true>::BlockT>(
|
|
||||||
SharedDataLayout::BEARING_BLOCKS, bearing_blocks);
|
|
||||||
|
|
||||||
if (shared_layout_ptr->GetBlockSize(SharedDataLayout::BEARING_OFFSETS) > 0)
|
if (shared_layout_ptr->GetBlockSize(SharedDataLayout::BEARING_OFFSETS) > 0)
|
||||||
{
|
{
|
||||||
unsigned *bearing_offsets_ptr = shared_layout_ptr->GetBlockPtr<unsigned, true>(
|
unsigned *bearing_offsets_ptr = shared_layout_ptr->GetBlockPtr<unsigned, true>(
|
||||||
shared_memory_ptr, SharedDataLayout::BEARING_OFFSETS);
|
shared_memory_ptr, SharedDataLayout::BEARING_OFFSETS);
|
||||||
intersection_stream.read(
|
std::copy(bearing_offsets_data.begin(), bearing_offsets_data.end(),
|
||||||
reinterpret_cast<char *>(bearing_offsets_ptr),
|
bearing_offsets_ptr);
|
||||||
shared_layout_ptr->GetBlockSize(SharedDataLayout::BEARING_OFFSETS));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shared_layout_ptr->GetBlockSize(SharedDataLayout::BEARING_BLOCKS) > 0)
|
if (shared_layout_ptr->GetBlockSize(SharedDataLayout::BEARING_BLOCKS) > 0)
|
||||||
{
|
{
|
||||||
unsigned *bearing_blocks_ptr = shared_layout_ptr->GetBlockPtr<unsigned, true>(
|
unsigned *bearing_blocks_ptr = shared_layout_ptr->GetBlockPtr<unsigned, true>(
|
||||||
shared_memory_ptr, SharedDataLayout::BEARING_BLOCKS);
|
shared_memory_ptr, SharedDataLayout::BEARING_BLOCKS);
|
||||||
intersection_stream.read(
|
std::copy(bearing_blocks_data.begin(), bearing_blocks_data.end(),bearing_blocks_ptr);
|
||||||
reinterpret_cast<char *>(bearing_blocks_ptr),
|
|
||||||
shared_layout_ptr->GetBlockSize(SharedDataLayout::BEARING_BLOCKS));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::uint64_t num_bearings;
|
|
||||||
intersection_stream >> num_bearings;
|
|
||||||
|
|
||||||
std::vector<DiscreteBearing> bearing_class_table(num_bearings);
|
|
||||||
intersection_stream.read(reinterpret_cast<char *>(&bearing_class_table[0]),
|
|
||||||
sizeof(bearing_class_table[0]) * num_bearings);
|
|
||||||
shared_layout_ptr->SetBlockSize<DiscreteBearing>(SharedDataLayout::BEARING_VALUES,
|
|
||||||
num_bearings);
|
|
||||||
if (!bearing_class_table.empty())
|
if (!bearing_class_table.empty())
|
||||||
{
|
{
|
||||||
auto bearing_class_ptr = shared_layout_ptr->GetBlockPtr<DiscreteBearing, true>(
|
auto bearing_class_ptr = shared_layout_ptr->GetBlockPtr<DiscreteBearing, true>(
|
||||||
@ -639,22 +660,12 @@ int Storage::Run()
|
|||||||
std::copy(bearing_class_table.begin(), bearing_class_table.end(), bearing_class_ptr);
|
std::copy(bearing_class_table.begin(), bearing_class_table.end(), bearing_class_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!static_cast<bool>(intersection_stream))
|
|
||||||
throw util::exception("Failed to read from " + config.names_data_path.string());
|
|
||||||
|
|
||||||
std::vector<util::guidance::EntryClass> entry_class_table;
|
|
||||||
if (!util::deserializeVector(intersection_stream, entry_class_table))
|
|
||||||
throw util::exception("Failed to read from " + config.names_data_path.string());
|
|
||||||
|
|
||||||
shared_layout_ptr->SetBlockSize<util::guidance::EntryClass>(SharedDataLayout::ENTRY_CLASS,
|
|
||||||
entry_class_table.size());
|
|
||||||
if (!entry_class_table.empty())
|
if (!entry_class_table.empty())
|
||||||
{
|
{
|
||||||
auto entry_class_ptr = shared_layout_ptr->GetBlockPtr<util::guidance::EntryClass, true>(
|
auto entry_class_ptr = shared_layout_ptr->GetBlockPtr<util::guidance::EntryClass, true>(
|
||||||
shared_memory_ptr, SharedDataLayout::ENTRY_CLASS);
|
shared_memory_ptr, SharedDataLayout::ENTRY_CLASS);
|
||||||
std::copy(entry_class_table.begin(), entry_class_table.end(), entry_class_ptr);
|
std::copy(entry_class_table.begin(), entry_class_table.end(), entry_class_ptr);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
data_timestamp_ptr->layout = layout_region;
|
data_timestamp_ptr->layout = layout_region;
|
||||||
data_timestamp_ptr->data = data_region;
|
data_timestamp_ptr->data = data_region;
|
||||||
|
Loading…
Reference in New Issue
Block a user