SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SUMOVehicleClass.cpp
Go to the documentation of this file.
1 /****************************************************************************/
10 // Definitions of SUMO vehicle classes and helper functions
11 /****************************************************************************/
12 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
13 // Copyright (C) 2001-2014 DLR (http://www.dlr.de/) and contributors
14 /****************************************************************************/
15 //
16 // This file is part of SUMO.
17 // SUMO is free software: you can redistribute it and/or modify
18 // it under the terms of the GNU General Public License as published by
19 // the Free Software Foundation, either version 3 of the License, or
20 // (at your option) any later version.
21 //
22 /****************************************************************************/
23 
24 
25 // ===========================================================================
26 // included modules
27 // ===========================================================================
28 #ifdef _MSC_VER
29 #include <windows_config.h>
30 #else
31 #include <config.h>
32 #endif
33 
34 #include <string>
35 #include <map>
36 #include "SUMOVehicleClass.h"
38 #include <utils/common/ToString.h>
41 
42 
43 #ifdef CHECK_MEMORY_LEAKS
44 #include <foreign/nvwa/debug_new.h>
45 #endif // CHECK_MEMORY_LEAKS
46 
47 
48 // ===========================================================================
49 // static members
50 // ===========================================================================
52  {"unknown", SVC_UNKNOWN},
53  {"private", SVC_PRIVATE},
54  {"public_transport", SVC_PUBLIC_TRANSPORT},
55  {"public_emergency", SVC_PUBLIC_EMERGENCY},
56  {"public_authority", SVC_PUBLIC_AUTHORITY},
57  {"public_army", SVC_PUBLIC_ARMY},
58  {"vip", SVC_VIP},
59  {"ignoring", SVC_IGNORING},
60  {"passenger", SVC_PASSENGER},
61  {"hov", SVC_HOV},
62  {"taxi", SVC_TAXI},
63  {"bus", SVC_BUS},
64  {"delivery", SVC_DELIVERY},
65  {"transport", SVC_TRANSPORT},
66  {"lightrail", SVC_LIGHTRAIL},
67  {"cityrail", SVC_CITYRAIL},
68  {"rail_slow", SVC_RAIL_SLOW},
69  {"rail_fast", SVC_RAIL_FAST},
70  {"motorcycle", SVC_MOTORCYCLE},
71  {"bicycle", SVC_BICYCLE},
72  {"pedestrian", SVC_PEDESTRIAN},
73  {"custom1", SVC_CUSTOM1},
74  {"custom2", SVC_CUSTOM2}
75 };
76 
78  sumoVehicleClassStringInitializer, SVC_CUSTOM2);
79 
80 
82  {"pedestrian", SVS_PEDESTRIAN},
83  {"bicycle", SVS_BICYCLE},
84  {"motorcycle", SVS_MOTORCYCLE},
85  {"passenger", SVS_PASSENGER},
86  {"passenger/sedan", SVS_PASSENGER_SEDAN},
87  {"passenger/hatchback", SVS_PASSENGER_HATCHBACK},
88  {"passenger/wagon", SVS_PASSENGER_WAGON},
89  {"passenger/van", SVS_PASSENGER_VAN},
90  {"delivery", SVS_DELIVERY},
91  {"transport", SVS_TRANSPORT},
92  {"transport/semitrailer", SVS_TRANSPORT_SEMITRAILER},
93  {"transport/trailer", SVS_TRANSPORT_1TRAILER},
94  {"bus", SVS_BUS},
95  {"bus/city", SVS_BUS_CITY},
96  {"bus/flexible", SVS_BUS_CITY_FLEXIBLE},
97  {"bus/overland", SVS_BUS_OVERLAND},
98  {"bus/trolley", SVS_BUS_TROLLEY},
99  {"rail", SVS_RAIL},
100  {"rail/light", SVS_RAIL_LIGHT},
101  {"rail/city", SVS_RAIL_CITY},
102  {"rail/slow", SVS_RAIL_SLOW},
103  {"rail/fast", SVS_RAIL_FAST},
104  {"rail/cargo", SVS_RAIL_CARGO},
105  {"evehicle", SVS_E_VEHICLE},
106  {"ant", SVS_ANT},
107  {"", SVS_UNKNOWN}
108 };
109 
110 
112  sumoVehicleShapeStringInitializer, SVS_UNKNOWN);
113 
114 
116  {"unknown", SVE_UNKNOWN},
117  // heavy duty vehicles; 3 clusters
118  {"HDV_3_1", SVE_HDV_3_1},
119  {"HDV_3_2", SVE_HDV_3_2},
120  {"HDV_3_3", SVE_HDV_3_3},
121  // heavy duty vehicles; 6 clusters
122  {"HDV_6_1", SVE_HDV_6_1},
123  {"HDV_6_2", SVE_HDV_6_2},
124  {"HDV_6_3", SVE_HDV_6_3},
125  {"HDV_6_4", SVE_HDV_6_4},
126  {"HDV_6_5", SVE_HDV_6_5},
127  {"HDV_6_6", SVE_HDV_6_6},
128  // heavy duty vehicles; 12 clusters
129  {"HDV_12_1", SVE_HDV_12_1},
130  {"HDV_12_2", SVE_HDV_12_2},
131  {"HDV_12_3", SVE_HDV_12_3},
132  {"HDV_12_4", SVE_HDV_12_4},
133  {"HDV_12_5", SVE_HDV_12_5},
134  {"HDV_12_6", SVE_HDV_12_6},
135  {"HDV_12_7", SVE_HDV_12_7},
136  {"HDV_12_8", SVE_HDV_12_8},
137  {"HDV_12_9", SVE_HDV_12_9},
138  {"HDV_12_10", SVE_HDV_12_10},
139  {"HDV_12_11", SVE_HDV_12_11},
140  {"HDV_12_12", SVE_HDV_12_12},
141  // passenger & light duty vehicles; 7 clusters
142  {"P_7_1", SVE_P_LDV_7_1},
143  {"P_7_2", SVE_P_LDV_7_2},
144  {"P_7_3", SVE_P_LDV_7_3},
145  {"P_7_4", SVE_P_LDV_7_4},
146  {"P_7_5", SVE_P_LDV_7_5},
147  {"P_7_6", SVE_P_LDV_7_6},
148  {"P_7_7", SVE_P_LDV_7_7},
149  // passenger & light duty vehicles; 14 clusters
150  {"P_14_1", SVE_P_LDV_14_1},
151  {"P_14_2", SVE_P_LDV_14_2},
152  {"P_14_3", SVE_P_LDV_14_3},
153  {"P_14_4", SVE_P_LDV_14_4},
154  {"P_14_5", SVE_P_LDV_14_5},
155  {"P_14_6", SVE_P_LDV_14_6},
156  {"P_14_7", SVE_P_LDV_14_7},
157  {"P_14_8", SVE_P_LDV_14_8},
158  {"P_14_9", SVE_P_LDV_14_9},
159  {"P_14_10", SVE_P_LDV_14_10},
160  {"P_14_11", SVE_P_LDV_14_11},
161  {"P_14_12", SVE_P_LDV_14_12},
162  {"P_14_13", SVE_P_LDV_14_13},
163  {"P_14_14", SVE_P_LDV_14_14},
164  // no emissions
165  {"zero", SVE_ZERO_EMISSIONS},
166  // heavy duty vehicles, no accel; 3 clusters
167  {"HDV_A0_3_1", SVE_HDV_A0_3_1},
168  {"HDV_A0_3_2", SVE_HDV_A0_3_2},
169  {"HDV_A0_3_3", SVE_HDV_A0_3_3},
170  // heavy duty vehicles, no accel; 6 clusters
171  {"HDV_A0_6_1", SVE_HDV_A0_6_1},
172  {"HDV_A0_6_2", SVE_HDV_A0_6_2},
173  {"HDV_A0_6_3", SVE_HDV_A0_6_3},
174  {"HDV_A0_6_4", SVE_HDV_A0_6_4},
175  {"HDV_A0_6_5", SVE_HDV_A0_6_5},
176  {"HDV_A0_6_6", SVE_HDV_A0_6_6},
177  // heavy duty vehicles, no accel; 12 clusters
178  {"HDV_A0_12_1", SVE_HDV_A0_12_1},
179  {"HDV_A0_12_2", SVE_HDV_A0_12_2},
180  {"HDV_A0_12_3", SVE_HDV_A0_12_3},
181  {"HDV_A0_12_4", SVE_HDV_A0_12_4},
182  {"HDV_A0_12_5", SVE_HDV_A0_12_5},
183  {"HDV_A0_12_6", SVE_HDV_A0_12_6},
184  {"HDV_A0_12_7", SVE_HDV_A0_12_7},
185  {"HDV_A0_12_8", SVE_HDV_A0_12_8},
186  {"HDV_A0_12_9", SVE_HDV_A0_12_9},
187  {"HDV_A0_12_10", SVE_HDV_A0_12_10},
188  {"HDV_A0_12_11", SVE_HDV_A0_12_11},
189  {"HDV_A0_12_12", SVE_HDV_A0_12_12},
190  // passenger & light duty vehicles, no accel; 7 clusters
191  {"P_A0_7_1", SVE_P_LDV_A0_7_1},
192  {"P_A0_7_2", SVE_P_LDV_A0_7_2},
193  {"P_A0_7_3", SVE_P_LDV_A0_7_3},
194  {"P_A0_7_4", SVE_P_LDV_A0_7_4},
195  {"P_A0_7_5", SVE_P_LDV_A0_7_5},
196  {"P_A0_7_6", SVE_P_LDV_A0_7_6},
197  {"P_A0_7_7", SVE_P_LDV_A0_7_7},
198  // passenger & light duty vehicles, no accel; 14 clusters
199  {"P_A0_14_1", SVE_P_LDV_A0_14_1},
200  {"P_A0_14_2", SVE_P_LDV_A0_14_2},
201  {"P_A0_14_3", SVE_P_LDV_A0_14_3},
202  {"P_A0_14_4", SVE_P_LDV_A0_14_4},
203  {"P_A0_14_5", SVE_P_LDV_A0_14_5},
204  {"P_A0_14_6", SVE_P_LDV_A0_14_6},
205  {"P_A0_14_7", SVE_P_LDV_A0_14_7},
206  {"P_A0_14_8", SVE_P_LDV_A0_14_8},
207  {"P_A0_14_9", SVE_P_LDV_A0_14_9},
208  {"P_A0_14_10", SVE_P_LDV_A0_14_10},
209  {"P_A0_14_11", SVE_P_LDV_A0_14_11},
210  {"P_A0_14_12", SVE_P_LDV_A0_14_12},
211  {"P_A0_14_13", SVE_P_LDV_A0_14_13},
212  {"P_A0_14_14", SVE_P_LDV_A0_14_14},
213 
214  // PHEMlight
215  {"H_PKW_D_EU5", SVE_H_PKW_D_EU5},
216  {"H_PKW_D_EU6", SVE_H_PKW_D_EU6},
217  {"H_PKW_G_EU5", SVE_H_PKW_G_EU5},
218  {"H_PKW_G_EU6", SVE_H_PKW_G_EU6},
219  {"KKR_G_EU0", SVE_KKR_G_EU0},
220  {"KKR_G_EU1", SVE_KKR_G_EU1},
221  {"KKR_G_EU2", SVE_KKR_G_EU2},
222  {"KKR_G_EU3", SVE_KKR_G_EU3},
223  {"KKR_G_EU4", SVE_KKR_G_EU4},
224  {"LB_D_EU0", SVE_LB_D_EU0},
225  {"LB_D_EU1", SVE_LB_D_EU1},
226  {"LB_D_EU2", SVE_LB_D_EU2},
227  {"LB_D_EU3", SVE_LB_D_EU3},
228  {"LB_D_EU4", SVE_LB_D_EU4},
229  {"LB_D_EU5", SVE_LB_D_EU5},
230  {"LB_D_EU6", SVE_LB_D_EU6},
231  {"LNF_D_EU0_I", SVE_LNF_D_EU0_I},
232  {"LNF_D_EU0_II", SVE_LNF_D_EU0_II},
233  {"LNF_D_EU0_III", SVE_LNF_D_EU0_III},
234  {"LNF_D_EU1_I", SVE_LNF_D_EU1_I},
235  {"LNF_D_EU1_II", SVE_LNF_D_EU1_II},
236  {"LNF_D_EU1_III", SVE_LNF_D_EU1_III},
237  {"LNF_D_EU2_I", SVE_LNF_D_EU2_I},
238  {"LNF_D_EU2_II", SVE_LNF_D_EU2_II},
239  {"LNF_D_EU2_III", SVE_LNF_D_EU2_III},
240  {"LNF_D_EU3_I", SVE_LNF_D_EU3_I},
241  {"LNF_D_EU3_II", SVE_LNF_D_EU3_II},
242  {"LNF_D_EU3_III", SVE_LNF_D_EU3_III},
243  {"LNF_D_EU4_I", SVE_LNF_D_EU4_I},
244  {"LNF_D_EU4_II", SVE_LNF_D_EU4_II},
245  {"LNF_D_EU4_III", SVE_LNF_D_EU4_III},
246  {"LNF_D_EU5_I", SVE_LNF_D_EU5_I},
247  {"LNF_D_EU5_II", SVE_LNF_D_EU5_II},
248  {"LNF_D_EU5_III", SVE_LNF_D_EU5_III},
249  {"LNF_D_EU6_I", SVE_LNF_D_EU6_I},
250  {"LNF_D_EU6_II", SVE_LNF_D_EU6_II},
251  {"LNF_D_EU6_III", SVE_LNF_D_EU6_III},
252  {"LNF_G_EU0_I", SVE_LNF_G_EU0_I},
253  {"LNF_G_EU0_II", SVE_LNF_G_EU0_II},
254  {"LNF_G_EU0_III", SVE_LNF_G_EU0_III},
255  {"LNF_G_EU1_I", SVE_LNF_G_EU1_I},
256  {"LNF_G_EU1_II", SVE_LNF_G_EU1_II},
257  {"LNF_G_EU1_III", SVE_LNF_G_EU1_III},
258  {"LNF_G_EU2_I", SVE_LNF_G_EU2_I},
259  {"LNF_G_EU2_II", SVE_LNF_G_EU2_II},
260  {"LNF_G_EU2_III", SVE_LNF_G_EU2_III},
261  {"LNF_G_EU3_I", SVE_LNF_G_EU3_I},
262  {"LNF_G_EU3_II", SVE_LNF_G_EU3_II},
263  {"LNF_G_EU3_III", SVE_LNF_G_EU3_III},
264  {"LNF_G_EU4_I", SVE_LNF_G_EU4_I},
265  {"LNF_G_EU4_II", SVE_LNF_G_EU4_II},
266  {"LNF_G_EU4_III", SVE_LNF_G_EU4_III},
267  {"LNF_G_EU5_I", SVE_LNF_G_EU5_I},
268  {"LNF_G_EU5_II", SVE_LNF_G_EU5_II},
269  {"LNF_G_EU5_III", SVE_LNF_G_EU5_III},
270  {"LNF_G_EU6_I", SVE_LNF_G_EU6_I},
271  {"LNF_G_EU6_II", SVE_LNF_G_EU6_II},
272  {"LNF_G_EU6_III", SVE_LNF_G_EU6_III},
273  {"LSZ_D_EU0", SVE_LSZ_D_EU0},
274  {"LSZ_D_EU1", SVE_LSZ_D_EU1},
275  {"LSZ_D_EU2", SVE_LSZ_D_EU2},
276  {"LSZ_D_EU3", SVE_LSZ_D_EU3},
277  {"LSZ_D_EU4", SVE_LSZ_D_EU4},
278  {"LSZ_D_EU5", SVE_LSZ_D_EU5},
279  {"LSZ_D_EU6", SVE_LSZ_D_EU6},
280  {"MR_G_EU0_2T", SVE_MR_G_EU0_2T},
281  {"MR_G_EU0_4T", SVE_MR_G_EU0_4T},
282  {"MR_G_EU1_2T", SVE_MR_G_EU1_2T},
283  {"MR_G_EU1_4T", SVE_MR_G_EU1_4T},
284  {"MR_G_EU2_2T", SVE_MR_G_EU2_2T},
285  {"MR_G_EU2_4T", SVE_MR_G_EU2_4T},
286  {"MR_G_EU3_2T", SVE_MR_G_EU3_2T},
287  {"MR_G_EU3_4T", SVE_MR_G_EU3_4T},
288  {"MR_G_EU4_2T", SVE_MR_G_EU4_2T},
289  {"MR_G_EU4_4T", SVE_MR_G_EU4_4T},
290  {"MR_G_EU5_2T", SVE_MR_G_EU5_2T},
291  {"MR_G_EU5_4T", SVE_MR_G_EU5_4T},
292  {"PKW_D_EU0", SVE_PKW_D_EU0},
293  {"PKW_D_EU1", SVE_PKW_D_EU1},
294  {"PKW_D_EU2", SVE_PKW_D_EU2},
295  {"PKW_D_EU3", SVE_PKW_D_EU3},
296  {"PKW_D_EU4", SVE_PKW_D_EU4},
297  {"PKW_D_EU5", SVE_PKW_D_EU5},
298  {"PKW_D_EU6", SVE_PKW_D_EU6},
299  {"PKW_G_EU0", SVE_PKW_G_EU0},
300  {"PKW_G_EU1", SVE_PKW_G_EU1},
301  {"PKW_G_EU2", SVE_PKW_G_EU2},
302  {"PKW_G_EU3", SVE_PKW_G_EU3},
303  {"PKW_G_EU4", SVE_PKW_G_EU4},
304  {"PKW_G_EU5", SVE_PKW_G_EU5},
305  {"PKW_G_EU6", SVE_PKW_G_EU6},
306  {"RB_D_EU0", SVE_RB_D_EU0},
307  {"RB_D_EU1", SVE_RB_D_EU1},
308  {"RB_D_EU2", SVE_RB_D_EU2},
309  {"RB_D_EU3", SVE_RB_D_EU3},
310  {"RB_D_EU4", SVE_RB_D_EU4},
311  {"RB_D_EU5", SVE_RB_D_EU5},
312  {"RB_D_EU6", SVE_RB_D_EU6},
313  {"Solo_LKW_D_EU0_I", SVE_Solo_LKW_D_EU0_I},
314  {"Solo_LKW_D_EU0_II", SVE_Solo_LKW_D_EU0_II},
315  {"Solo_LKW_D_EU1_I", SVE_Solo_LKW_D_EU1_I},
316  {"Solo_LKW_D_EU1_II", SVE_Solo_LKW_D_EU1_II},
317  {"Solo_LKW_D_EU2_I", SVE_Solo_LKW_D_EU2_I},
318  {"Solo_LKW_D_EU2_II", SVE_Solo_LKW_D_EU2_II},
319  {"Solo_LKW_D_EU3_I", SVE_Solo_LKW_D_EU3_I},
320  {"Solo_LKW_D_EU3_II", SVE_Solo_LKW_D_EU3_II},
321  {"Solo_LKW_D_EU4_I", SVE_Solo_LKW_D_EU4_I},
322  {"Solo_LKW_D_EU4_II", SVE_Solo_LKW_D_EU4_II},
323  {"Solo_LKW_D_EU5_I", SVE_Solo_LKW_D_EU5_I},
324  {"Solo_LKW_D_EU5_II", SVE_Solo_LKW_D_EU5_II},
325  {"Solo_LKW_D_EU6_I", SVE_Solo_LKW_D_EU6_I},
326  {"Solo_LKW_D_EU6_II", SVE_Solo_LKW_D_EU6_II}
327 
328 };
329 
331  SumoEmissionClassStringInitializer, SVE_Solo_LKW_D_EU6_II);
332 
333 
334 // ===========================================================================
335 // additional constants
336 // ===========================================================================
337 
340 
341 // ===========================================================================
342 // method definitions
343 // ===========================================================================
344 // ------------ Conversion of SUMOVehicleClass
345 
346 std::string
348  std::string ret;
349  const std::vector<std::string> names = SumoVehicleClassStrings.getStrings();
350  for (std::vector<std::string>::const_iterator it = names.begin(); it != names.end(); it++) {
351  if ((id & SumoVehicleClassStrings.get(*it))) {
352  ret += ("|" + *it);
353  }
354  }
355  if (ret.length() > 0) {
356  return ret.substr(1);
357  } else {
358  return ret;
359  }
360 }
361 
362 
363 std::string
365  return joinToString(getAllowedVehicleClassNamesList(permissions), ' ');
366 }
367 
368 
369 std::vector<std::string>
372  const std::vector<std::string> classNames = SumoVehicleClassStrings.getStrings();
373  std::vector<std::string> result;
374  for (std::vector<std::string>::const_iterator it = classNames.begin(); it != classNames.end(); it++) {
375  const int svc = (int)SumoVehicleClassStrings.get(*it);
376  if ((svc & permissions) == svc && svc != SVC_UNKNOWN) {
377  result.push_back(*it);
378  }
379  }
380  return result;
381 }
382 
383 
384 std::pair<std::string, bool>
386  // shortcut the common cases
387  if (permissions == SVCFreeForAll) {
388  return std::pair<std::string, bool>("", false); // nothing disallowed
389  }
390  // figure out whether its shorter to write allow or disallow
391  // @note: this code assumes that enum values are assigned contiguous powers of 2 from 1 to SUMOVehicleClass_MAX
392  size_t num_allowed = 0;
393  for (int mask = 1; mask <= SUMOVehicleClass_MAX; mask = mask << 1) {
394  if ((mask & permissions) == mask) {
395  ++num_allowed;
396  }
397  }
398  if (num_allowed <= (SumoVehicleClassStrings.size() - num_allowed) && num_allowed > 0) {
399  return std::pair<std::string, bool>(getAllowedVehicleClassNames(permissions), true);
400  } else {
401  return std::pair<std::string, bool>(getAllowedVehicleClassNames(~permissions), false);
402  }
403 }
404 
405 
407 getVehicleClassID(const std::string& name) {
408  if (SumoVehicleClassStrings.hasString(name)) {
409  return SumoVehicleClassStrings.get(name);
410  }
411  throw ProcessError("Unknown vehicle class '" + name + "'.");
412 }
413 
414 
415 int
416 getVehicleClassCompoundID(const std::string& name) {
417  int ret = SVC_UNKNOWN;
418  const std::vector<std::string> names = SumoVehicleClassStrings.getStrings();
419  for (std::vector<std::string>::const_iterator it = names.begin(); it != names.end(); it++) {
420  if (name.find(*it) != std::string::npos) {
421  ret = ret | (int) SumoVehicleClassStrings.get(*it);
422  }
423  }
424  return ret;
425 }
426 
427 
429 parseVehicleClasses(const std::string& allowedS) {
430  SVCPermissions result = 0;
431  StringTokenizer sta(allowedS, " ");
432  while (sta.hasNext()) {
433  result |= getVehicleClassID(sta.next());
434  }
435  return result;
436 }
437 
438 
439 bool
440 canParseVehicleClasses(const std::string& classes) {
441  StringTokenizer sta(classes, " ");
442  while (sta.hasNext()) {
443  if (!SumoVehicleClassStrings.hasString(sta.next())) {
444  return false;
445  }
446  }
447  return true;
448 }
449 
450 
451 extern SVCPermissions parseVehicleClasses(const std::string& allowedS, const std::string& disallowedS) {
452  if (allowedS.size() == 0 && disallowedS.size() == 0) {
453  return SVCFreeForAll;
454  } else if (allowedS.size() > 0 && disallowedS.size() > 0) {
455  WRITE_WARNING("SVCPermissions must be specified either via 'allow' or 'disallow'. Ignoring 'disallow'");
456  return parseVehicleClasses(allowedS);
457  } else if (allowedS.size() > 0) {
458  return parseVehicleClasses(allowedS);
459  } else {
460  return ~parseVehicleClasses(disallowedS);
461  }
462 }
463 
464 
466 parseVehicleClasses(const std::vector<std::string>& allowedS) {
467  SVCPermissions result = 0;
468  for (std::vector<std::string>::const_iterator i = allowedS.begin(); i != allowedS.end(); ++i) {
469  result |= getVehicleClassID(*i);
470  }
471  return result;
472 }
473 
474 
476 getVehicleShapeID(const std::string& name) {
477  if (SumoVehicleShapeStrings.hasString(name)) {
478  return SumoVehicleShapeStrings.get(name);
479  } else {
480  throw ProcessError("Unknown vehicle shape '" + name + "'.");
481  }
482 }
483 
484 
485 std::string
487  return SumoVehicleShapeStrings.getString(id);
488 }
489 
490 
491 bool isRailway(SVCPermissions permissions) {
492  const int anyRail = SVC_RAIL_FAST + SVC_RAIL_SLOW + SVC_CITYRAIL + SVC_LIGHTRAIL;
493  return (permissions & anyRail) > 0 && (permissions & SVC_PASSENGER) == 0;
494 }
495 
496 // ------------ Conversion of SUMOEmissionClass
498 getVehicleEmissionTypeID(const std::string& name) {
499  if (SumoEmissionClassStrings.hasString(name)) {
500  return SumoEmissionClassStrings.get(name);
501  } else {
502  throw ProcessError("Unknown emission type '" + name + "'.");
503  }
504 }
505 
506 std::string
508  return SumoEmissionClassStrings.getString(id);
509 }
510 
511 
512 const std::string DEFAULT_VTYPE_ID("DEFAULT_VEHTYPE");
513 const SUMOReal DEFAULT_VEH_MAXSPEED(70.0);
514 const SUMOReal DEFAULT_VEH_ACCEL(2.6);
515 const SUMOReal DEFAULT_VEH_DECEL(4.5);
516 const SUMOReal DEFAULT_VEH_SIGMA(0.5);
517 const SUMOReal DEFAULT_VEH_LENGTH(5.);
518 const SUMOReal DEFAULT_VEH_MINGAP(2.5);
519 const SUMOReal DEFAULT_VEH_TAU(1.);
521 const SUMOReal DEFAULT_VEH_PROB(1.);
524 const SUMOReal DEFAULT_VEH_WIDTH(2.);
525 const SUMOReal DEFAULT_VEH_HEIGHT(1.5);
529 const SUMOReal DEFAULT_VEH_TMP1(1.);
530 const SUMOReal DEFAULT_VEH_TMP2(1.);
531 const SUMOReal DEFAULT_VEH_TMP3(1.);
532 const SUMOReal DEFAULT_VEH_TMP4(1.);
533 const SUMOReal DEFAULT_VEH_TMP5(1.);
534 
535 const SUMOReal DEFAULT_PERSON_SPEED(5. / 3.6);
536 
537 /****************************************************************************/
538 
SUMOVehicleClass getVehicleClassID(const std::string &name)
Returns the class id of the abstract class given by its name.
const SUMOReal DEFAULT_VEH_TMP3(1.)
SUMOEmissionClass getVehicleEmissionTypeID(const std::string &name)
Returns the class id of the emission class given by its name.
std::string getVehicleClassCompoundName(int id)
render as a light rail
vehicle is a motorcycle
SumoXMLTag
Numbers representing SUMO-XML - element names.
render as a rail
std::string getVehicleEmissionTypeName(SUMOEmissionClass id)
Returns the class name of the emission class given by its id.
vehicle is a city rail
is a pedestrian
std::string next()
const SUMOReal DEFAULT_VEH_TMP5(1.)
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types...
const SUMOReal DEFAULT_VEH_TAU(1.)
render as a slow (passenger) train
const SUMOReal DEFAULT_VEH_SPEEDFACTOR(1.)
render as a motorcycle
StringBijection< SUMOEmissionClass > SumoEmissionClassStrings(SumoEmissionClassStringInitializer, SVE_Solo_LKW_D_EU6_II)
vehicle is a large transport vehicle
const SUMOReal DEFAULT_VEH_WIDTH(2.)
vehicle is a bicycle
int SVCPermissions
vehicle is a small delivery vehicle
render as a city bus
std::string getAllowedVehicleClassNames(SVCPermissions permissions)
Returns the ids of the given classes, divided using a ' '.
render as a fast (passenger) train
const LaneChangeModel DEFAULT_VEH_LANE_CHANGE_MODEL(LCM_LC2013)
render as a delivery vehicle
const SUMOReal DEFAULT_VEH_LENGTH(5.)
StringBijection< SUMOVehicleClass >::Entry sumoVehicleClassStringInitializer[]
StringBijection< SUMOVehicleShape >::Entry sumoVehicleShapeStringInitializer[]
render as a sedan passenger vehicle ("Stufenheck")
const SUMOVehicleClass DEFAULT_VEH_CLASS(SVC_UNKNOWN)
bool isRailway(SVCPermissions permissions)
Returns whether an edge with the given permission is a railway edge.
const SUMOReal DEFAULT_VEH_MINGAP(2.5)
vehicle is a HOV
#define WRITE_WARNING(msg)
Definition: MsgHandler.h:196
std::string getVehicleShapeName(SUMOVehicleShape id)
Returns the class name of the shape class given by its id.
render as a semi-trailer transport vehicle ("Sattelschlepper")
is a user-defined type
SUMOEmissionClass
Definition of vehicle emission classes.
const SUMOReal DEFAULT_VEH_DECEL(4.5)
LaneChangeModel
const SUMOVehicleShape DEFAULT_VEH_SHAPE(SVS_UNKNOWN)
const int SUMOVehicleClass_MAX
#define max(a, b)
Definition: polyfonts.c:61
const SUMOReal DEFAULT_VEH_PROB(1.)
StringBijection< SUMOVehicleClass > SumoVehicleClassStrings(sumoVehicleClassStringInitializer, SVC_CUSTOM2)
vehicle is a light rail
StringBijection< SUMOVehicleShape > SumoVehicleShapeStrings(sumoVehicleShapeStringInitializer, SVS_UNKNOWN)
render as a hatchback passenger vehicle ("Fliessheck")
StringBijection< SUMOEmissionClass >::Entry SumoEmissionClassStringInitializer[]
render as a bus
const SumoXMLTag DEFAULT_VEH_FOLLOW_MODEL(SUMO_TAG_CF_KRAUSS)
private vehicles
not defined
render as a bicycle
std::pair< std::string, bool > getPermissionEncoding(SVCPermissions permissions)
returns the shorter encoding of the given permissions (selects automatically wether to use allow or d...
army vehicles
const SUMOReal DEFAULT_VEH_ACCEL(2.6)
int getVehicleClassCompoundID(const std::string &name)
Returns the OR'ed id of the compound class given by its name.
const SUMOReal DEFAULT_VEH_TMP1(1.)
SVCPermissions parseVehicleClasses(const std::string &allowedS)
Parses the given definition of allowed vehicle classes into the given containers. ...
render as a van
render as a passenger vehicle
const SVCPermissions SVCFreeForAll
vehicle is a passenger car (a "normal" car)
bool canParseVehicleClasses(const std::string &classes)
Checks whether the given string contains only known vehicle classes.
render as a cargo train
render as a flexible city bus
authorities vehicles
vehicle is a taxi
vehicle is a bus
render as a giant ant
render as a pedestrian
public emergency vehicles
SUMOVehicleShape
Definition of vehicle classes to differ between different appearences.
const SUMOReal DEFAULT_PERSON_SPEED(5./3.6)
vip vehicles
const SUMOReal DEFAULT_VEH_TMP4(1.)
vehicle is a slow moving transport rail
render as a transport vehicle with one trailer
const SUMOReal DEFAULT_VEH_HEIGHT(1.5)
const SUMOReal DEFAULT_VEH_MAXSPEED(70.0)
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=OUTPUT_ACCURACY)
Definition: ToString.h:152
render as a (futuristic) e-vehicle
std::vector< std::string > getAllowedVehicleClassNamesList(SVCPermissions permissions)
Returns the ids of the given classes, divided using a ' '.
SUMOVehicleShape getVehicleShapeID(const std::string &name)
Returns the class id of the shape class given by its name.
#define SUMOReal
Definition: config.h:215
public transport vehicles
const SUMOReal DEFAULT_VEH_SPEEDDEV(0.)
render as a wagon passenger vehicle ("Combi")
render as a overland bus
const std::string DEFAULT_VTYPE_ID("DEFAULT_VEHTYPE")
vehicle is a fast moving rail
const SUMOReal DEFAULT_VEH_TMP2(1.)
vehicles ignoring classes
render as a city rail
const SUMOReal DEFAULT_VEH_SIGMA(0.5)
render as a trolley bus
render as a transport vehicle
is a user-defined type