1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2010 Dennis Nienhüser <nienhueser@kde.org>
4 //
5 
6 #ifndef MARBLE_WAYPOINTPARSER_H
7 #define MARBLE_WAYPOINTPARSER_H
8 
9 #include "RoutingWaypoint.h"
10 #include "marble_export.h"
11 
12 #include <QMap>
13 #include <QVariant>
14 #include <QStringList>
15 
16 class QTextStream;
17 
18 namespace Marble
19 {
20 
21 class MARBLE_EXPORT WaypointParser
22 {
23 public:
24     /** Fields which can be parsed */
25     enum Field {
26         Longitude,
27         Latitude,
28         JunctionType,
29         RoadName,
30         TotalSecondsRemaining,
31         RoadType
32     };
33 
34     /** Constructor */
35     WaypointParser();
36 
37     /** Parses the given stream and returns the extracted waypoint list */
38     RoutingWaypoints parse( QTextStream &stream ) const;
39 
40     /** Associate the zero-based field no index with the given semantic type */
41     void setFieldIndex( Field field, int index );
42 
43     /** The line separator used in the stream passed to #parse. Default is "\n" */
44     void setLineSeparator( const QString &separator );
45 
46     /** The field separator. Default is ',' */
47     void setFieldSeparator( const QChar &separator );
48 
49     /** Associate the given string key with the given junction type */
50     void addJunctionTypeMapping( const QString &key, RoutingWaypoint::JunctionType value );
51 
52 private:
53     template<class T>
54     T readField( Field field, const QStringList &fields, const T &defaultValue = T() ) const {
55         int index = m_fieldIndices[field];
56         if ( index >= 0 && index < fields.size() ) {
57             return QVariant( fields[index] ).value<T>();
58         }
59 
60         return defaultValue;
61     }
62 
63     QString m_lineSeparator;
64 
65     QChar m_fieldSeparator;
66 
67     QMap<Field, int> m_fieldIndices;
68 
69     QMap<QString, RoutingWaypoint::JunctionType> m_junctionTypeMapping;
70 
71     Q_DISABLE_COPY( WaypointParser )
72 };
73 
74 } // namespace Marble
75 
76 #endif // MARBLE_WAYPOINTPARSER_H
77