36
36
37
37
#include < algorithm>
38
38
#include < functional>
39
+ #include < iostream>
39
40
#include < limits>
40
41
#include < memory>
41
42
#include < optional>
@@ -1163,32 +1164,40 @@ lanelet::ConstLanelets RouteHandler::getAllLeftSharedLinestringLanelets(
1163
1164
const bool & invert_opposite) const noexcept
1164
1165
{
1165
1166
lanelet::ConstLanelets linestring_shared;
1166
- auto lanelet_at_left = getLeftLanelet (lane);
1167
- auto lanelet_at_left_opposite = getLeftOppositeLanelets (lane);
1168
- while (lanelet_at_left) {
1169
- linestring_shared.push_back (lanelet_at_left.value ());
1170
- lanelet_at_left = getLeftLanelet (lanelet_at_left.value ());
1171
- if (!lanelet_at_left) {
1172
- break ;
1167
+ try {
1168
+ auto lanelet_at_left = getLeftLanelet (lane);
1169
+ auto lanelet_at_left_opposite = getLeftOppositeLanelets (lane);
1170
+ while (lanelet_at_left) {
1171
+ linestring_shared.push_back (lanelet_at_left.value ());
1172
+ lanelet_at_left = getLeftLanelet (lanelet_at_left.value ());
1173
+ if (!lanelet_at_left) {
1174
+ break ;
1175
+ }
1176
+ lanelet_at_left_opposite = getLeftOppositeLanelets (lanelet_at_left.value ());
1173
1177
}
1174
- lanelet_at_left_opposite = getLeftOppositeLanelets (lanelet_at_left.value ());
1175
- }
1176
1178
1177
- if (!lanelet_at_left_opposite.empty () && include_opposite) {
1178
- if (invert_opposite) {
1179
- linestring_shared.push_back (lanelet_at_left_opposite.front ().invert ());
1180
- } else {
1181
- linestring_shared.push_back (lanelet_at_left_opposite.front ());
1182
- }
1183
- auto lanelet_at_right = getRightLanelet (lanelet_at_left_opposite.front ());
1184
- while (lanelet_at_right) {
1179
+ if (!lanelet_at_left_opposite.empty () && include_opposite) {
1185
1180
if (invert_opposite) {
1186
- linestring_shared.push_back (lanelet_at_right. value ().invert ());
1181
+ linestring_shared.push_back (lanelet_at_left_opposite. front ().invert ());
1187
1182
} else {
1188
- linestring_shared.push_back (lanelet_at_right.value ());
1183
+ linestring_shared.push_back (lanelet_at_left_opposite.front ());
1184
+ }
1185
+ auto lanelet_at_right = getRightLanelet (lanelet_at_left_opposite.front ());
1186
+ while (lanelet_at_right) {
1187
+ if (invert_opposite) {
1188
+ linestring_shared.push_back (lanelet_at_right.value ().invert ());
1189
+ } else {
1190
+ linestring_shared.push_back (lanelet_at_right.value ());
1191
+ }
1192
+ lanelet_at_right = getRightLanelet (lanelet_at_right.value ());
1189
1193
}
1190
- lanelet_at_right = getRightLanelet (lanelet_at_right.value ());
1191
1194
}
1195
+ } catch (const std::exception & e) {
1196
+ std::cerr << " Exception in getAllLeftSharedLinestringLanelets: " << e.what () << std::endl;
1197
+ return {};
1198
+ } catch (...) {
1199
+ std::cerr << " Unknown exception in getAllLeftSharedLinestringLanelets" << std::endl;
1200
+ return {};
1192
1201
}
1193
1202
return linestring_shared;
1194
1203
}
@@ -1198,32 +1207,40 @@ lanelet::ConstLanelets RouteHandler::getAllRightSharedLinestringLanelets(
1198
1207
const bool & invert_opposite) const noexcept
1199
1208
{
1200
1209
lanelet::ConstLanelets linestring_shared;
1201
- auto lanelet_at_right = getRightLanelet (lane);
1202
- auto lanelet_at_right_opposite = getRightOppositeLanelets (lane);
1203
- while (lanelet_at_right) {
1204
- linestring_shared.push_back (lanelet_at_right.value ());
1205
- lanelet_at_right = getRightLanelet (lanelet_at_right.value ());
1206
- if (!lanelet_at_right) {
1207
- break ;
1210
+ try {
1211
+ auto lanelet_at_right = getRightLanelet (lane);
1212
+ auto lanelet_at_right_opposite = getRightOppositeLanelets (lane);
1213
+ while (lanelet_at_right) {
1214
+ linestring_shared.push_back (lanelet_at_right.value ());
1215
+ lanelet_at_right = getRightLanelet (lanelet_at_right.value ());
1216
+ if (!lanelet_at_right) {
1217
+ break ;
1218
+ }
1219
+ lanelet_at_right_opposite = getRightOppositeLanelets (lanelet_at_right.value ());
1208
1220
}
1209
- lanelet_at_right_opposite = getRightOppositeLanelets (lanelet_at_right.value ());
1210
- }
1211
1221
1212
- if (!lanelet_at_right_opposite.empty () && include_opposite) {
1213
- if (invert_opposite) {
1214
- linestring_shared.push_back (lanelet_at_right_opposite.front ().invert ());
1215
- } else {
1216
- linestring_shared.push_back (lanelet_at_right_opposite.front ());
1217
- }
1218
- auto lanelet_at_left = getLeftLanelet (lanelet_at_right_opposite.front ());
1219
- while (lanelet_at_left) {
1222
+ if (!lanelet_at_right_opposite.empty () && include_opposite) {
1220
1223
if (invert_opposite) {
1221
- linestring_shared.push_back (lanelet_at_left. value ().invert ());
1224
+ linestring_shared.push_back (lanelet_at_right_opposite. front ().invert ());
1222
1225
} else {
1223
- linestring_shared.push_back (lanelet_at_left.value ());
1226
+ linestring_shared.push_back (lanelet_at_right_opposite.front ());
1227
+ }
1228
+ auto lanelet_at_left = getLeftLanelet (lanelet_at_right_opposite.front ());
1229
+ while (lanelet_at_left) {
1230
+ if (invert_opposite) {
1231
+ linestring_shared.push_back (lanelet_at_left.value ().invert ());
1232
+ } else {
1233
+ linestring_shared.push_back (lanelet_at_left.value ());
1234
+ }
1235
+ lanelet_at_left = getLeftLanelet (lanelet_at_left.value ());
1224
1236
}
1225
- lanelet_at_left = getLeftLanelet (lanelet_at_left.value ());
1226
1237
}
1238
+ } catch (const std::exception & e) {
1239
+ std::cerr << " Exception in getAllRightSharedLinestringLanelets: " << e.what () << std::endl;
1240
+ return {};
1241
+ } catch (...) {
1242
+ std::cerr << " Unknown exception in getAllRightSharedLinestringLanelets" << std::endl;
1243
+ return {};
1227
1244
}
1228
1245
return linestring_shared;
1229
1246
}
0 commit comments