#ifndef OSRM_CONTRACTOR_FILES_HPP #define OSRM_CONTRACTOR_FILES_HPP #include "contractor/query_graph.hpp" #include "util/serialization.hpp" #include "storage/io.hpp" #include "storage/serialization.hpp" namespace osrm { namespace contractor { namespace files { // reads .osrm.core template void readCoreMarker(const boost::filesystem::path &path, std::vector &cores) { static_assert(util::is_view_or_vector::value, "cores must be a vector of boolean vectors"); storage::io::FileReader reader(path, storage::io::FileReader::VerifyFingerprint); auto num_cores = reader.ReadElementCount64(); cores.resize(num_cores); for (const auto index : util::irange(0, num_cores)) { storage::serialization::read(reader, cores[index]); } } // writes .osrm.core template void writeCoreMarker(const boost::filesystem::path &path, const std::vector &cores) { static_assert(util::is_view_or_vector::value, "cores must be a vector of boolean vectors"); storage::io::FileWriter writer(path, storage::io::FileWriter::GenerateFingerprint); writer.WriteElementCount64(cores.size()); for (const auto &core : cores) { storage::serialization::write(writer, core); } } // reads .osrm.hsgr file template inline void readGraph(const boost::filesystem::path &path, unsigned &checksum, QueryGraphT &graph, std::vector &edge_filter) { static_assert(std::is_same::value || std::is_same::value, "graph must be of type QueryGraph<>"); static_assert(std::is_same>::value || std::is_same>::value, "edge_filter must be a container of vector or vector_view"); const auto fingerprint = storage::io::FileReader::VerifyFingerprint; storage::io::FileReader reader{path, fingerprint}; reader.ReadInto(checksum); util::serialization::read(reader, graph); auto count = reader.ReadElementCount64(); edge_filter.resize(count); for (const auto index : util::irange(0, count)) { storage::serialization::read(reader, edge_filter[index]); } } // writes .osrm.hsgr file template inline void writeGraph(const boost::filesystem::path &path, unsigned checksum, const QueryGraphT &graph, const std::vector &edge_filter) { static_assert(std::is_same::value || std::is_same::value, "graph must be of type QueryGraph<>"); static_assert(std::is_same>::value || std::is_same>::value, "edge_filter must be a container of vector or vector_view"); const auto fingerprint = storage::io::FileWriter::GenerateFingerprint; storage::io::FileWriter writer{path, fingerprint}; writer.WriteOne(checksum); util::serialization::write(writer, graph); writer.WriteElementCount64(edge_filter.size()); for (const auto &filter : edge_filter) { storage::serialization::write(writer, filter); } } // reads .levels file inline void readLevels(const boost::filesystem::path &path, std::vector &node_levels) { const auto fingerprint = storage::io::FileReader::VerifyFingerprint; storage::io::FileReader reader{path, fingerprint}; storage::serialization::read(reader, node_levels); } // writes .levels file inline void writeLevels(const boost::filesystem::path &path, const std::vector &node_levels) { const auto fingerprint = storage::io::FileWriter::GenerateFingerprint; storage::io::FileWriter writer{path, fingerprint}; storage::serialization::write(writer, node_levels); } } } } #endif