Add BufferWriter/BufferReader and simplify interface for ConditionalRestrictions

This commit is contained in:
Patrick Niklaus
2018-03-19 23:31:49 +00:00
parent 4f454a3761
commit 06f28ffd34
18 changed files with 237 additions and 147 deletions
+12 -16
View File
@@ -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(&current_node, 1);
coordinates[i].lon = current_node.lon;
coordinates[i].lat = current_node.lat;
auto index = 0;
auto decode = [&](const extractor::QueryNode &current_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;
}
+5 -5
View File
@@ -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); });
}
}
+10 -10
View File
@@ -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]);
}
}
+2 -2
View File
@@ -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);
}