From cf5f6be472672588589cffe6d37ad90a4a631b68 Mon Sep 17 00:00:00 2001 From: Patrick Niklaus Date: Sat, 17 Mar 2018 01:37:02 +0000 Subject: [PATCH] Swtich EBG to tar file --- include/extractor/files.hpp | 18 ++++++++++-------- include/storage/serialization.hpp | 14 ++++++++++++++ include/util/deallocating_vector.hpp | 8 ++++++++ src/storage/storage.cpp | 3 --- unit_tests/storage/serialization.cpp | 20 ++++++++++++++++++++ 5 files changed, 52 insertions(+), 11 deletions(-) diff --git a/include/extractor/files.hpp b/include/extractor/files.hpp index 8d9684ad3..74095ef6d 100644 --- a/include/extractor/files.hpp +++ b/include/extractor/files.hpp @@ -83,11 +83,13 @@ void writeEdgeBasedGraph(const boost::filesystem::path &path, { static_assert(std::is_same::value, ""); - storage::io::FileWriter writer(path, storage::io::FileWriter::GenerateFingerprint); + storage::tar::FileWriter writer(path, storage::tar::FileWriter::GenerateFingerprint); - writer.WriteElementCount64(number_of_edge_based_nodes); - storage::serialization::write(writer, edge_based_edge_list); - writer.WriteOne(connectivity_checksum); + writer.WriteElementCount64("/common/number_of_edge_based_nodes", 1); + writer.WriteOne("/common/number_of_edge_based_nodes", number_of_edge_based_nodes); + storage::serialization::write(writer, "/common/edge_based_edge_list", edge_based_edge_list); + writer.WriteElementCount64("/common/connectivity_checksum", 1); + writer.WriteOne("/common/connectivity_checksum", connectivity_checksum); } template @@ -98,11 +100,11 @@ void readEdgeBasedGraph(const boost::filesystem::path &path, { static_assert(std::is_same::value, ""); - storage::io::FileReader reader(path, storage::io::FileReader::VerifyFingerprint); + storage::tar::FileReader reader(path, storage::tar::FileReader::VerifyFingerprint); - number_of_edge_based_nodes = reader.ReadElementCount64(); - storage::serialization::read(reader, edge_based_edge_list); - reader.ReadInto(connectivity_checksum); + number_of_edge_based_nodes = reader.ReadOne("/common/number_of_edge_based_nodes"); + storage::serialization::read(reader, "/common/edge_based_edge_list", edge_based_edge_list); + connectivity_checksum = reader.ReadOne("/common/connectivity_checksum"); } // reads .osrm.nodes diff --git a/include/storage/serialization.hpp b/include/storage/serialization.hpp index 9c29b0817..f3202433f 100644 --- a/include/storage/serialization.hpp +++ b/include/storage/serialization.hpp @@ -67,6 +67,20 @@ inline void write(storage::io::FileWriter &writer, const util::DeallocatingVecto writer.WriteFrom(vec.bucket_list.back(), last_block_size); } +template +inline void read(storage::tar::FileReader &reader, const std::string& name, util::DeallocatingVector &vec) +{ + vec.resize(reader.ReadElementCount64(name)); + reader.ReadStreaming(name, vec.begin(), vec.size()); +} + +template +inline void write(storage::tar::FileWriter &writer, const std::string& name, const util::DeallocatingVector &vec) +{ + writer.WriteElementCount64(name, vec.size()); + writer.WriteStreaming(name, vec.begin(), vec.size()); +} + #if USE_STXXL_LIBRARY template inline void read(storage::io::FileReader &reader, stxxl::vector &vec) { diff --git a/include/util/deallocating_vector.hpp b/include/util/deallocating_vector.hpp index 5f3321142..046f9c983 100644 --- a/include/util/deallocating_vector.hpp +++ b/include/util/deallocating_vector.hpp @@ -228,6 +228,14 @@ template class DeallocatingVector return *this; } + DeallocatingVector(std::initializer_list elements) + { + for (auto && elem : elements) + { + emplace_back(std::move(elem)); + } + } + ~DeallocatingVector() { clear(); } friend void swap<>(DeallocatingVector &lhs, DeallocatingVector &rhs); diff --git a/src/storage/storage.cpp b/src/storage/storage.cpp index 1ba0ecb51..6e74bda27 100644 --- a/src/storage/storage.cpp +++ b/src/storage/storage.cpp @@ -394,9 +394,6 @@ void Storage::PopulateLayout(DataLayout &layout) layout.SetBlock(DataLayout::DATASOURCES_NAMES, make_block(1)); } - { - } - { // Loading turn lane data io::FileReader lane_data_file(config.GetPath(".osrm.tld"), diff --git a/unit_tests/storage/serialization.cpp b/unit_tests/storage/serialization.cpp index e93e36b7a..7f4de45e5 100644 --- a/unit_tests/storage/serialization.cpp +++ b/unit_tests/storage/serialization.cpp @@ -112,4 +112,24 @@ BOOST_AUTO_TEST_CASE(tar_serialize_unsigned_vector) } } +BOOST_AUTO_TEST_CASE(tar_serialize_deallocting_vector) +{ + TemporaryFile tmp; + { + std::vector> data = { + {}, {0}, {1, 2, 3}, {4, 5, 6, 7, 8, 9, 10, 11}, {12, 13, 14, 15, 16, 17, 18, 19, 20}}; + for (const auto &v : data) + { + { + tar::FileWriter writer(tmp.path, tar::FileWriter::GenerateFingerprint); + storage::serialization::write(writer, "my_unsigned_vector", v); + } + std::vector result; + tar::FileReader reader(tmp.path, tar::FileReader::VerifyFingerprint); + storage::serialization::read(reader, "my_unsigned_vector", result); + BOOST_CHECK_EQUAL_COLLECTIONS(v.begin(), v.end(), result.begin(), result.end()); + } + } +} + BOOST_AUTO_TEST_SUITE_END()