Skip to content

Commit 658b8ef

Browse files
committed
Renumber node IDs in .osrm.maneuver_overrides
1 parent a2c7f82 commit 658b8ef

File tree

7 files changed

+87
-22
lines changed

7 files changed

+87
-22
lines changed

include/extractor/files.hpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,29 @@ inline void writeTurnLaneDescriptions(const boost::filesystem::path &path,
261261
storage::serialization::write(writer, turn_offsets);
262262
storage::serialization::write(writer, turn_masks);
263263
}
264+
265+
// reads .osrm.maneuver_overrides
266+
template <typename StorageManeuverOverrideT, typename NodeSequencesT>
267+
inline void readManeuverOverrides(const boost::filesystem::path &path,
268+
StorageManeuverOverrideT &maneuver_overrides,
269+
NodeSequencesT &node_sequences)
270+
{
271+
const auto fingerprint = storage::io::FileReader::VerifyFingerprint;
272+
storage::io::FileReader reader{path, fingerprint};
273+
274+
serialization::read(reader, maneuver_overrides, node_sequences);
275+
}
276+
277+
// writes .osrm.maneuver_overrides
278+
inline void writeManeuverOverrides(const boost::filesystem::path &path,
279+
const std::vector<StorageManeuverOverride> &maneuver_overrides,
280+
const std::vector<NodeID> &node_sequences)
281+
{
282+
const auto fingerprint = storage::io::FileWriter::GenerateFingerprint;
283+
storage::io::FileWriter writer{path, fingerprint};
284+
285+
serialization::write(writer, maneuver_overrides, node_sequences);
286+
}
264287
}
265288
}
266289
}

include/extractor/serialization.hpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,10 +304,17 @@ inline void write(storage::io::FileWriter &writer,
304304
const std::vector<StorageManeuverOverride> &maneuver_overrides,
305305
const std::vector<NodeID> &node_sequences)
306306
{
307-
writer.WriteElementCount64(maneuver_overrides.size());
308-
writer.WriteElementCount64(node_sequences.size());
309-
writer.WriteFrom(maneuver_overrides);
310-
writer.WriteFrom(node_sequences);
307+
storage::serialization::write(writer, maneuver_overrides);
308+
storage::serialization::write(writer, node_sequences);
309+
}
310+
311+
template <typename ManeuverOverridesT, typename NodeSequenceT>
312+
inline void read(storage::io::FileReader &reader,
313+
ManeuverOverridesT &maneuver_overrides,
314+
NodeSequenceT &node_sequences)
315+
{
316+
storage::serialization::read(reader, maneuver_overrides);
317+
storage::serialization::read(reader, node_sequences);
311318
}
312319
}
313320
}

include/partitioner/partitioner_config.hpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,14 @@ namespace partitioner
1616
struct PartitionerConfig final : storage::IOConfig
1717
{
1818
PartitionerConfig()
19-
: IOConfig(
20-
{".osrm", ".osrm.fileIndex", ".osrm.ebg_nodes"},
21-
{".osrm.hsgr", ".osrm.cnbg"},
22-
{".osrm.ebg", ".osrm.cnbg", ".osrm.cnbg_to_ebg", ".osrm.partition", ".osrm.cells"}),
19+
: IOConfig({".osrm", ".osrm.fileIndex", ".osrm.ebg_nodes"},
20+
{".osrm.hsgr", ".osrm.cnbg"},
21+
{".osrm.ebg",
22+
".osrm.cnbg",
23+
".osrm.cnbg_to_ebg",
24+
".osrm.partition",
25+
".osrm.cells",
26+
".osrm.maneuver_overrides"}),
2327
requested_num_threads(0), balance(1.2), boundary_factor(0.25), num_optimizing_cuts(10),
2428
small_component_size(1000),
2529
max_cell_sizes({128, 128 * 32, 128 * 32 * 16, 128 * 32 * 16 * 32})

include/partitioner/renumber.hpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define OSRM_PARTITIONER_RENUMBER_HPP
33

44
#include "extractor/edge_based_node_segment.hpp"
5+
#include "extractor/maneuver_override.hpp"
56
#include "extractor/nbg_to_ebg.hpp"
67
#include "extractor/node_data_container.hpp"
78

@@ -73,6 +74,25 @@ inline void renumber(std::vector<extractor::NBGToEBG> &mapping,
7374
}
7475
}
7576

77+
inline void renumber(std::vector<NodeID> &node_ids, const std::vector<std::uint32_t> &permutation)
78+
{
79+
for (auto &node_id : node_ids)
80+
{
81+
if (node_id != SPECIAL_NODEID)
82+
node_id = permutation[node_id];
83+
}
84+
}
85+
86+
inline void renumber(std::vector<extractor::StorageManeuverOverride> &maneuver_overrides,
87+
const std::vector<std::uint32_t> &permutation)
88+
{
89+
for (auto &maneuver_override : maneuver_overrides)
90+
{
91+
if (maneuver_override.start_node != SPECIAL_NODEID)
92+
maneuver_override.start_node = permutation[maneuver_override.start_node];
93+
}
94+
}
95+
7696
} // namespace partitioner
7797
} // namespace osrm
7898

src/extractor/edge_based_graph_factory.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,11 +1106,9 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges(
11061106
std::sort(storage_maneuver_overrides.begin(),
11071107
storage_maneuver_overrides.end(),
11081108
[](const auto &a, const auto &b) { return a.start_node < b.start_node; });
1109-
// write conditional turn penalties into the restrictions file
1110-
storage::io::FileWriter writer(maneuver_overrides_filename,
1111-
storage::io::FileWriter::GenerateFingerprint);
1112-
extractor::serialization::write(
1113-
writer, storage_maneuver_overrides, maneuver_override_sequences);
1109+
1110+
files::writeManeuverOverrides(
1111+
maneuver_overrides_filename, storage_maneuver_overrides, maneuver_override_sequences);
11141112
}
11151113

11161114
util::Log() << "done.";

src/partitioner/partitioner.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,15 @@ int Partitioner::Run(const PartitionerConfig &config)
145145
renumber(node_data, permutation);
146146
extractor::files::writeNodeData(config.GetPath(".osrm.ebg_nodes"), node_data);
147147
}
148+
{
149+
const auto &filename = config.GetPath(".osrm.maneuver_overrides");
150+
std::vector<extractor::StorageManeuverOverride> maneuver_overrides;
151+
std::vector<NodeID> node_sequences;
152+
extractor::files::readManeuverOverrides(filename, maneuver_overrides, node_sequences);
153+
renumber(maneuver_overrides, permutation);
154+
renumber(node_sequences, permutation);
155+
extractor::files::writeManeuverOverrides(filename, maneuver_overrides, node_sequences);
156+
}
148157
if (boost::filesystem::exists(config.GetPath(".osrm.hsgr")))
149158
{
150159
util::Log(logWARNING) << "Found existing .osrm.hsgr file, removing. You need to re-run "

src/storage/storage.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -445,10 +445,11 @@ void Storage::PopulateLayout(DataLayout &layout)
445445
{
446446
io::FileReader maneuver_overrides_file(config.GetPath(".osrm.maneuver_overrides"),
447447
io::FileReader::VerifyFingerprint);
448-
const auto number_of_overrides = maneuver_overrides_file.ReadElementCount64();
448+
const auto number_of_overrides =
449+
maneuver_overrides_file.ReadVectorSize<extractor::StorageManeuverOverride>();
449450
layout.SetBlockSize<extractor::StorageManeuverOverride>(DataLayout::MANEUVER_OVERRIDES,
450451
number_of_overrides);
451-
const auto number_of_nodes = maneuver_overrides_file.ReadElementCount64();
452+
const auto number_of_nodes = maneuver_overrides_file.ReadVectorSize<NodeID>();
452453
layout.SetBlockSize<NodeID>(DataLayout::MANEUVER_OVERRIDE_NODE_SEQUENCES, number_of_nodes);
453454
}
454455

@@ -1089,18 +1090,21 @@ void Storage::PopulateData(const DataLayout &layout, char *memory_ptr)
10891090

10901091
// load maneuver overrides
10911092
{
1092-
io::FileReader maneuver_overrides_file(config.GetPath(".osrm.maneuver_overrides"),
1093-
io::FileReader::VerifyFingerprint);
1094-
const auto number_of_overrides = maneuver_overrides_file.ReadElementCount64();
1095-
const auto number_of_nodes = maneuver_overrides_file.ReadElementCount64();
10961093
const auto maneuver_overrides_ptr =
10971094
layout.GetBlockPtr<extractor::StorageManeuverOverride, true>(
10981095
memory_ptr, DataLayout::MANEUVER_OVERRIDES);
1099-
maneuver_overrides_file.ReadInto(maneuver_overrides_ptr, number_of_overrides);
1100-
11011096
const auto maneuver_override_node_sequences_ptr = layout.GetBlockPtr<NodeID, true>(
11021097
memory_ptr, DataLayout::MANEUVER_OVERRIDE_NODE_SEQUENCES);
1103-
maneuver_overrides_file.ReadInto(maneuver_override_node_sequences_ptr, number_of_nodes);
1098+
1099+
util::vector_view<extractor::StorageManeuverOverride> maneuver_overrides(
1100+
maneuver_overrides_ptr, layout.num_entries[DataLayout::MANEUVER_OVERRIDES]);
1101+
util::vector_view<NodeID> maneuver_override_node_sequences(
1102+
maneuver_override_node_sequences_ptr,
1103+
layout.num_entries[DataLayout::MANEUVER_OVERRIDE_NODE_SEQUENCES]);
1104+
1105+
extractor::files::readManeuverOverrides(config.GetPath(".osrm.maneuver_overrides"),
1106+
maneuver_overrides,
1107+
maneuver_override_node_sequences);
11041108
}
11051109
}
11061110
}

0 commit comments

Comments
 (0)