diff options
Diffstat (limited to 'server/src/gpx.cppm')
| -rw-r--r-- | server/src/gpx.cppm | 57 |
1 files changed, 31 insertions, 26 deletions
diff --git a/server/src/gpx.cppm b/server/src/gpx.cppm index 20e6242..5872805 100644 --- a/server/src/gpx.cppm +++ b/server/src/gpx.cppm | |||
| @@ -7,37 +7,42 @@ import :xml; | |||
| 7 | 7 | ||
| 8 | namespace routemon::gpx { | 8 | namespace routemon::gpx { |
| 9 | 9 | ||
| 10 | struct metadata { | 10 | struct metadata |
| 11 | std::optional<std::string> name; | 11 | { |
| 12 | std::optional<std::string> desc; | 12 | std::optional<std::string> name; |
| 13 | }; | 13 | std::optional<std::string> desc; |
| 14 | }; | ||
| 14 | 15 | ||
| 15 | struct track_segment { | 16 | struct track_segment |
| 16 | geo::linestring waypoints; | 17 | { |
| 17 | }; | 18 | geo::linestring waypoints; |
| 19 | }; | ||
| 18 | 20 | ||
| 19 | struct track { | 21 | struct track |
| 20 | std::optional<std::string> name; | 22 | { |
| 21 | std::optional<std::string> desc; | 23 | std::optional<std::string> name; |
| 22 | std::vector<track_segment> segments; | 24 | std::optional<std::string> desc; |
| 23 | }; | 25 | std::vector<track_segment> segments; |
| 26 | }; | ||
| 24 | 27 | ||
| 25 | struct file { | 28 | struct file |
| 26 | std::string creator; | 29 | { |
| 27 | metadata meta; | 30 | std::string creator; |
| 28 | std::vector<track> tracks; | 31 | metadata meta; |
| 29 | }; | 32 | std::vector<track> tracks; |
| 33 | }; | ||
| 30 | 34 | ||
| 31 | class reader { | 35 | class reader |
| 32 | xml::executor e_; | 36 | { |
| 33 | xml::parser<file> p_; | 37 | xml::executor e_; |
| 38 | xml::parser<file> p_; | ||
| 34 | 39 | ||
| 35 | public: | 40 | public: |
| 36 | explicit reader(); | 41 | explicit reader(); |
| 37 | 42 | ||
| 38 | auto init() -> void; | 43 | auto init() -> void; |
| 39 | auto put(std::string_view buf) -> void; | 44 | auto put(std::string_view buf) -> void; |
| 40 | [[nodiscard]] auto finish() -> gpx::file; | 45 | [[nodiscard]] auto finish() -> gpx::file; |
| 41 | }; | 46 | }; |
| 42 | 47 | ||
| 43 | } // namespace routemon::gpx | 48 | } // namespace routemon::gpx |