Skip to content

Commit 2b6bdaf

Browse files
committed
add assert for untested sliproad cases, removed redundant empty_nameid checks
1 parent 2347c0a commit 2b6bdaf

File tree

7 files changed

+106
-130
lines changed

7 files changed

+106
-130
lines changed

include/engine/guidance/collapse_turns.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#ifndef OSRM_ENGINE_GUIDANCE_COLLAPSE_HPP
22

3-
#include "engine/datafacade/datafacade_base.hpp"
43
#include "engine/guidance/route_step.hpp"
54
#include "util/attributes.hpp"
65

src/extractor/guidance/intersection_handler.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -490,8 +490,8 @@ bool IntersectionHandler::isSameName(const EdgeID source_edge_id, const EdgeID t
490490
const auto &target_edge_data = node_data_container.GetAnnotation(
491491
node_based_graph.GetEdgeData(target_edge_id).annotation_data);
492492

493-
return source_edge_data.name_id != EMPTY_NAMEID && //
494-
target_edge_data.name_id != EMPTY_NAMEID && //
493+
return !name_table.GetNameForID(source_edge_data.name_id).empty() && //
494+
!name_table.GetNameForID(target_edge_data.name_id).empty() && //
495495
!util::guidance::requiresNameAnnounced(source_edge_data.name_id,
496496
target_edge_data.name_id,
497497
name_table,

src/extractor/guidance/mergable_road_detector.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ inline auto makeCheckRoadForName(const NameID name_id,
3838
node_data_container
3939
.GetAnnotation(node_based_graph.GetEdgeData(road.eid).annotation_data)
4040
.name_id;
41-
if (name_id == EMPTY_NAMEID || road_name_id == EMPTY_NAMEID)
42-
return true;
4341
const auto road_name_empty = name_table.GetNameForID(road_name_id).empty();
4442
const auto in_name_empty = name_table.GetNameForID(name_id).empty();
4543
if (in_name_empty || road_name_empty)
@@ -470,16 +468,12 @@ bool MergableRoadDetector::IsTrafficIsland(const NodeID intersection_node,
470468
node_data_container
471469
.GetAnnotation(node_based_graph.GetEdgeData(range.front()).annotation_data)
472470
.name_id;
473-
if (required_name_id == EMPTY_NAMEID)
474-
return false;
475471

476472
const auto has_required_name = [this, required_name_id](const auto edge_id) {
477473
const auto road_name_id =
478474
node_data_container
479475
.GetAnnotation(node_based_graph.GetEdgeData(edge_id).annotation_data)
480476
.name_id;
481-
if (road_name_id == EMPTY_NAMEID)
482-
return false;
483477
const auto &road_name_empty = name_table.GetNameForID(road_name_id).empty();
484478
const auto &required_name_empty = name_table.GetNameForID(required_name_id).empty();
485479
if (required_name_empty && road_name_empty)

src/extractor/guidance/motorway_handler.cpp

Lines changed: 90 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -361,120 +361,111 @@ Intersection MotorwayHandler::fromRamp(const EdgeID via_eid, Intersection inters
361361
node_based_graph.GetEdgeData(intersection[2].eid).annotation_data);
362362
const auto &first_intersection_data = node_data_container.GetAnnotation(
363363
node_based_graph.GetEdgeData(intersection[1].eid).annotation_data);
364-
if (first_intersection_data.name_id == EMPTY_NAMEID ||
365-
second_intersection_data.name_id == EMPTY_NAMEID)
364+
const auto first_second_same_name =
365+
!util::guidance::requiresNameAnnounced(second_intersection_data.name_id,
366+
first_intersection_data.name_id,
367+
name_table,
368+
street_name_suffix_table);
369+
370+
// merging onto a passing highway / or two ramps merging onto the same highway
371+
if (num_valid_turns == 1)
366372
{
367-
return fallback(std::move(intersection));
368-
}
369-
else
370-
{
371-
const auto first_second_same_name =
372-
!util::guidance::requiresNameAnnounced(second_intersection_data.name_id,
373-
first_intersection_data.name_id,
374-
name_table,
375-
street_name_suffix_table);
376-
377-
// merging onto a passing highway / or two ramps merging onto the same highway
378-
if (num_valid_turns == 1)
373+
BOOST_ASSERT(!intersection[0].entry_allowed);
374+
// check order of highways
375+
// 4
376+
// 5 3
377+
//
378+
// 6 2
379+
//
380+
// 7 1
381+
// 0
382+
const auto &first_intersection_name_empty =
383+
name_table.GetNameForID(first_intersection_data.name_id).empty();
384+
const auto &second_intersection_name_empty =
385+
name_table.GetNameForID(second_intersection_data.name_id).empty();
386+
if (intersection[1].entry_allowed)
379387
{
380-
BOOST_ASSERT(!intersection[0].entry_allowed);
381-
// check order of highways
382-
// 4
383-
// 5 3
384-
//
385-
// 6 2
386-
//
387-
// 7 1
388-
// 0
389-
const auto &first_intersection_name_empty =
390-
name_table.GetNameForID(first_intersection_data.name_id).empty();
391-
const auto &second_intersection_name_empty =
392-
name_table.GetNameForID(second_intersection_data.name_id).empty();
393-
if (intersection[1].entry_allowed)
388+
if (isMotorwayClass(intersection[1].eid, node_based_graph) &&
389+
!second_intersection_name_empty && !first_intersection_name_empty &&
390+
first_second_same_name)
394391
{
395-
if (isMotorwayClass(intersection[1].eid, node_based_graph) &&
396-
!second_intersection_name_empty && !first_intersection_name_empty &&
397-
first_second_same_name)
398-
{
399-
// circular order indicates a merge to the left (0-3 onto 4
400-
if (angularDeviation(intersection[1].angle, STRAIGHT_ANGLE) <
401-
2 * NARROW_TURN_ANGLE)
402-
intersection[1].instruction = {TurnType::Merge,
403-
DirectionModifier::SlightLeft};
404-
else // fallback
405-
intersection[1].instruction = {TurnType::Merge,
406-
getTurnDirection(intersection[1].angle)};
407-
}
408-
else // passing by the end of a motorway
409-
{
410-
intersection[1].instruction =
411-
getInstructionForObvious(intersection.size(),
412-
via_eid,
413-
isThroughStreet(1, intersection),
414-
intersection[1]);
415-
}
392+
// circular order indicates a merge to the left (0-3 onto 4
393+
if (angularDeviation(intersection[1].angle, STRAIGHT_ANGLE) <
394+
2 * NARROW_TURN_ANGLE)
395+
intersection[1].instruction = {TurnType::Merge,
396+
DirectionModifier::SlightLeft};
397+
else // fallback
398+
intersection[1].instruction = {TurnType::Merge,
399+
getTurnDirection(intersection[1].angle)};
416400
}
417-
else
401+
else // passing by the end of a motorway
418402
{
419-
BOOST_ASSERT(intersection[2].entry_allowed);
420-
if (isMotorwayClass(intersection[2].eid, node_based_graph) &&
421-
!second_intersection_name_empty && !first_intersection_name_empty &&
422-
first_second_same_name)
423-
{
424-
// circular order (5-0) onto 4
425-
if (angularDeviation(intersection[2].angle, STRAIGHT_ANGLE) <
426-
2 * NARROW_TURN_ANGLE)
427-
intersection[2].instruction = {TurnType::Merge,
428-
DirectionModifier::SlightRight};
429-
else // fallback
430-
intersection[2].instruction = {TurnType::Merge,
431-
getTurnDirection(intersection[2].angle)};
432-
}
433-
else // passing the end of a highway
434-
{
435-
intersection[2].instruction =
436-
getInstructionForObvious(intersection.size(),
437-
via_eid,
438-
isThroughStreet(2, intersection),
439-
intersection[2]);
440-
}
403+
intersection[1].instruction =
404+
getInstructionForObvious(intersection.size(),
405+
via_eid,
406+
isThroughStreet(1, intersection),
407+
intersection[1]);
441408
}
442409
}
443410
else
444411
{
445-
BOOST_ASSERT(num_valid_turns == 2);
446-
// UTurn on ramps is not possible
447-
BOOST_ASSERT(!intersection[0].entry_allowed);
448-
BOOST_ASSERT(intersection[1].entry_allowed);
449412
BOOST_ASSERT(intersection[2].entry_allowed);
450-
// two motorways starting at end of ramp (fork)
451-
// M M
452-
// \ /
453-
// |
413+
if (isMotorwayClass(intersection[2].eid, node_based_graph) &&
414+
!second_intersection_name_empty && !first_intersection_name_empty &&
415+
first_second_same_name)
416+
{
417+
// circular order (5-0) onto 4
418+
if (angularDeviation(intersection[2].angle, STRAIGHT_ANGLE) <
419+
2 * NARROW_TURN_ANGLE)
420+
intersection[2].instruction = {TurnType::Merge,
421+
DirectionModifier::SlightRight};
422+
else // fallback
423+
intersection[2].instruction = {TurnType::Merge,
424+
getTurnDirection(intersection[2].angle)};
425+
}
426+
else // passing the end of a highway
427+
{
428+
intersection[2].instruction =
429+
getInstructionForObvious(intersection.size(),
430+
via_eid,
431+
isThroughStreet(2, intersection),
432+
intersection[2]);
433+
}
434+
}
435+
}
436+
else
437+
{
438+
BOOST_ASSERT(num_valid_turns == 2);
439+
// UTurn on ramps is not possible
440+
BOOST_ASSERT(!intersection[0].entry_allowed);
441+
BOOST_ASSERT(intersection[1].entry_allowed);
442+
BOOST_ASSERT(intersection[2].entry_allowed);
443+
// two motorways starting at end of ramp (fork)
444+
// M M
445+
// \ /
446+
// |
447+
// R
448+
if (isMotorwayClass(intersection[1].eid, node_based_graph) &&
449+
isMotorwayClass(intersection[2].eid, node_based_graph))
450+
{
451+
assignFork(via_eid, intersection[2], intersection[1]);
452+
}
453+
else
454+
{
455+
// continued ramp passing motorway entry
456+
// M R
457+
// M R
458+
// | /
454459
// R
455-
if (isMotorwayClass(intersection[1].eid, node_based_graph) &&
456-
isMotorwayClass(intersection[2].eid, node_based_graph))
460+
if (isMotorwayClass(intersection[1].eid, node_based_graph))
457461
{
458-
assignFork(via_eid, intersection[2], intersection[1]);
462+
intersection[1].instruction = {TurnType::Turn, DirectionModifier::SlightRight};
463+
intersection[2].instruction = {TurnType::Continue,
464+
DirectionModifier::SlightLeft};
459465
}
460466
else
461467
{
462-
// continued ramp passing motorway entry
463-
// M R
464-
// M R
465-
// | /
466-
// R
467-
if (isMotorwayClass(intersection[1].eid, node_based_graph))
468-
{
469-
intersection[1].instruction = {TurnType::Turn,
470-
DirectionModifier::SlightRight};
471-
intersection[2].instruction = {TurnType::Continue,
472-
DirectionModifier::SlightLeft};
473-
}
474-
else
475-
{
476-
assignFork(via_eid, intersection[2], intersection[1]);
477-
}
468+
assignFork(via_eid, intersection[2], intersection[1]);
478469
}
479470
}
480471
}

src/extractor/guidance/roundabout_handler.cpp

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -295,22 +295,17 @@ RoundaboutType RoundaboutHandler::getRoundaboutType(const NodeID nid) const
295295
return SPECIAL_EDGEID;
296296
}
297297

298-
if (edge_data.name_id != EMPTY_NAMEID)
298+
const auto &edge_name_empty = name_table.GetNameForID(edge_data.name_id).empty();
299+
if (!edge_name_empty)
299300
{
300-
const auto &edge_name_empty =
301-
name_table.GetNameForID(edge_data.name_id).empty();
302-
if (!edge_name_empty)
303-
{
304301

305-
const auto announce = [&](unsigned id) {
306-
return util::guidance::requiresNameAnnounced(
307-
id, edge_data.name_id, name_table, street_name_suffix_table);
308-
};
302+
const auto announce = [&](unsigned id) {
303+
return util::guidance::requiresNameAnnounced(
304+
id, edge_data.name_id, name_table, street_name_suffix_table);
305+
};
309306

310-
if (std::all_of(
311-
begin(roundabout_name_ids), end(roundabout_name_ids), announce))
312-
roundabout_name_ids.insert(edge_data.name_id);
313-
}
307+
if (std::all_of(begin(roundabout_name_ids), end(roundabout_name_ids), announce))
308+
roundabout_name_ids.insert(edge_data.name_id);
314309
}
315310
continue_edge = edge_id;
316311
}

src/extractor/guidance/sliproad_handler.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "extractor/guidance/sliproad_handler.hpp"
22
#include "extractor/guidance/constants.hpp"
3+
#include "util/assert.hpp"
34
#include "util/bearing.hpp"
45
#include "util/coordinate_calculation.hpp"
56
#include "util/guidance/name_announcements.hpp"
@@ -474,8 +475,7 @@ operator()(const NodeID /*nid*/, const EdgeID source_edge_id, Intersection inter
474475

475476
// Name mismatch: check roads at `c` and `d` for same name
476477
const auto name_mismatch = [&](const NameID road_name_id) {
477-
const auto unnamed =
478-
road_name_id == EMPTY_NAMEID || name_table.GetNameForID(road_name_id).empty();
478+
const auto unnamed = name_table.GetNameForID(road_name_id).empty();
479479

480480
return unnamed ||
481481
util::guidance::requiresNameAnnounced(road_name_id, //
@@ -500,15 +500,12 @@ operator()(const NodeID /*nid*/, const EdgeID source_edge_id, Intersection inter
500500
node_data_container
501501
.GetAnnotation(node_based_graph.GetEdgeData(main_road.eid).annotation_data)
502502
.name_id;
503-
const auto main_road_name_empty = main_road_name_id == EMPTY_NAMEID ||
504-
name_table.GetNameForID(main_road_name_id).empty();
503+
const auto main_road_name_empty = name_table.GetNameForID(main_road_name_id).empty();
505504
const auto &sliproad_annotation =
506505
node_data_container.GetAnnotation(sliproad_edge_data.annotation_data);
507506
const auto sliproad_name_empty =
508-
sliproad_annotation.name_id == EMPTY_NAMEID ||
509507
name_table.GetNameForID(sliproad_annotation.name_id).empty();
510508
const auto candidate_road_name_empty =
511-
candidate_data.name_id == EMPTY_NAMEID ||
512509
name_table.GetNameForID(candidate_data.name_id).empty();
513510
if (!sliproad_edge_data.flags.road_classification.IsLinkClass() &&
514511
!sliproad_name_empty && !main_road_name_empty && !candidate_road_name_empty &&
@@ -583,8 +580,9 @@ operator()(const NodeID /*nid*/, const EdgeID source_edge_id, Intersection inter
583580
intersection[*obvious].instruction.direction_modifier =
584581
getTurnDirection(intersection[*obvious].angle);
585582
}
586-
else if (main_annotation.name_id != EMPTY_NAMEID)
583+
else if (!name_table.GetNameForID(main_annotation.name_id).empty())
587584
{
585+
OSRM_ASSERT(false, coordinates[intersection_node_id]);
588586
intersection[*obvious].instruction.type = TurnType::NewName;
589587
intersection[*obvious].instruction.direction_modifier =
590588
getTurnDirection(intersection[*obvious].angle);

src/extractor/guidance/turn_handler.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,7 @@ bool TurnHandler::isObviousOfTwo(const EdgeID via_edge,
199199

200200
const bool turn_is_perfectly_straight =
201201
angularDeviation(road.angle, STRAIGHT_ANGLE) < std::numeric_limits<double>::epsilon();
202-
const auto &via_name_empty =
203-
via_data.name_id == EMPTY_NAMEID || name_table.GetNameForID(via_data.name_id).empty();
202+
const auto &via_name_empty = name_table.GetNameForID(via_data.name_id).empty();
204203
if (!via_name_empty)
205204
{
206205
const auto same_name = !util::guidance::requiresNameAnnounced(

0 commit comments

Comments
 (0)