MCPcopy Create free account
hub / github.com/Project-OSRM/osrm-backend / fixupNodes

Method fixupNodes

src/extractor/obstacles.cpp:132–221  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

130}
131
132void ObstacleMap::fixupNodes(const NodeIDVector &node_ids)
133{
134 util::UnbufferedLog log;
135 log << "Renumbering " << osm_obstacles.size() << " obstacles...";
136 TIMER_START(obstacle_renumbering);
137
138 const auto should_skip = [](const auto &osm_from, const auto &, const auto &obstacle)
139 {
140 return (obstacle.direction == Obstacle::Direction::Forward ||
141 obstacle.direction == Obstacle::Direction::Backward) &&
142 osm_from == SPECIAL_OSM_NODEID;
143 };
144
145 std::vector<OSMNodeID> used_osm_node_ids;
146 used_osm_node_ids.reserve(osm_obstacles.size() * 2);
147
148 for (const auto &[osm_from, osm_to, obstacle] : osm_obstacles)
149 {
150 if (should_skip(osm_from, osm_to, obstacle))
151 continue;
152
153 if (osm_from != SPECIAL_OSM_NODEID)
154 used_osm_node_ids.push_back(osm_from);
155
156 if (osm_to != SPECIAL_OSM_NODEID)
157 used_osm_node_ids.push_back(osm_to);
158 }
159
160 std::sort(used_osm_node_ids.begin(), used_osm_node_ids.end());
161 used_osm_node_ids.erase(std::unique(used_osm_node_ids.begin(), used_osm_node_ids.end()),
162 used_osm_node_ids.end());
163
164 std::vector<NodeID> internal_node_ids(used_osm_node_ids.size(), SPECIAL_NODEID);
165
166 std::size_t node_index = 0;
167 std::size_t used_index = 0;
168
169 while (node_index < node_ids.size() && used_index < used_osm_node_ids.size())
170 {
171 const auto node_id = node_ids[node_index];
172 const auto used_id = used_osm_node_ids[used_index];
173
174 if (node_id < used_id)
175 {
176 ++node_index;
177 }
178 else if (used_id < node_id)
179 {
180 ++used_index;
181 }
182 else
183 {
184 internal_node_ids[used_index] = static_cast<NodeID>(node_index);
185 ++used_index;
186 }
187 }
188
189 auto osm_to_internal = [&](const OSMNodeID osm_node) -> NodeID

Callers 1

PrepareDataMethod · 0.80

Calls 6

sizeMethod · 0.45
reserveMethod · 0.45
push_backMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected