Skip to content

Commit 8470c5a

Browse files
committed
address some review issues
1 parent bf6deca commit 8470c5a

File tree

9 files changed

+64
-94
lines changed

9 files changed

+64
-94
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222

2323
- name: Format files
2424
run: |
25-
find base libs modules test \
25+
find exe include src test \
2626
-type f -a \( -name "*.cc" -o -name "*.h" -o -name ".cuh" -o -name ".cu" \) \
2727
-print0 | xargs -0 clang-format-17 -i
2828

.vscode/settings.json

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"cmake.configureOnOpen": false,
3+
"files.associations": {
4+
"bitset": "cpp"
5+
}
6+
}

exe/backend/src/http_server.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
#include "osr/routing/profiles/bike.h"
2626
#include "osr/routing/profiles/car.h"
2727
#include "osr/routing/profiles/foot.h"
28-
#include "osr/routing/profiles/hybrid.h"
28+
#include "osr/routing/profiles/car_foot.h"
2929
#include "osr/routing/route.h"
3030

3131
using namespace net;

include/osr/extract/tags.h

+2-10
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,7 @@ struct foot_profile {
192192
case cista::hash("designated"): return override::kWhitelist;
193193
}
194194

195-
if (t.is_platform_) {
196-
return override::kWhitelist;
197-
}
198-
199-
if (t.is_parking_) {
195+
if (t.is_platform_ || t.is_parking_) {
200196
return override::kWhitelist;
201197
}
202198

@@ -209,11 +205,7 @@ struct foot_profile {
209205

210206
static bool default_access(tags const& t, osm_obj_type const type) {
211207
if (type == osm_obj_type::kWay) {
212-
if (t.is_elevator_) {
213-
return true;
214-
}
215-
216-
if (t.is_parking_) {
208+
if (t.is_elevator_ || t.is_parking_) {
217209
return true;
218210
}
219211

include/osr/routing/profiles/bike.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ struct bike {
1717

1818
constexpr node_idx_t get_node() const noexcept { return n_; }
1919

20-
boost::json::object custom_geojson_properties(ways const& w) const {
20+
boost::json::object geojson_properties(ways const& w) const {
2121
return boost::json::object{{"node_id", n_.v_}, {"type", "bike"}};
2222
}
2323

@@ -71,7 +71,7 @@ struct bike {
7171
};
7272

7373
template <typename Fn>
74-
static void resolve(
74+
static void resolve_start_node(
7575
ways::routing const&, way_idx_t, node_idx_t const n, level_t, direction, Fn&& f) {
7676
f(node{n});
7777
}

include/osr/routing/profiles/car.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
#include <bitset>
44

5+
#include "boost/json/object.hpp"
6+
57
#include "utl/helpers/algorithm.h"
68

79
#include "osr/ways.h"
810

9-
#include <boost/json/object.hpp>
10-
1111
namespace osr {
1212

1313
struct car {
@@ -26,7 +26,7 @@ struct car {
2626

2727
constexpr node_idx_t get_node() const noexcept { return n_; }
2828

29-
boost::json::object custom_geojson_properties(ways const& w) const {
29+
boost::json::object geojson_properties(ways const& w) const {
3030
return boost::json::object{{"node_id", n_.v_}, {"type", "car"}};
3131
}
3232

@@ -121,7 +121,7 @@ struct car {
121121
};
122122

123123
template <typename Fn>
124-
static void resolve(ways::routing const& w,
124+
static void resolve_start_node(ways::routing const& w,
125125
way_idx_t const way,
126126
node_idx_t const n,
127127
level_t,

include/osr/routing/profiles/hybrid.h include/osr/routing/profiles/car_foot.h

+40-68
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
#include <bitset>
44

5+
#include "boost/graph/graph_traits.hpp"
6+
57
#include "utl/helpers/algorithm.h"
68

79
#include "osr/ways.h"
810

9-
#include <boost/graph/graph_traits.hpp>
10-
1111
namespace osr {
1212

1313
struct hybrid {
@@ -44,31 +44,11 @@ struct node {
4444
return node{};
4545
}
4646

47-
constexpr node() : type_{node_type::kInvalid}, idx_{node_idx_t::invalid()}, lvl_{level_t::invalid()} {}
48-
49-
constexpr node(node_idx_t const n, level_t const lvl, bool const is_parking)
50-
: type_{node_type::kFoot}, idx_{n}, lvl_{lvl}, is_parking_{is_parking} {}
51-
52-
constexpr node(node_idx_t const n, level_t const lvl, bool const is_parking, direction const dir, way_pos_t const way)
53-
: type_{node_type::kCar}, idx_{n}, lvl_{lvl}, is_parking_{is_parking}, dir_{dir}, node_way_index_{way} {}
54-
55-
constexpr node(node_type const t, node_idx_t const n, level_t const lvl, bool const is_parking, direction const dir, way_pos_t const way)
56-
: type_{t}, idx_{n}, lvl_{lvl}, is_parking_{is_parking}, dir_{dir}, node_way_index_{way} {}
57-
58-
node_type type_;
59-
node_idx_t idx_;
60-
61-
level_t lvl_;
62-
bool is_parking_{false};
63-
64-
direction dir_{};
65-
way_pos_t node_way_index_{};
66-
6747
constexpr node_idx_t get_node() const noexcept {
6848
return idx_;
6949
}
7050

71-
boost::json::object custom_geojson_properties(ways const& w) const {
51+
boost::json::object geojson_properties(ways const& w) const {
7252
auto properties = boost::json::object{
7353
{"node_id", idx_.v_},
7454
{"level", to_float(lvl_)},
@@ -105,6 +85,15 @@ struct node {
10585
constexpr bool is_invalid_node() const noexcept {
10686
return type_ == node_type::kInvalid;
10787
}
88+
89+
node_type type_{node_type::kInvalid};
90+
node_idx_t idx_{node_idx_t::invalid()};
91+
92+
level_t lvl_{level_t::invalid()};
93+
bool is_parking_;
94+
95+
direction dir_{};
96+
way_pos_t node_way_index_{};
10897
};
10998

11099
struct entry {
@@ -114,7 +103,6 @@ struct node {
114103
entry() {
115104
utl::fill(cost_, kInfeasible);
116105
utl::fill(pred_, node_idx_t::invalid());
117-
utl::fill(pred_way_, way_pos_t{0U});
118106
}
119107

120108
constexpr std::optional<node> pred(node const n) const noexcept {
@@ -124,24 +112,13 @@ struct node {
124112
return std::nullopt;
125113
}
126114

127-
if (pred_type_[idx]) {
128-
return std::optional {
129-
node{
130-
pred_[idx],
131-
pred_lvl_[idx],
132-
pred_parking_[idx],
133-
}
134-
};
135-
}
136-
137-
return std::optional {
138-
node{
139-
pred_[idx],
140-
pred_lvl_[idx],
141-
pred_parking_[idx],
142-
to_dir(pred_dir_[idx]),
143-
pred_way_[idx],
144-
}
115+
return node{
116+
to_node_type(pred_type_[idx]),
117+
pred_[idx],
118+
pred_lvl_[idx],
119+
pred_parking_[idx],
120+
to_dir(pred_dir_[idx]),
121+
pred_way_[idx],
145122
};
146123
}
147124

@@ -152,22 +129,16 @@ struct node {
152129
constexpr bool update(node const n,
153130
cost_t const c,
154131
node const pred) noexcept {
155-
if (pred.is_invalid_node()) {
156-
cost_[get_index(n)] = c;
157-
return true;
158-
}
132+
auto const idx = get_index(n);
159133

160-
if (auto const idx = get_index(n); c < cost_[idx]) {
134+
if (c < cost_[idx]) {
161135
cost_[idx] = c;
162136
pred_[idx] = pred.idx_;
163137
pred_lvl_[idx] = pred.lvl_;
164138
pred_parking_[idx] = pred.is_parking_;
165139
pred_type_[idx] = to_bool(pred.type_);
166-
167-
if (pred.is_car_node()) {
168-
pred_way_[idx] = pred.node_way_index_;
169-
pred_dir_[idx] = to_bool(pred.dir_);
170-
}
140+
pred_way_[idx] = pred.node_way_index_;
141+
pred_dir_[idx] = to_bool(pred.dir_);
171142

172143
return true;
173144
}
@@ -241,7 +212,7 @@ struct node {
241212
* mode depending on search direction.
242213
*/
243214
template <typename Fn>
244-
static void resolve(ways::routing const& w,
215+
static void resolve_start_node(ways::routing const& w,
245216
way_idx_t const way,
246217
node_idx_t const n,
247218
level_t const lvl,
@@ -250,22 +221,23 @@ struct node {
250221
auto const way_properties = w.way_properties_[way];
251222
auto const ways = w.node_ways_[n];
252223

224+
253225
level_t const node_level = lvl == level_t::invalid() ? way_properties.from_level() : lvl;
254226
bool const is_parking = w.node_properties_[n].is_parking_;
255227

256228
if (search_dir == direction::kBackward) {
257229
// when seraching backward, we have to start with the foot node
258230
if (lvl == level_t::invalid() || (way_properties.from_level() == lvl || way_properties.to_level() == lvl || can_use_elevator(w, n, lvl))) {
259-
f(node{n, node_level, is_parking});
231+
f(node{node_type::kFoot, n, node_level, is_parking});
260232
}
261233

262234
return;
263235
}
264236

265237
for (auto i = way_pos_t{0U}; i != ways.size(); ++i) {
266238
if (ways[i] == way) {
267-
f(node{n, node_level, is_parking, direction::kForward, i});
268-
f(node{n, node_level, is_parking, direction::kBackward, i});
239+
f(node{node_type::kCar, n, node_level, is_parking, direction::kForward, i});
240+
f(node{node_type::kCar, n, node_level, is_parking, direction::kBackward, i});
269241
}
270242
}
271243
}
@@ -280,27 +252,27 @@ struct node {
280252

281253
auto levels = hash_set<level_t>{};
282254

283-
bool const is_parking = node_properties.is_parking_;
255+
auto const is_parking = node_properties.is_parking_;
284256

285257
for (auto i = way_pos_t{0U}; i != ways.size(); ++i) {
286258
auto const p = w.way_properties_[w.node_ways_[n][i]];
287259

288-
level_t const node_level = lvl == level_t::invalid() ? p.from_level() : lvl;
260+
auto const node_level = lvl == level_t::invalid() ? p.from_level() : lvl;
289261

290-
f(node{n, node_level, is_parking, direction::kForward, i});
291-
f(node{n, node_level, is_parking, direction::kBackward, i});
262+
f(node{node_type::kCar, n, node_level, is_parking, direction::kForward, i});
263+
f(node{node_type::kCar, n, node_level, is_parking, direction::kBackward, i});
292264

293265
if (lvl == level_t::invalid()) {
294266
if (levels.emplace(p.from_level()).second) {
295-
f(node{n, p.from_level(), is_parking});
267+
f(node{node_type::kFoot, n, p.from_level(), is_parking});
296268
}
297269
if (levels.emplace(p.to_level()).second) {
298-
f(node{n, p.to_level(), is_parking});
270+
f(node{node_type::kFoot, n, p.to_level(), is_parking});
299271
}
300272
} else if ((p.from_level() == lvl || p.to_level() == lvl ||
301273
can_use_elevator(w, n, lvl)) &&
302274
levels.emplace(lvl).second) {
303-
f(node{n, lvl, is_parking});
275+
f(node{node_type::kFoot, n, lvl, is_parking});
304276
}
305277
}
306278
}
@@ -348,7 +320,7 @@ struct node {
348320
w, target_node, [&](level_t const target_lvl) {
349321
auto const dist = w.way_node_dist_[way][std::min(from, to)];
350322
auto const cost = foot_way_cost(target_way_prop, dist) + target_node_cost;
351-
fn(node{target_node, target_lvl, target_node_prop.is_parking_}, cost, dist, way, from, to);
323+
fn(node{node_type::kFoot, target_node, target_lvl, target_node_prop.is_parking_}, cost, dist, way, from, to);
352324
});
353325

354326
return; // node is an elevator
@@ -362,7 +334,7 @@ struct node {
362334

363335
auto const dist = w.way_node_dist_[way][std::min(from, to)];
364336
auto const cost = foot_way_cost(target_way_prop, dist) + target_node_cost;
365-
fn(node{target_node, *target_lvl, target_node_prop.is_parking_}, cost, dist, way, from, to);
337+
fn(node{node_type::kFoot, target_node, *target_lvl, target_node_prop.is_parking_}, cost, dist, way, from, to);
366338
}
367339

368340
template <direction SearchDir, typename Fn>
@@ -384,7 +356,7 @@ struct node {
384356

385357
auto const target_node = w.way_nodes_[way][to];
386358
auto const target_node_prop = w.node_properties_[target_node];
387-
cost_t const target_node_cost = car_node_cost(target_node_prop);
359+
auto const target_node_cost = car_node_cost(target_node_prop);
388360

389361
if (target_node_cost == kInfeasible) {
390362
return;
@@ -400,7 +372,7 @@ struct node {
400372
auto const target_level = way_prop.from_level() == n.lvl_ ? way_prop.to_level() : way_prop.from_level();
401373

402374
auto const target =
403-
node{target_node, target_level, target_node_prop.is_parking_, way_dir, w.get_way_pos(target_node, way)};
375+
node{node_type::kCar, target_node, target_level, target_node_prop.is_parking_, way_dir, w.get_way_pos(target_node, way)};
404376

405377
if(n.is_foot_node()) {
406378
if (!n.is_parking_) {
@@ -410,7 +382,6 @@ struct node {
410382
auto const dist = w.way_node_dist_[way][std::min(from, to)];
411383
cost_t const cost = car_way_cost(target_way_prop, way_dir, dist) + target_node_cost + kSwitchPenalty;
412384
fn(target, cost, dist, way, from, to);
413-
return;
414385
}
415386

416387
if (w.is_restricted<SearchDir>(n.idx_, n.node_way_index_, way_pos)) {
@@ -505,6 +476,7 @@ struct node {
505476
static constexpr cost_t way_cost(way_properties const& e,
506477
direction const dir,
507478
std::uint16_t const dist) {
479+
508480
return foot_way_cost(e, dist);
509481
}
510482

include/osr/routing/profiles/foot.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ struct foot {
1717
}
1818
constexpr node_idx_t get_node() const noexcept { return n_; }
1919

20-
boost::json::object custom_geojson_properties(ways const& w) const {
20+
boost::json::object geojson_properties(ways const& w) const {
2121
return boost::json::object{{"node_id", n_.v_}, {"type", "foot"}};
2222
}
2323

@@ -78,7 +78,7 @@ struct foot {
7878
};
7979

8080
template <typename Fn>
81-
static void resolve(ways::routing const& w,
81+
static void resolve_start_node(ways::routing const& w,
8282
way_idx_t const way,
8383
node_idx_t const n,
8484
level_t const lvl,

0 commit comments

Comments
 (0)