Refactor metric storage
This commit is contained in:
committed by
Patrick Niklaus
parent
aec9b6a178
commit
c334d11e95
@@ -7,6 +7,8 @@
|
||||
|
||||
#include "util/integer_range.hpp"
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
namespace osrm
|
||||
{
|
||||
namespace customizer
|
||||
@@ -16,7 +18,7 @@ namespace files
|
||||
|
||||
// reads .osrm.cell_metrics file
|
||||
template <typename CellMetricT>
|
||||
inline void readCellMetrics(const boost::filesystem::path &path, std::vector<CellMetricT> &metrics)
|
||||
inline void readCellMetrics(const boost::filesystem::path &path, std::unordered_map<std::string, std::vector<CellMetricT>> &metrics)
|
||||
{
|
||||
static_assert(std::is_same<CellMetricView, CellMetricT>::value ||
|
||||
std::is_same<CellMetric, CellMetricT>::value,
|
||||
@@ -25,20 +27,27 @@ inline void readCellMetrics(const boost::filesystem::path &path, std::vector<Cel
|
||||
const auto fingerprint = storage::tar::FileReader::VerifyFingerprint;
|
||||
storage::tar::FileReader reader{path, fingerprint};
|
||||
|
||||
auto num_metrics = reader.ReadElementCount64("/mld/metrics");
|
||||
metrics.resize(num_metrics);
|
||||
|
||||
auto id = 0;
|
||||
for (auto &metric : metrics)
|
||||
for (auto& pair : metrics)
|
||||
{
|
||||
serialization::read(reader, "/mld/metrics/" + std::to_string(id++), metric);
|
||||
const auto& metric_name = pair.first;
|
||||
auto& metric_exclude_classes = pair.second;
|
||||
|
||||
auto prefix = "/mld/metrics/" + metric_name + "/exclude";
|
||||
auto num_exclude_classes = reader.ReadElementCount64(prefix);
|
||||
metric_exclude_classes.resize(num_exclude_classes);
|
||||
|
||||
auto id = 0;
|
||||
for (auto &metric : metric_exclude_classes)
|
||||
{
|
||||
serialization::read(reader, prefix + "/" + std::to_string(id++), metric);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// writes .osrm.cell_metrics file
|
||||
template <typename CellMetricT>
|
||||
inline void writeCellMetrics(const boost::filesystem::path &path,
|
||||
const std::vector<CellMetricT> &metrics)
|
||||
const std::unordered_map<std::string, std::vector<CellMetricT>> &metrics)
|
||||
{
|
||||
static_assert(std::is_same<CellMetricView, CellMetricT>::value ||
|
||||
std::is_same<CellMetric, CellMetricT>::value,
|
||||
@@ -47,12 +56,19 @@ inline void writeCellMetrics(const boost::filesystem::path &path,
|
||||
const auto fingerprint = storage::tar::FileWriter::GenerateFingerprint;
|
||||
storage::tar::FileWriter writer{path, fingerprint};
|
||||
|
||||
writer.WriteElementCount64("/mld/metrics", metrics.size());
|
||||
|
||||
auto id = 0;
|
||||
for (const auto &metric : metrics)
|
||||
for (const auto& pair : metrics)
|
||||
{
|
||||
serialization::write(writer, "/mld/metrics/" + std::to_string(id++), metric);
|
||||
const auto& metric_name = pair.first;
|
||||
const auto& metric_exclude_classes = pair.second;
|
||||
|
||||
auto prefix = "/mld/metrics/" + metric_name + "/exclude";
|
||||
writer.WriteElementCount64(prefix, metric_exclude_classes.size());
|
||||
|
||||
auto id = 0;
|
||||
for (auto &exclude_metric : metric_exclude_classes)
|
||||
{
|
||||
serialization::write(writer, prefix + "/" + std::to_string(id++), exclude_metric);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user