diff options
author | Rutger Broekhoff | 2024-05-02 20:27:40 +0200 |
---|---|---|
committer | Rutger Broekhoff | 2024-05-02 20:27:40 +0200 |
commit | 17a3ea880402338420699e03bcb24181e4ff3924 (patch) | |
tree | da666ef91e0b60d20aa0b01529644c136fd1f4ab /src/querykv1/journeyinfo.cpp | |
download | oeuf-17a3ea880402338420699e03bcb24181e4ff3924.tar.gz oeuf-17a3ea880402338420699e03bcb24181e4ff3924.zip |
Initial commit
Based on dc4ba6a
Diffstat (limited to 'src/querykv1/journeyinfo.cpp')
-rw-r--r-- | src/querykv1/journeyinfo.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/querykv1/journeyinfo.cpp b/src/querykv1/journeyinfo.cpp new file mode 100644 index 0000000..bd29490 --- /dev/null +++ b/src/querykv1/journeyinfo.cpp | |||
@@ -0,0 +1,64 @@ | |||
1 | // vim:set sw=2 ts=2 sts et: | ||
2 | |||
3 | #include <iostream> | ||
4 | |||
5 | #include "journeyinfo.hpp" | ||
6 | |||
7 | void journeyInfo(const Options &options, Kv1Records &records, Kv1Index &index) { | ||
8 | std::cout << "Info for journey " << options.line_planning_number | ||
9 | << "/" << options.journey_number << std::endl; | ||
10 | |||
11 | std::unordered_map<std::string, const Kv1UserStopPoint *> usrstops; | ||
12 | for (size_t i = 0; i < records.user_stop_points.size(); i++) { | ||
13 | const Kv1UserStopPoint *usrstop = &records.user_stop_points[i]; | ||
14 | usrstops[usrstop->key.user_stop_code] = usrstop; | ||
15 | } | ||
16 | |||
17 | for (const auto &pujo : records.public_journeys) { | ||
18 | if (pujo.key.line_planning_number != options.line_planning_number | ||
19 | || std::to_string(pujo.key.journey_number) != options.journey_number) | ||
20 | continue; | ||
21 | |||
22 | std::vector<const Kv1JourneyPatternTimingLink *> timing_links; | ||
23 | for (size_t i = 0; i < records.journey_pattern_timing_links.size(); i++) { | ||
24 | const Kv1JourneyPatternTimingLink *jopatili = &records.journey_pattern_timing_links[i]; | ||
25 | if (jopatili->key.line_planning_number != options.line_planning_number | ||
26 | || jopatili->key.journey_pattern_code != pujo.journey_pattern_code) | ||
27 | continue; | ||
28 | timing_links.push_back(jopatili); | ||
29 | } | ||
30 | |||
31 | std::sort(timing_links.begin(), timing_links.end(), [](auto a, auto b) -> bool { | ||
32 | return a->key.timing_link_order < b->key.timing_link_order; | ||
33 | }); | ||
34 | auto begin_stop = timing_links.front()->user_stop_code_begin; | ||
35 | auto end_stop = timing_links.back()->user_stop_code_end; | ||
36 | |||
37 | const auto *begin = usrstops[begin_stop]; | ||
38 | const auto *end = usrstops[end_stop]; | ||
39 | |||
40 | std::cout << " Journey pattern: " << pujo.key.line_planning_number | ||
41 | << "/" << pujo.journey_pattern_code << std::endl | ||
42 | << " Begin stop: " << begin_stop | ||
43 | << "; name: " << std::quoted(begin->name) | ||
44 | << "; town: " << std::quoted(begin->town) << std::endl | ||
45 | << " End stop: " << end_stop | ||
46 | << "; name: " << std::quoted(end->name) | ||
47 | << "; town: " << std::quoted(end->town) << std::endl; | ||
48 | |||
49 | const auto *begin_star = begin->p_user_stop_area; | ||
50 | const auto *end_star = end->p_user_stop_area; | ||
51 | if (begin_star) | ||
52 | std::cout << " Begin stop area: " << begin_star->key.user_stop_area_code | ||
53 | << "; name: " << std::quoted(begin_star->name) | ||
54 | << ", town: " << std::quoted(begin_star->town) | ||
55 | << std::endl; | ||
56 | if (end_star) | ||
57 | std::cout << " End stop area: " << end_star->key.user_stop_area_code | ||
58 | << "; name: " << std::quoted(end_star->name) | ||
59 | << ", town: " << std::quoted(end_star->town) | ||
60 | << std::endl; | ||
61 | |||
62 | break; | ||
63 | } | ||
64 | } | ||