Port .osrm.icd file over to tar
This commit is contained in:
		
							parent
							
								
									c664d0392a
								
							
						
					
					
						commit
						5d1b4ce71d
					
				| @ -169,7 +169,7 @@ add_executable(osrm-routed src/tools/routed.cpp $<TARGET_OBJECTS:SERVER> $<TARGE | ||||
| add_executable(osrm-datastore src/tools/store.cpp $<TARGET_OBJECTS:MICROTAR> $<TARGET_OBJECTS:UTIL>) | ||||
| add_library(osrm src/osrm/osrm.cpp $<TARGET_OBJECTS:ENGINE> $<TARGET_OBJECTS:STORAGE> $<TARGET_OBJECTS:MICROTAR> $<TARGET_OBJECTS:UTIL> ) | ||||
| add_library(osrm_contract src/osrm/contractor.cpp $<TARGET_OBJECTS:CONTRACTOR> $<TARGET_OBJECTS:UTIL>) | ||||
| add_library(osrm_extract src/osrm/extractor.cpp $<TARGET_OBJECTS:EXTRACTOR> $<TARGET_OBJECTS:UTIL>) | ||||
| add_library(osrm_extract src/osrm/extractor.cpp $<TARGET_OBJECTS:EXTRACTOR> $<TARGET_OBJECTS:MICROTAR> $<TARGET_OBJECTS:UTIL>) | ||||
| add_library(osrm_guidance $<TARGET_OBJECTS:GUIDANCE> $<TARGET_OBJECTS:UTIL>) | ||||
| add_library(osrm_partition src/osrm/partitioner.cpp $<TARGET_OBJECTS:PARTITIONER> $<TARGET_OBJECTS:MICROTAR> $<TARGET_OBJECTS:UTIL>) | ||||
| add_library(osrm_customize src/osrm/customizer.cpp $<TARGET_OBJECTS:CUSTOMIZER> $<TARGET_OBJECTS:MICROTAR> $<TARGET_OBJECTS:UTIL>) | ||||
|  | ||||
| @ -33,10 +33,10 @@ inline void writeIntersections(const boost::filesystem::path &path, | ||||
|                       std::is_same<IntersectionBearingsView, IntersectionBearingsT>::value, | ||||
|                   ""); | ||||
| 
 | ||||
|     storage::io::FileWriter writer(path, storage::io::FileWriter::GenerateFingerprint); | ||||
|     storage::tar::FileWriter writer(path, storage::tar::FileWriter::GenerateFingerprint); | ||||
| 
 | ||||
|     serialization::write(writer, intersection_bearings); | ||||
|     storage::serialization::write(writer, entry_classes); | ||||
|     serialization::write(writer, "/common/intersection_bearings", intersection_bearings); | ||||
|     storage::serialization::write(writer, "/common/entry_classes", entry_classes); | ||||
| } | ||||
| 
 | ||||
| // read the .osrm.icd file
 | ||||
| @ -49,10 +49,10 @@ inline void readIntersections(const boost::filesystem::path &path, | ||||
|                       std::is_same<IntersectionBearingsView, IntersectionBearingsT>::value, | ||||
|                   ""); | ||||
| 
 | ||||
|     storage::io::FileReader reader(path, storage::io::FileReader::VerifyFingerprint); | ||||
|     storage::tar::FileReader reader(path, storage::tar::FileReader::VerifyFingerprint); | ||||
| 
 | ||||
|     serialization::read(reader, intersection_bearings); | ||||
|     storage::serialization::read(reader, entry_classes); | ||||
|     serialization::read(reader, "/common/intersection_bearings", intersection_bearings); | ||||
|     storage::serialization::read(reader, "/common/entry_classes", entry_classes); | ||||
| } | ||||
| 
 | ||||
| // reads .osrm.properties
 | ||||
|  | ||||
| @ -2,6 +2,7 @@ | ||||
| #define OSRM_EXTRACTOR_BEARING_CONTAINER_HPP | ||||
| 
 | ||||
| #include "storage/shared_memory_ownership.hpp" | ||||
| #include "storage/tar_fwd.hpp" | ||||
| 
 | ||||
| #include "util/guidance/bearing_class.hpp" | ||||
| #include "util/range_table.hpp" | ||||
| @ -21,11 +22,13 @@ template <storage::Ownership Ownership> class IntersectionBearingsContainer; | ||||
| namespace serialization | ||||
| { | ||||
| template <storage::Ownership Ownership> | ||||
| void read(storage::io::FileReader &reader, | ||||
| void read(storage::tar::FileReader &reader, | ||||
|           const std::string& name, | ||||
|           detail::IntersectionBearingsContainer<Ownership> &turn_data); | ||||
| 
 | ||||
| template <storage::Ownership Ownership> | ||||
| void write(storage::io::FileWriter &writer, | ||||
| void write(storage::tar::FileWriter &writer, | ||||
|           const std::string& name, | ||||
|            const detail::IntersectionBearingsContainer<Ownership> &turn_data); | ||||
| } | ||||
| 
 | ||||
| @ -83,10 +86,12 @@ template <storage::Ownership Ownership> class IntersectionBearingsContainer | ||||
|         return result; | ||||
|     } | ||||
| 
 | ||||
|     friend void serialization::read<Ownership>(storage::io::FileReader &reader, | ||||
|     friend void serialization::read<Ownership>(storage::tar::FileReader &reader, | ||||
|                                                const std::string &name, | ||||
|                                                IntersectionBearingsContainer &turn_data_container); | ||||
|     friend void | ||||
|     serialization::write<Ownership>(storage::io::FileWriter &writer, | ||||
|     serialization::write<Ownership>(storage::tar::FileWriter &writer, | ||||
|                                     const std::string &name, | ||||
|                                     const IntersectionBearingsContainer &turn_data_container); | ||||
| 
 | ||||
|   private: | ||||
|  | ||||
| @ -25,21 +25,23 @@ namespace serialization | ||||
| 
 | ||||
| // read/write for bearing data
 | ||||
| template <storage::Ownership Ownership> | ||||
| inline void read(storage::io::FileReader &reader, | ||||
| inline void read(storage::tar::FileReader &reader, | ||||
|                  const std::string& name, | ||||
|                  detail::IntersectionBearingsContainer<Ownership> &intersection_bearings) | ||||
| { | ||||
|     storage::serialization::read(reader, intersection_bearings.values); | ||||
|     storage::serialization::read(reader, intersection_bearings.node_to_class_id); | ||||
|     util::serialization::read(reader, intersection_bearings.class_id_to_ranges_table); | ||||
|     storage::serialization::read(reader, name + "/bearing_values", intersection_bearings.values); | ||||
|     storage::serialization::read(reader, name + "/node_to_class_id", intersection_bearings.node_to_class_id); | ||||
|     util::serialization::read(reader, name + "/class_id_to_ranges", intersection_bearings.class_id_to_ranges_table); | ||||
| } | ||||
| 
 | ||||
| template <storage::Ownership Ownership> | ||||
| inline void write(storage::io::FileWriter &writer, | ||||
| inline void write(storage::tar::FileWriter &writer, | ||||
|                  const std::string& name, | ||||
|                   const detail::IntersectionBearingsContainer<Ownership> &intersection_bearings) | ||||
| { | ||||
|     storage::serialization::write(writer, intersection_bearings.values); | ||||
|     storage::serialization::write(writer, intersection_bearings.node_to_class_id); | ||||
|     util::serialization::write(writer, intersection_bearings.class_id_to_ranges_table); | ||||
|     storage::serialization::write(writer, name + "/bearing_values", intersection_bearings.values); | ||||
|     storage::serialization::write(writer, name + "/node_to_class_id", intersection_bearings.node_to_class_id); | ||||
|     util::serialization::write(writer, name + "/class_id_to_ranges", intersection_bearings.class_id_to_ranges_table); | ||||
| } | ||||
| 
 | ||||
| // read/write for properties file
 | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| #ifndef RANGE_TABLE_HPP | ||||
| #define RANGE_TABLE_HPP | ||||
| 
 | ||||
| #include "storage/io.hpp" | ||||
| #include "storage/shared_memory_ownership.hpp" | ||||
| #include "storage/tar_fwd.hpp" | ||||
| #include "util/integer_range.hpp" | ||||
| #include "util/vector_view.hpp" | ||||
| 
 | ||||
| @ -25,10 +25,14 @@ class RangeTable; | ||||
| namespace serialization | ||||
| { | ||||
| template <unsigned BlockSize, storage::Ownership Ownership> | ||||
| void write(storage::io::FileWriter &writer, const util::RangeTable<BlockSize, Ownership> &table); | ||||
| void write(storage::tar::FileWriter &writer, | ||||
|            const std::string &name, | ||||
|            const util::RangeTable<BlockSize, Ownership> &table); | ||||
| 
 | ||||
| template <unsigned BlockSize, storage::Ownership Ownership> | ||||
| void read(storage::io::FileReader &reader, util::RangeTable<BlockSize, Ownership> &table); | ||||
| void read(storage::tar::FileReader &reader, | ||||
|           const std::string &name, | ||||
|           util::RangeTable<BlockSize, Ownership> &table); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
| @ -177,9 +181,11 @@ template <unsigned BLOCK_SIZE, storage::Ownership Ownership> class RangeTable | ||||
|         return irange(begin_idx, end_idx); | ||||
|     } | ||||
| 
 | ||||
|     friend void serialization::write<BLOCK_SIZE, Ownership>(storage::io::FileWriter &writer, | ||||
|     friend void serialization::write<BLOCK_SIZE, Ownership>(storage::tar::FileWriter &writer, | ||||
|                                                             const std::string &name, | ||||
|                                                             const RangeTable &table); | ||||
|     friend void serialization::read<BLOCK_SIZE, Ownership>(storage::io::FileReader &reader, | ||||
|     friend void serialization::read<BLOCK_SIZE, Ownership>(storage::tar::FileReader &reader, | ||||
|                                                            const std::string &name, | ||||
|                                                            RangeTable &table); | ||||
| 
 | ||||
|   private: | ||||
|  | ||||
| @ -31,6 +31,22 @@ void read(storage::io::FileReader &reader, util::RangeTable<BlockSize, Ownership | ||||
|     storage::serialization::read(reader, table.diff_blocks); | ||||
| } | ||||
| 
 | ||||
| template <unsigned BlockSize, storage::Ownership Ownership> | ||||
| void write(storage::tar::FileWriter &writer, const std::string& name, const util::RangeTable<BlockSize, Ownership> &table) | ||||
| { | ||||
|     writer.WriteOne(name + "/sum_lengths.meta", table.sum_lengths); | ||||
|     storage::serialization::write(writer, name + "/block_offsets", table.block_offsets); | ||||
|     storage::serialization::write(writer, name + "/diff_blocks", table.diff_blocks); | ||||
| } | ||||
| 
 | ||||
| template <unsigned BlockSize, storage::Ownership Ownership> | ||||
| void read(storage::tar::FileReader &reader, const std::string& name, util::RangeTable<BlockSize, Ownership> &table) | ||||
| { | ||||
|     table.sum_lengths = reader.ReadOne<unsigned>(name + "/sum_lengths.meta"); | ||||
|     storage::serialization::read(reader, name + "/block_offsets", table.block_offsets); | ||||
|     storage::serialization::read(reader, name + "/diff_blocks", table.diff_blocks); | ||||
| } | ||||
| 
 | ||||
| template <typename T, std::size_t Bits, storage::Ownership Ownership> | ||||
| inline void read(storage::io::FileReader &reader, detail::PackedVector<T, Bits, Ownership> &vec) | ||||
| { | ||||
|  | ||||
| @ -399,30 +399,6 @@ void Storage::PopulateLayout(DataLayout &layout) | ||||
|     } | ||||
| 
 | ||||
|     { | ||||
|         io::FileReader reader(config.GetPath(".osrm.icd"), io::FileReader::VerifyFingerprint); | ||||
| 
 | ||||
|         auto num_discreate_bearings = reader.ReadVectorSize<DiscreteBearing>(); | ||||
|         layout.SetBlock(DataLayout::BEARING_VALUES, | ||||
|                         make_block<DiscreteBearing>(num_discreate_bearings)); | ||||
| 
 | ||||
|         auto num_bearing_classes = reader.ReadVectorSize<BearingClassID>(); | ||||
|         layout.SetBlock(DataLayout::BEARING_CLASSID, | ||||
|                         make_block<BearingClassID>(num_bearing_classes)); | ||||
| 
 | ||||
|         reader.Skip<std::uint32_t>(1); // sum_lengths
 | ||||
|         const auto bearing_blocks = reader.ReadVectorSize<unsigned>(); | ||||
|         const auto bearing_offsets = | ||||
|             reader | ||||
|                 .ReadVectorSize<typename util::RangeTable<16, storage::Ownership::View>::BlockT>(); | ||||
| 
 | ||||
|         layout.SetBlock(DataLayout::BEARING_OFFSETS, make_block<unsigned>(bearing_blocks)); | ||||
|         layout.SetBlock(DataLayout::BEARING_BLOCKS, | ||||
|                         make_block<typename util::RangeTable<16, storage::Ownership::View>::BlockT>( | ||||
|                             bearing_offsets)); | ||||
| 
 | ||||
|         auto num_entry_classes = reader.ReadVectorSize<util::guidance::EntryClass>(); | ||||
|         layout.SetBlock(DataLayout::ENTRY_CLASS, | ||||
|                         make_block<util::guidance::EntryClass>(num_entry_classes)); | ||||
|     } | ||||
| 
 | ||||
|     { | ||||
| @ -487,6 +463,11 @@ void Storage::PopulateLayout(DataLayout &layout) | ||||
|         {"/ch/edge_filter/5", DataLayout::CH_EDGE_FILTER_5}, | ||||
|         {"/ch/edge_filter/6", DataLayout::CH_EDGE_FILTER_6}, | ||||
|         {"/ch/edge_filter/7", DataLayout::CH_EDGE_FILTER_7}, | ||||
|         {"/common/intersection_bearings/bearing_values", DataLayout::BEARING_VALUES}, | ||||
|         {"/common/intersection_bearings/node_to_class_id", DataLayout::BEARING_CLASSID}, | ||||
|         {"/common/intersection_bearings/class_id_to_ranges/block_offsets", DataLayout::BEARING_OFFSETS}, | ||||
|         {"/common/intersection_bearings/class_id_to_ranges/diff_blocks", DataLayout::BEARING_BLOCKS}, | ||||
|         {"/common/entry_classes", DataLayout::ENTRY_CLASS}, | ||||
|     }; | ||||
|     std::vector<NamedBlock> blocks; | ||||
| 
 | ||||
| @ -497,7 +478,8 @@ void Storage::PopulateLayout(DataLayout &layout) | ||||
|         {OPTIONAL, config.GetPath(".osrm.cells")}, | ||||
|         {OPTIONAL, config.GetPath(".osrm.partition")}, | ||||
|         {OPTIONAL, config.GetPath(".osrm.cell_metrics")}, | ||||
|         {OPTIONAL, config.GetPath(".osrm.hsgr")} | ||||
|         {OPTIONAL, config.GetPath(".osrm.hsgr")}, | ||||
|         {REQUIRED, config.GetPath(".osrm.icd")} | ||||
|     }; | ||||
| 
 | ||||
|     for (const auto &file : tar_files) | ||||
|  | ||||
							
								
								
									
										38
									
								
								unit_tests/util/serialization.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								unit_tests/util/serialization.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | ||||
| #include "util/serialization.hpp" | ||||
| 
 | ||||
| #include "../common/range_tools.hpp" | ||||
| #include "../common/temporary_file.hpp" | ||||
| 
 | ||||
| #include <boost/filesystem.hpp> | ||||
| #include <boost/test/unit_test.hpp> | ||||
| 
 | ||||
| BOOST_AUTO_TEST_SUITE(serialization) | ||||
| 
 | ||||
| using namespace osrm; | ||||
| using namespace osrm::util; | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(tar_serialize_range_table) | ||||
| { | ||||
|     TemporaryFile tmp; | ||||
|     { | ||||
|         constexpr unsigned BLOCK_SIZE = 16; | ||||
|         using TestRangeTable = RangeTable<BLOCK_SIZE, osrm::storage::Ownership::Container>; | ||||
| 
 | ||||
|         std::vector<TestRangeTable> data = { | ||||
|         }; | ||||
| 
 | ||||
|         for (const auto &v : data) | ||||
|         { | ||||
|             { | ||||
|                 storage::tar::FileWriter writer(tmp.path, storage::tar::FileWriter::GenerateFingerprint); | ||||
|                 util::serialization::write(writer, "my_range_table", v); | ||||
|             } | ||||
| 
 | ||||
|             TestRangeTable result; | ||||
|             storage::tar::FileReader reader(tmp.path, storage::tar::FileReader::VerifyFingerprint); | ||||
|             util::serialization::read(reader, "my_range_table", result); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_SUITE_END() | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user