1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2002-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
10 /// @file    FareToken.h
11 /// @author  Ricardo Euler
12 /// @date    Thu, 17 August 2018
13 /// @version $Id$
14 ///
15 // Fare Modul for calculating prices during intermodal routing
16 /****************************************************************************/
17 
18 #ifndef SUMO_FARETOKEN_H
19 #define SUMO_FARETOKEN_H
20 enum class FareToken : int {
21     None =  0,
22     Free =  1, // walking and other things can be free
23     H    =  2,
24     L    =  3,
25     T1   =  4,
26     T2   =  5,
27     T3   =  6,
28     Z    =  7,
29     M    =  8,
30     U    =  9,
31     KL   =  10,
32     KH   =  11,
33     K    =  12,
34     KHU  =  13,
35     KLU  =  14,
36     KHZ  =  15,
37     KLZ  =  16,
38     ZU   =  17,   //Artificial state for after leaving short trip khu or klu since a pedestrian edge does not allow us
39     //to distinguish between z or u zones
40     START = 18
41 
42 };
43 
44 namespace FareUtil {
45 
tokenToString(FareToken const & token)46 inline std::string tokenToString(FareToken const& token) {
47     switch (token) {
48         case FareToken::H:
49             return "H";
50         case FareToken::L:
51             return "L";
52         case FareToken::T1:
53             return "T1";
54         case FareToken::T2:
55             return "T2";
56         case FareToken::T3:
57             return "T3";
58         case FareToken::U:
59             return "U";
60         case FareToken::Z:
61             return "Z";
62         case FareToken::M:
63             return "M";
64         case FareToken::K:
65             return "K";
66         case FareToken::KL:
67             return "KL";
68         case FareToken::KH:
69             return "KH";
70         case FareToken::ZU:
71             return "ZU";
72         case FareToken::None:
73             return "None";
74         case FareToken::Free:
75             return "Free";
76         case FareToken::KHU:
77             return "KHU";
78         case FareToken::KLU:
79             return "KLU";
80         case FareToken ::KHZ:
81             return "KHZ";
82         case FareToken ::KLZ:
83             return  "KLZ";
84         default:
85             return "";
86     }
87 }
88 
89 
tokenToTicket(FareToken const & token)90 inline std::string tokenToTicket(FareToken const& token) {
91     switch (token) {
92         case FareToken::H:
93             return "Einzelticket Halle";
94         case FareToken::L:
95             return "Einzelticket Leipzig";
96         case FareToken::T1:
97             return "Einzelticket Stadtverkehr 1";
98         case FareToken::T2:
99             return "Einzelticket Stadtverkehr 2";
100         case FareToken::T3:
101             return "Einzelticket Stadtverkehr 3";
102         case FareToken::U:
103             return "Einzelticket";
104         case FareToken::Z:
105             return "Einzelticket";
106         case FareToken::M:
107             return "Einzelticket Verbundpreis";
108         case FareToken::K:
109             return "Kurzstreckenticket";
110         case FareToken::KL:
111             return "Kurzstreckenticket Leipzig";
112         case FareToken::KH:
113             return "Kurzstreckenticket Halle";
114         case FareToken::ZU:
115             return "None";
116         case FareToken::None:
117             return "None";
118         case FareToken::Free:
119             return "Free";
120         case FareToken::KHU:
121             return "Kurzstreckenticket Halle";
122         case FareToken::KLU:
123             return "Kurzstreckenticket Leipzig";
124         case FareToken ::KHZ:
125             return "Kurzstreckenticket Halle";
126         case FareToken ::KLZ:
127             return  "Kurzstreckenticket Leipzig";
128         case FareToken ::START:
129             return "forbidden START";
130     }
131     return ""; //surpress compiler warning
132 }
133 
stringToToken(std::string str)134 inline FareToken stringToToken(std::string str) {
135     if (str == "H") {
136         return FareToken::H;
137     }
138     if (str == "L") {
139         return FareToken::L;
140     }
141     if (str == "T1") {
142         return FareToken::T1;
143     }
144     if (str == "T2") {
145         return FareToken::T2;
146     }
147     if (str == "T3") {
148         return FareToken::T3;
149     }
150     if (str == "1") {
151         return FareToken::T1;
152     }
153     if (str == "2") {
154         return FareToken::T2;
155     }
156     if (str == "3") {
157         return FareToken::T3;
158     }
159     if (str == "U") {
160         return FareToken::U;
161     }
162     if (str == "Z") {
163         return FareToken::Z;
164     }
165     if (str == "M") {
166         return FareToken::M;
167     }
168     if (str == "K") {
169         return FareToken::K;
170     }
171     if (str == "KL") {
172         return FareToken::KL;
173     }
174     if (str == "KH") {
175         return FareToken::KH;
176     }
177     if (str == "ZU") {
178         return FareToken::ZU;
179     }
180     if (str == "None") {
181         return FareToken::None;
182     }
183     if (str == "Free") {
184         return FareToken::Free;
185     }
186     if (str == "KHU") {
187         return FareToken::KHU;
188     }
189     if (str == "KLU") {
190         return FareToken::KLU;
191     }
192     if (str == "KHZ") {
193         return FareToken::KHZ;
194     }
195     if (str == "KLZ") {
196         return FareToken::KLZ;
197     }
198     if (str == "NOTFOUND") {
199         return FareToken::None;
200     }
201     assert(false);
202     return FareToken::None;
203 }
204 
205 }
206 #endif //SUMO_FARETOKEN_H
207