osrm-backend/include/util/serialization.hpp

94 lines
3.0 KiB
C++
Raw Normal View History

2017-04-02 13:15:20 -04:00
#ifndef OSMR_UTIL_SERIALIZATION_HPP
#define OSMR_UTIL_SERIALIZATION_HPP
2017-04-04 19:01:00 -04:00
#include "util/dynamic_graph.hpp"
#include "util/packed_vector.hpp"
2017-06-19 09:27:46 -04:00
#include "util/range_table.hpp"
2017-04-02 13:15:20 -04:00
#include "util/static_graph.hpp"
2017-04-02 13:15:20 -04:00
#include "storage/io.hpp"
#include "storage/serialization.hpp"
2017-04-02 13:15:20 -04:00
namespace osrm
{
namespace util
{
namespace serialization
{
2017-06-19 09:27:46 -04:00
template <unsigned BlockSize, storage::Ownership Ownership>
void write(storage::io::FileWriter &writer, const util::RangeTable<BlockSize, Ownership> &table)
{
writer.WriteOne(table.sum_lengths);
storage::serialization::write(writer, table.block_offsets);
storage::serialization::write(writer, table.diff_blocks);
}
template <unsigned BlockSize, storage::Ownership Ownership>
void read(storage::io::FileReader &reader, util::RangeTable<BlockSize, Ownership> &table)
{
table.sum_lengths = reader.ReadOne<unsigned>();
storage::serialization::read(reader, table.block_offsets);
storage::serialization::read(reader, table.diff_blocks);
}
2017-04-10 16:15:25 -04:00
template <typename T, std::size_t Bits, storage::Ownership Ownership>
inline void read(storage::io::FileReader &reader, detail::PackedVector<T, Bits, Ownership> &vec)
{
2017-04-04 19:01:00 -04:00
vec.num_elements = reader.ReadOne<std::uint64_t>();
storage::serialization::read(reader, vec.vec);
}
2017-04-10 16:15:25 -04:00
template <typename T, std::size_t Bits, storage::Ownership Ownership>
inline void write(storage::io::FileWriter &writer,
const detail::PackedVector<T, Bits, Ownership> &vec)
{
writer.WriteOne(vec.num_elements);
storage::serialization::write(writer, vec.vec);
}
2017-04-02 13:15:20 -04:00
template <typename EdgeDataT, storage::Ownership Ownership>
2017-04-04 19:01:00 -04:00
inline void read(storage::io::FileReader &reader, StaticGraph<EdgeDataT, Ownership> &graph)
2017-04-02 13:15:20 -04:00
{
storage::serialization::read(reader, graph.node_array);
storage::serialization::read(reader, graph.edge_array);
graph.number_of_nodes = graph.node_array.size() - 1;
graph.number_of_edges = graph.edge_array.size();
2017-04-02 13:15:20 -04:00
}
template <typename EdgeDataT, storage::Ownership Ownership>
2017-04-04 19:01:00 -04:00
inline void write(storage::io::FileWriter &writer, const StaticGraph<EdgeDataT, Ownership> &graph)
2017-04-02 13:15:20 -04:00
{
storage::serialization::write(writer, graph.node_array);
storage::serialization::write(writer, graph.edge_array);
2017-04-02 13:15:20 -04:00
}
template <typename EdgeDataT>
2017-04-04 19:01:00 -04:00
inline void read(storage::io::FileReader &reader, DynamicGraph<EdgeDataT> &graph)
2017-04-02 13:15:20 -04:00
{
storage::serialization::read(reader, graph.node_array);
const auto num_edges = reader.ReadElementCount64();
2017-04-02 13:15:20 -04:00
graph.edge_list.resize(num_edges);
for (auto index : irange<std::size_t>(0, num_edges))
{
reader.ReadOne(graph.edge_list[index]);
}
graph.number_of_nodes = graph.node_array.size();
graph.number_of_edges = num_edges;
}
template <typename EdgeDataT>
2017-04-04 19:01:00 -04:00
inline void write(storage::io::FileWriter &writer, const DynamicGraph<EdgeDataT> &graph)
2017-04-02 13:15:20 -04:00
{
storage::serialization::write(writer, graph.node_array);
2017-04-02 13:15:20 -04:00
writer.WriteElementCount64(graph.number_of_edges);
for (auto index : irange<std::size_t>(0, graph.number_of_edges))
{
writer.WriteOne(graph.edge_list[index]);
}
}
}
2017-04-02 13:15:20 -04:00
}
}
#endif