Add BufferWriter/BufferReader and simplify interface for ConditionalRestrictions
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#include <boost/assert.hpp>
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <boost/filesystem/fstream.hpp>
|
||||
#include <boost/function_output_iterator.hpp>
|
||||
|
||||
#include <tbb/parallel_sort.h>
|
||||
|
||||
@@ -49,27 +50,22 @@ NodeID loadNodesFromFile(storage::io::FileReader &file_reader,
|
||||
coordinates.resize(number_of_nodes);
|
||||
osm_node_ids.reserve(number_of_nodes);
|
||||
|
||||
extractor::QueryNode current_node;
|
||||
for (NodeID i = 0; i < number_of_nodes; ++i)
|
||||
{
|
||||
file_reader.ReadInto(¤t_node, 1);
|
||||
|
||||
coordinates[i].lon = current_node.lon;
|
||||
coordinates[i].lat = current_node.lat;
|
||||
auto index = 0;
|
||||
auto decode = [&](const extractor::QueryNode ¤t_node) {
|
||||
coordinates[index].lon = current_node.lon;
|
||||
coordinates[index].lat = current_node.lat;
|
||||
osm_node_ids.push_back(current_node.node_id);
|
||||
}
|
||||
index++;
|
||||
};
|
||||
|
||||
file_reader.ReadStreaming<extractor::QueryNode>(boost::make_function_output_iterator(decode),
|
||||
number_of_nodes);
|
||||
|
||||
auto num_barriers = file_reader.ReadElementCount64();
|
||||
for (auto index = 0UL; index < num_barriers; ++index)
|
||||
{
|
||||
*barriers++ = file_reader.ReadOne<NodeID>();
|
||||
}
|
||||
file_reader.ReadStreaming<NodeID>(barriers, num_barriers);
|
||||
|
||||
auto num_lights = file_reader.ReadElementCount64();
|
||||
for (auto index = 0UL; index < num_lights; ++index)
|
||||
{
|
||||
*traffic_signals++ = file_reader.ReadOne<NodeID>();
|
||||
}
|
||||
file_reader.ReadStreaming<NodeID>(traffic_signals, num_lights);
|
||||
|
||||
return number_of_nodes;
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ template <int N, typename T = std::string> struct VariableGroupBlock
|
||||
prefix_length += byte_length;
|
||||
}
|
||||
|
||||
out.WriteOne(refernce);
|
||||
out.WriteFrom(refernce);
|
||||
|
||||
return prefix_length;
|
||||
}
|
||||
@@ -187,7 +187,7 @@ template <int N, typename T = std::string> struct FixedGroupBlock
|
||||
BOOST_ASSERT(data_offset <= std::numeric_limits<decltype(BlockReference::offset)>::max());
|
||||
|
||||
BlockReference refernce{static_cast<decltype(BlockReference::offset)>(data_offset)};
|
||||
out.WriteOne(refernce);
|
||||
out.WriteFrom(refernce);
|
||||
|
||||
return BLOCK_SIZE;
|
||||
}
|
||||
@@ -268,7 +268,7 @@ template <typename GroupBlock> struct IndexedData
|
||||
const BlocksNumberType number_of_blocks =
|
||||
number_of_elements == 0 ? 0
|
||||
: 1 + (std::distance(first, sentinel) - 1) / (BLOCK_SIZE + 1);
|
||||
out.WriteOne(number_of_blocks);
|
||||
out.WriteFrom(number_of_blocks);
|
||||
|
||||
// Write block references and compute the total data size that includes prefix and data
|
||||
const GroupBlock block;
|
||||
@@ -282,7 +282,7 @@ template <typename GroupBlock> struct IndexedData
|
||||
}
|
||||
|
||||
// Write the total data size
|
||||
out.WriteOne(data_size);
|
||||
out.WriteFrom(data_size);
|
||||
|
||||
// Write data blocks that are (prefix, data)
|
||||
for (OffsetIterator curr = first, next = first; next != sentinel; curr = next)
|
||||
@@ -291,7 +291,7 @@ template <typename GroupBlock> struct IndexedData
|
||||
block.WriteBlockPrefix(out, curr, next);
|
||||
std::advance(next, std::min<diff_type>(1, std::distance(next, sentinel)));
|
||||
std::for_each(
|
||||
data + *curr, data + *next, [&out](const auto &element) { out.WriteOne(element); });
|
||||
data + *curr, data + *next, [&out](const auto &element) { out.WriteFrom(element); });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace serialization
|
||||
template <unsigned BlockSize, storage::Ownership Ownership>
|
||||
void write(storage::io::FileWriter &writer, const util::RangeTable<BlockSize, Ownership> &table)
|
||||
{
|
||||
writer.WriteOne(table.sum_lengths);
|
||||
writer.WriteFrom(table.sum_lengths);
|
||||
storage::serialization::write(writer, table.block_offsets);
|
||||
storage::serialization::write(writer, table.diff_blocks);
|
||||
}
|
||||
@@ -26,7 +26,7 @@ void write(storage::io::FileWriter &writer, const util::RangeTable<BlockSize, Ow
|
||||
template <unsigned BlockSize, storage::Ownership Ownership>
|
||||
void read(storage::io::FileReader &reader, util::RangeTable<BlockSize, Ownership> &table)
|
||||
{
|
||||
table.sum_lengths = reader.ReadOne<unsigned>();
|
||||
reader.ReadInto(table.sum_lengths);
|
||||
storage::serialization::read(reader, table.block_offsets);
|
||||
storage::serialization::read(reader, table.diff_blocks);
|
||||
}
|
||||
@@ -36,7 +36,7 @@ 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);
|
||||
writer.WriteFrom(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);
|
||||
}
|
||||
@@ -46,7 +46,7 @@ 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");
|
||||
reader.ReadInto(name + "/sum_lengths.meta", table.sum_lengths);
|
||||
storage::serialization::read(reader, name + "/block_offsets", table.block_offsets);
|
||||
storage::serialization::read(reader, name + "/diff_blocks", table.diff_blocks);
|
||||
}
|
||||
@@ -54,7 +54,7 @@ void read(storage::tar::FileReader &reader,
|
||||
template <typename T, std::size_t Bits, storage::Ownership Ownership>
|
||||
inline void read(storage::io::FileReader &reader, detail::PackedVector<T, Bits, Ownership> &vec)
|
||||
{
|
||||
vec.num_elements = reader.ReadOne<std::uint64_t>();
|
||||
reader.ReadInto(vec.num_elements);
|
||||
storage::serialization::read(reader, vec.vec);
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ 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);
|
||||
writer.WriteFrom(vec.num_elements);
|
||||
storage::serialization::write(writer, vec.vec);
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ inline void read(storage::tar::FileReader &reader,
|
||||
const std::string &name,
|
||||
detail::PackedVector<T, Bits, Ownership> &vec)
|
||||
{
|
||||
vec.num_elements = reader.ReadOne<std::uint64_t>(name + "/number_of_elements.meta");
|
||||
reader.ReadInto(name + "/number_of_elements.meta", vec.num_elements);
|
||||
storage::serialization::read(reader, name + "/packed", vec.vec);
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ inline void write(storage::tar::FileWriter &writer,
|
||||
const std::string &name,
|
||||
const detail::PackedVector<T, Bits, Ownership> &vec)
|
||||
{
|
||||
writer.WriteOne(name + "/number_of_elements.meta", vec.num_elements);
|
||||
writer.WriteFrom(name + "/number_of_elements.meta", vec.num_elements);
|
||||
storage::serialization::write(writer, name + "/packed", vec.vec);
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ inline void read(storage::io::FileReader &reader, DynamicGraph<EdgeDataT> &graph
|
||||
graph.edge_list.resize(num_edges);
|
||||
for (auto index : irange<std::size_t>(0, num_edges))
|
||||
{
|
||||
reader.ReadOne(graph.edge_list[index]);
|
||||
reader.ReadInto(graph.edge_list[index]);
|
||||
}
|
||||
graph.number_of_nodes = graph.node_array.size();
|
||||
graph.number_of_edges = num_edges;
|
||||
@@ -121,7 +121,7 @@ inline void write(storage::io::FileWriter &writer, const DynamicGraph<EdgeDataT>
|
||||
writer.WriteElementCount64(graph.number_of_edges);
|
||||
for (auto index : irange<std::size_t>(0, graph.number_of_edges))
|
||||
{
|
||||
writer.WriteOne(graph.edge_list[index]);
|
||||
writer.WriteFrom(graph.edge_list[index]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -452,10 +452,10 @@ class StaticRTree
|
||||
std::uint64_t size_of_tree = m_search_tree.size();
|
||||
BOOST_ASSERT_MSG(0 < size_of_tree, "tree empty");
|
||||
|
||||
tree_node_file.WriteOne(size_of_tree);
|
||||
tree_node_file.WriteFrom(size_of_tree);
|
||||
tree_node_file.WriteFrom(m_search_tree);
|
||||
|
||||
tree_node_file.WriteOne(static_cast<std::uint64_t>(m_tree_level_sizes.size()));
|
||||
tree_node_file.WriteFrom(static_cast<std::uint64_t>(m_tree_level_sizes.size()));
|
||||
tree_node_file.WriteFrom(m_tree_level_sizes);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user