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 SUMOXMLDefinitions.cpp
11 /// @author Daniel Krajzewicz
12 /// @author Jakob Erdmann
13 /// @author Clemens Honomichl
14 /// @author Piotr Woznica
15 /// @author Michael Behrisch
16 /// @author Walter Bamberger
17 /// @date Sept 2002
18 /// @version $Id$
19 ///
20 // Definitions of elements and attributes known by SUMO
21 /****************************************************************************/
22
23
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #include <config.h>
28
29 #include <cassert>
30 #include <utils/common/StringBijection.h>
31 #include <utils/common/StringTokenizer.h>
32
33 #include "SUMOXMLDefinitions.h"
34
35 // ===========================================================================
36 // definitions
37 // ===========================================================================
38
39 StringBijection<int>::Entry SUMOXMLDefinitions::tags[] = {
40 // Simulation elements
41 { "net", SUMO_TAG_NET },
42 { "edge", SUMO_TAG_EDGE },
43 { "lane", SUMO_TAG_LANE },
44 { "neigh", SUMO_TAG_NEIGH },
45 { "poi", SUMO_TAG_POI },
46 { "poiLane", SUMO_TAG_POILANE },
47 { "poly", SUMO_TAG_POLY },
48 { "junction", SUMO_TAG_JUNCTION },
49 { "restriction", SUMO_TAG_RESTRICTION },
50 { "e1Detector", SUMO_TAG_E1DETECTOR },
51 { "inductionLoop", SUMO_TAG_INDUCTION_LOOP },
52 { "e2Detector", SUMO_TAG_E2DETECTOR },
53 { "e2MultilaneDetector", SUMO_TAG_E2DETECTOR_MULTILANE },
54 { "laneAreaDetector", SUMO_TAG_LANE_AREA_DETECTOR },
55 { "e3Detector", SUMO_TAG_E3DETECTOR },
56 { "entryExitDetector", SUMO_TAG_ENTRY_EXIT_DETECTOR },
57 { "edgeData", SUMO_TAG_MEANDATA_EDGE },
58 { "laneData", SUMO_TAG_MEANDATA_LANE },
59 { "detEntry", SUMO_TAG_DET_ENTRY },
60 { "detExit", SUMO_TAG_DET_EXIT },
61 { "edgeFollowDetector", SUMO_TAG_EDGEFOLLOWDETECTOR },
62 { "instantInductionLoop", SUMO_TAG_INSTANT_INDUCTION_LOOP },
63 { "variableSpeedSign", SUMO_TAG_VSS },
64 { "calibrator", SUMO_TAG_CALIBRATOR },
65 { "laneCalibrator", SUMO_TAG_LANECALIBRATOR },
66 { "rerouter", SUMO_TAG_REROUTER },
67 { "busStop", SUMO_TAG_BUS_STOP },
68 { "trainStop", SUMO_TAG_TRAIN_STOP },
69 { "ptLine", SUMO_TAG_PT_LINE },
70 { "access", SUMO_TAG_ACCESS },
71 { "containerStop", SUMO_TAG_CONTAINER_STOP },
72 { "parkingArea", SUMO_TAG_PARKING_AREA },
73 { "space", SUMO_TAG_PARKING_SPACE },
74 { "chargingStation", SUMO_TAG_CHARGING_STATION },
75 { "vTypeProbe", SUMO_TAG_VTYPEPROBE },
76 { "routeProbe", SUMO_TAG_ROUTEPROBE },
77 { "routes", SUMO_TAG_ROUTES },
78 { "vehicle", SUMO_TAG_VEHICLE },
79 { "vType", SUMO_TAG_VTYPE },
80 { "route", SUMO_TAG_ROUTE },
81 { "request", SUMO_TAG_REQUEST },
82 { "source", SUMO_TAG_SOURCE },
83 { "taz", SUMO_TAG_TAZ },
84 { "tazSource", SUMO_TAG_TAZSOURCE },
85 { "tazSink", SUMO_TAG_TAZSINK },
86 { "trafficLight", SUMO_TAG_TRAFFIC_LIGHT },
87 { "tlLogic", SUMO_TAG_TLLOGIC },
88 { "phase", SUMO_TAG_PHASE },
89 { "trip", SUMO_TAG_TRIP },
90 { "tripTAZ", SUMO_TAG_TRIP_TAZ },
91 { "flow", SUMO_TAG_FLOW },
92 { "calibratorFlow", SUMO_TAG_CALIBRATORFLOW },
93 { "flowState", SUMO_TAG_FLOWSTATE },
94 { "step", SUMO_TAG_STEP },
95 { "interval", SUMO_TAG_INTERVAL },
96 { "timedEvent", SUMO_TAG_TIMEDEVENT },
97 { "fromEdge", SUMO_TAG_FROMEDGE },
98 { "toEdge", SUMO_TAG_TOEDGE },
99 { "sink", SUMO_TAG_SINK },
100 { "param", SUMO_TAG_PARAM },
101 { "WAUT", SUMO_TAG_WAUT },
102 { "wautSwitch", SUMO_TAG_WAUT_SWITCH },
103 { "wautJunction", SUMO_TAG_WAUT_JUNCTION },
104 { "segment", SUMO_TAG_SEGMENT },
105 { "delete", SUMO_TAG_DELETE },
106 { "stop", SUMO_TAG_STOP },
107 { "stopBusStop", SUMO_TAG_STOP_BUSSTOP },
108 { "stopContainerStop", SUMO_TAG_STOP_CONTAINERSTOP },
109 { "stopChargingStation", SUMO_TAG_STOP_CHARGINGSTATION },
110 { "stopParkingArea", SUMO_TAG_STOP_PARKINGAREA },
111 { "stopLane", SUMO_TAG_STOP_LANE },
112 { "destProbReroute", SUMO_TAG_DEST_PROB_REROUTE },
113 { "closingReroute", SUMO_TAG_CLOSING_REROUTE },
114 { "closingLaneReroute", SUMO_TAG_CLOSING_LANE_REROUTE },
115 { "routeProbReroute", SUMO_TAG_ROUTE_PROB_REROUTE },
116 { "parkingAreaReroute", SUMO_TAG_PARKING_ZONE_REROUTE },
117 { "polygonType", SUMO_TAG_POLYTYPE },
118 { "connection", SUMO_TAG_CONNECTION },
119 { "prohibition", SUMO_TAG_PROHIBITION },
120 { "split", SUMO_TAG_SPLIT },
121 { "node", SUMO_TAG_NODE },
122 { "type", SUMO_TAG_TYPE },
123 { "detectorDefinition", SUMO_TAG_DETECTOR_DEFINITION },
124 { "routeDistribution", SUMO_TAG_ROUTE_DISTRIBUTION },
125 { "vTypeDistribution", SUMO_TAG_VTYPE_DISTRIBUTION },
126 { "vaporizer", SUMO_TAG_VAPORIZER },
127 { "roundabout", SUMO_TAG_ROUNDABOUT },
128 { "join", SUMO_TAG_JOIN },
129 { "joinExclude", SUMO_TAG_JOINEXCLUDE },
130 { "crossing", SUMO_TAG_CROSSING },
131 { "walkingArea", SUMO_TAG_WALKINGAREA },
132 { "stopOffset", SUMO_TAG_STOPOFFSET },
133 // OSM
134 { "way", SUMO_TAG_WAY },
135 { "nd", SUMO_TAG_ND },
136 { "tag", SUMO_TAG_TAG },
137 { "relation", SUMO_TAG_RELATION },
138 { "member", SUMO_TAG_MEMBER },
139 // View
140 { "viewsettings", SUMO_TAG_VIEWSETTINGS },
141 { "decal", SUMO_TAG_VIEWSETTINGS_DECAL },
142 { "light", SUMO_TAG_VIEWSETTINGS_LIGHT },
143 { "scheme", SUMO_TAG_VIEWSETTINGS_SCHEME },
144 { "opengl", SUMO_TAG_VIEWSETTINGS_OPENGL },
145 { "background", SUMO_TAG_VIEWSETTINGS_BACKGROUND },
146 { "edges", SUMO_TAG_VIEWSETTINGS_EDGES },
147 { "vehicles", SUMO_TAG_VIEWSETTINGS_VEHICLES },
148 { "persons", SUMO_TAG_VIEWSETTINGS_PERSONS },
149 { "containers", SUMO_TAG_VIEWSETTINGS_CONTAINERS },
150 { "junctions", SUMO_TAG_VIEWSETTINGS_JUNCTIONS },
151 { "additionals", SUMO_TAG_VIEWSETTINGS_ADDITIONALS },
152 { "pois", SUMO_TAG_VIEWSETTINGS_POIS },
153 { "polys", SUMO_TAG_VIEWSETTINGS_POLYS },
154 { "legend", SUMO_TAG_VIEWSETTINGS_LEGEND },
155 { "event", SUMO_TAG_VIEWSETTINGS_EVENT },
156 { "jamTime", SUMO_TAG_VIEWSETTINGS_EVENT_JAM_TIME },
157 { "include", SUMO_TAG_INCLUDE },
158 { "delay", SUMO_TAG_DELAY },
159 { "viewport", SUMO_TAG_VIEWPORT },
160 { "snapshot", SUMO_TAG_SNAPSHOT },
161 { "breakpoints-file", SUMO_TAG_BREAKPOINTS_FILE },
162 { "breakpoint", SUMO_TAG_BREAKPOINT },
163 { "location", SUMO_TAG_LOCATION },
164 { "colorScheme", SUMO_TAG_COLORSCHEME },
165 { "scalingScheme", SUMO_TAG_SCALINGSCHEME },
166 { "entry", SUMO_TAG_ENTRY },
167 { "rngState", SUMO_TAG_RNGSTATE },
168 { "vehicleTransfer", SUMO_TAG_VEHICLETRANSFER },
169 { "device", SUMO_TAG_DEVICE },
170 // Cars
171 { "carFollowing-IDM", SUMO_TAG_CF_IDM },
172 { "carFollowing-IDMM", SUMO_TAG_CF_IDMM },
173 { "carFollowing-Krauss", SUMO_TAG_CF_KRAUSS },
174 { "carFollowing-KraussPS", SUMO_TAG_CF_KRAUSS_PLUS_SLOPE },
175 { "carFollowing-KraussOrig1", SUMO_TAG_CF_KRAUSS_ORIG1 },
176 { "carFollowing-KraussX", SUMO_TAG_CF_KRAUSSX },
177 { "carFollowing-SmartSK", SUMO_TAG_CF_SMART_SK },
178 { "carFollowing-Daniel1", SUMO_TAG_CF_DANIEL1 },
179 { "carFollowing-PWagner2009", SUMO_TAG_CF_PWAGNER2009 },
180 { "carFollowing-BKerner", SUMO_TAG_CF_BKERNER },
181 { "carFollowing-Wiedemann", SUMO_TAG_CF_WIEDEMANN },
182 { "carFollowing-Rail", SUMO_TAG_CF_RAIL },
183 { "carFollowing-ACC", SUMO_TAG_CF_ACC },
184 { "carFollowing-CACC", SUMO_TAG_CF_CACC },
185 { "carFollowing-CC", SUMO_TAG_CF_CC },
186 // Person
187 { "person", SUMO_TAG_PERSON },
188 { "personTrip", SUMO_TAG_PERSONTRIP },
189 { "ride", SUMO_TAG_RIDE },
190 { "walk", SUMO_TAG_WALK },
191 { "personFlow", SUMO_TAG_PERSONFLOW },
192 // Transport
193 { "container", SUMO_TAG_CONTAINER },
194 { "transport", SUMO_TAG_TRANSPORT },
195 { "tranship", SUMO_TAG_TRANSHIP },
196 //Trajectories
197 { "trajectories", SUMO_TAG_TRAJECTORIES },
198 { "timestep", SUMO_TAG_TIMESTEP },
199 { "timeSlice", SUMO_TAG_TIMESLICE },
200 { "actorConfig", SUMO_TAG_ACTORCONFIG },
201 { "motionState", SUMO_TAG_MOTIONSTATE },
202 { "odPair", SUMO_TAG_OD_PAIR },
203 // ActivityGen statistics file
204 { "general", AGEN_TAG_GENERAL },
205 { "street", AGEN_TAG_STREET },
206 { "workHours", AGEN_TAG_WORKHOURS },
207 { "opening", AGEN_TAG_OPENING },
208 { "closing", AGEN_TAG_CLOSING },
209 { "schools", AGEN_TAG_SCHOOLS },
210 { "school", AGEN_TAG_SCHOOL },
211 { "busStation", AGEN_TAG_BUSSTATION },
212 { "busLine", AGEN_TAG_BUSLINE },
213 { "stations", AGEN_TAG_STATIONS },
214 { "revStations", AGEN_TAG_REV_STATIONS },
215 { "station", AGEN_TAG_STATION },
216 { "frequency", AGEN_TAG_FREQUENCY },
217 { "population", AGEN_TAG_POPULATION },
218 { "bracket", AGEN_TAG_BRACKET },
219 { "cityGates", AGEN_TAG_CITYGATES },
220 { "entrance", AGEN_TAG_ENTRANCE },
221 { "parameters", AGEN_TAG_PARAM },
222 // Other
223 { "", SUMO_TAG_NOTHING } //< must be the last one
224 };
225
226
227 StringBijection<int>::Entry SUMOXMLDefinitions::attrs[] = {
228 // Edge
229 { "id", SUMO_ATTR_ID },
230 { "refId", SUMO_ATTR_REFID },
231 { "name", SUMO_ATTR_NAME },
232 { "type", SUMO_ATTR_TYPE },
233 { "priority", SUMO_ATTR_PRIORITY },
234 { "numLanes", SUMO_ATTR_NUMLANES },
235 { "speed", SUMO_ATTR_SPEED },
236 { "oneway", SUMO_ATTR_ONEWAY },
237 { "width", SUMO_ATTR_WIDTH },
238 { "sidewalkWidth", SUMO_ATTR_SIDEWALKWIDTH },
239 { "bikeLaneWidth", SUMO_ATTR_BIKELANEWIDTH },
240 { "remove", SUMO_ATTR_REMOVE },
241 { "length", SUMO_ATTR_LENGTH },
242 { "bidi", SUMO_ATTR_BIDI },
243 // Split
244 { "idBefore", SUMO_ATTR_ID_BEFORE },
245 { "idAfter", SUMO_ATTR_ID_AFTER },
246 // Positions
247 { "x", SUMO_ATTR_X },
248 { "y", SUMO_ATTR_Y },
249 { "z", SUMO_ATTR_Z },
250 { "centerX", SUMO_ATTR_CENTER_X },
251 { "centerY", SUMO_ATTR_CENTER_Y },
252 { "centerZ", SUMO_ATTR_CENTER_Z },
253
254 { "key", SUMO_ATTR_KEY },
255 { "requestSize", SUMO_ATTR_REQUESTSIZE },
256 { "request", SUMO_ATTR_REQUEST },
257 { "response", SUMO_ATTR_RESPONSE },
258 { "programID", SUMO_ATTR_PROGRAMID },
259 { "offset", SUMO_ATTR_OFFSET },
260 { "endOffset", SUMO_ATTR_ENDOFFSET },
261 { "incLanes", SUMO_ATTR_INCLANES },
262 { "intLanes", SUMO_ATTR_INTLANES },
263
264 { "weight", SUMO_ATTR_WEIGHT },
265 { "node", SUMO_ATTR_NODE },
266 { "edge", SUMO_ATTR_EDGE },
267 { "edges", SUMO_ATTR_EDGES },
268 // Vehicle
269 { "depart", SUMO_ATTR_DEPART },
270 { "departLane", SUMO_ATTR_DEPARTLANE },
271 { "departPos", SUMO_ATTR_DEPARTPOS },
272 { "departPosLat", SUMO_ATTR_DEPARTPOS_LAT },
273 { "departSpeed", SUMO_ATTR_DEPARTSPEED },
274 { "arrivalLane", SUMO_ATTR_ARRIVALLANE },
275 { "arrivalPos", SUMO_ATTR_ARRIVALPOS },
276 { "arrivalPosLat", SUMO_ATTR_ARRIVALPOS_LAT },
277 { "arrivalSpeed", SUMO_ATTR_ARRIVALSPEED },
278 { "route", SUMO_ATTR_ROUTE },
279 { "maxSpeed", SUMO_ATTR_MAXSPEED },
280 { "maxSpeedLat", SUMO_ATTR_MAXSPEED_LAT },
281 { "latAlignment", SUMO_ATTR_LATALIGNMENT },
282 { "minGapLat", SUMO_ATTR_MINGAP_LAT },
283 { "accel", SUMO_ATTR_ACCEL },
284 { "decel", SUMO_ATTR_DECEL },
285 { "emergencyDecel", SUMO_ATTR_EMERGENCYDECEL },
286 { "apparentDecel", SUMO_ATTR_APPARENTDECEL },
287 { "actionStepLength", SUMO_ATTR_ACTIONSTEPLENGTH },
288 { "hasDriverState", SUMO_ATTR_HASDRIVERSTATE },
289 { "vClass", SUMO_ATTR_VCLASS },
290 { "vClasses", SUMO_ATTR_VCLASSES },
291 { "exceptions", SUMO_ATTR_EXCEPTIONS },
292 { "repno", SUMO_ATTR_REPNUMBER },
293 { "speedFactor", SUMO_ATTR_SPEEDFACTOR },
294 { "speedDev", SUMO_ATTR_SPEEDDEV },
295 { "laneChangeModel", SUMO_ATTR_LANE_CHANGE_MODEL },
296 { "carFollowModel", SUMO_ATTR_CAR_FOLLOW_MODEL },
297 { "minGap", SUMO_ATTR_MINGAP },
298 { "collisionMinGapFactor", SUMO_ATTR_COLLISION_MINGAP_FACTOR },
299 { "boardingDuration", SUMO_ATTR_BOARDING_DURATION },
300 { "loadingDuration", SUMO_ATTR_LOADING_DURATION },
301 // Charging Station
302 { "power", SUMO_ATTR_CHARGINGPOWER },
303 { "efficiency", SUMO_ATTR_EFFICIENCY },
304 { "chargeInTransit", SUMO_ATTR_CHARGEINTRANSIT },
305 { "chargeDelay", SUMO_ATTR_CHARGEDELAY},
306 // MSDevice_Battery
307 { "actualBatteryCapacity", SUMO_ATTR_ACTUALBATTERYCAPACITY },
308 { "maximumBatteryCapacity", SUMO_ATTR_MAXIMUMBATTERYCAPACITY },
309 { "maximumPower", SUMO_ATTR_MAXIMUMPOWER },
310 { "vehicleMass", SUMO_ATTR_VEHICLEMASS },
311 { "frontSurfaceArea", SUMO_ATTR_FRONTSURFACEAREA },
312 { "airDragCoefficient", SUMO_ATTR_AIRDRAGCOEFFICIENT },
313 { "internalMomentOfInertia", SUMO_ATTR_INTERNALMOMENTOFINERTIA },
314 { "radialDragCoefficient", SUMO_ATTR_RADIALDRAGCOEFFICIENT },
315 { "rollDragCoefficient", SUMO_ATTR_ROLLDRAGCOEFFICIENT },
316 { "constantPowerIntake", SUMO_ATTR_CONSTANTPOWERINTAKE },
317 { "propulsionEfficiency", SUMO_ATTR_PROPULSIONEFFICIENCY },
318 { "recuperationEfficiency", SUMO_ATTR_RECUPERATIONEFFICIENCY },
319 { "stoppingTreshold", SUMO_ATTR_STOPPINGTRESHOLD },
320 // MSBatteryExport
321 { "energyConsumed", SUMO_ATTR_ENERGYCONSUMED },
322 { "chargingStationId", SUMO_ATTR_CHARGINGSTATIONID },
323 { "energyCharged", SUMO_ATTR_ENERGYCHARGED },
324 { "energyChargedInTransit", SUMO_ATTR_ENERGYCHARGEDINTRANSIT },
325 { "energyChargedStopped", SUMO_ATTR_ENERGYCHARGEDSTOPPED },
326 { "posOnLane", SUMO_ATTR_POSONLANE },
327 { "timeStopped", SUMO_ATTR_TIMESTOPPED },
328 // ChargingStation output
329 { "chargingStatus", SUMO_ATTR_CHARGING_STATUS },
330 { "totalEnergyCharged", SUMO_ATTR_TOTALENERGYCHARGED },
331 { "chargingSteps", SUMO_ATTR_CHARGINGSTEPS },
332 { "totalEnergyChargedIntoVehicle", SUMO_ATTR_TOTALENERGYCHARGED_VEHICLE },
333 { "chargingBegin", SUMO_ATTR_CHARGINGBEGIN },
334 { "chargingEnd", SUMO_ATTR_CHARGINGEND },
335 { "partialCharge", SUMO_ATTR_PARTIALCHARGE },
336
337 { "sigma", SUMO_ATTR_SIGMA },
338 { "tau", SUMO_ATTR_TAU },
339 { "tmp1", SUMO_ATTR_TMP1 },
340 { "tmp2", SUMO_ATTR_TMP2 },
341 { "tmp3", SUMO_ATTR_TMP3 },
342 { "tmp4", SUMO_ATTR_TMP4 },
343 { "tmp5", SUMO_ATTR_TMP5 },
344
345 { "speedControlGain", SUMO_ATTR_SC_GAIN },
346 { "gapClosingControlGainSpeed", SUMO_ATTR_GCC_GAIN_SPEED },
347 { "gapClosingControlGainSpace", SUMO_ATTR_GCC_GAIN_SPACE },
348 { "gapControlGainSpeed", SUMO_ATTR_GC_GAIN_SPEED },
349 { "gapControlGainSpace", SUMO_ATTR_GC_GAIN_SPACE },
350 { "collisionAvoidanceGainSpeed", SUMO_ATTR_CA_GAIN_SPEED },
351 { "collisionAvoidanceGainSpace", SUMO_ATTR_CA_GAIN_SPACE },
352
353 { "speedControlGainCACC", SUMO_ATTR_SC_GAIN_CACC },
354 { "gapClosingControlGainGap", SUMO_ATTR_GCC_GAIN_GAP_CACC },
355 { "gapClosingControlGainGapDot", SUMO_ATTR_GCC_GAIN_GAP_DOT_CACC },
356 { "gapControlGainGap", SUMO_ATTR_GC_GAIN_GAP_CACC },
357 { "gapControlGainGapDot", SUMO_ATTR_GC_GAIN_GAP_DOT_CACC },
358 { "collisionAvoidanceGainGap", SUMO_ATTR_CA_GAIN_GAP_CACC },
359 { "collisionAvoidanceGainGapDot", SUMO_ATTR_CA_GAIN_GAP_DOT_CACC },
360
361 { "trainType", SUMO_ATTR_TRAIN_TYPE },
362
363 { "lcStrategic", SUMO_ATTR_LCA_STRATEGIC_PARAM },
364 { "lcCooperative", SUMO_ATTR_LCA_COOPERATIVE_PARAM },
365 { "lcSpeedGain", SUMO_ATTR_LCA_SPEEDGAIN_PARAM },
366 { "lcKeepRight", SUMO_ATTR_LCA_KEEPRIGHT_PARAM },
367 { "lcSublane", SUMO_ATTR_LCA_SUBLANE_PARAM },
368 { "lcOpposite", SUMO_ATTR_LCA_OPPOSITE_PARAM },
369 { "lcPushy", SUMO_ATTR_LCA_PUSHY },
370 { "lcPushyGap", SUMO_ATTR_LCA_PUSHYGAP },
371 { "lcAssertive", SUMO_ATTR_LCA_ASSERTIVE },
372 { "lcImpatience", SUMO_ATTR_LCA_IMPATIENCE },
373 { "lcTimeToImpatience", SUMO_ATTR_LCA_TIME_TO_IMPATIENCE },
374 { "lcAccelLat", SUMO_ATTR_LCA_ACCEL_LAT },
375 { "lcTurnAlignmentDistance", SUMO_ATTR_LCA_TURN_ALIGNMENT_DISTANCE },
376 { "lcLookaheadLeft", SUMO_ATTR_LCA_LOOKAHEADLEFT },
377 { "lcSpeedGainRight", SUMO_ATTR_LCA_SPEEDGAINRIGHT },
378 { "lcMaxSpeedLatStanding", SUMO_ATTR_LCA_MAXSPEEDLATSTANDING },
379 { "lcMaxSpeedLatFactor", SUMO_ATTR_LCA_MAXSPEEDLATFACTOR },
380 { "lcExperimental1", SUMO_ATTR_LCA_EXPERIMENTAL1 },
381
382 { "jmCrossingGap", SUMO_ATTR_JM_CROSSING_GAP },
383 { "jmDriveAfterRedTime", SUMO_ATTR_JM_DRIVE_AFTER_RED_TIME },
384 { "jmDriveRedSpeed", SUMO_ATTR_JM_DRIVE_RED_SPEED },
385 { "jmIgnoreKeepClearTime", SUMO_ATTR_JM_IGNORE_KEEPCLEAR_TIME },
386 { "jmIgnoreFoeSpeed", SUMO_ATTR_JM_IGNORE_FOE_SPEED },
387 { "jmIgnoreFoeProb", SUMO_ATTR_JM_IGNORE_FOE_PROB },
388 { "jmSigmaMinor", SUMO_ATTR_JM_SIGMA_MINOR },
389 { "jmTimegapMinor", SUMO_ATTR_JM_TIMEGAP_MINOR },
390
391 { "last", SUMO_ATTR_LAST },
392 { "cost", SUMO_ATTR_COST },
393 { "savings", SUMO_ATTR_SAVINGS },
394 { "probability", SUMO_ATTR_PROB },
395 { "probabilities", SUMO_ATTR_PROBS },
396 { "routes", SUMO_ATTR_ROUTES },
397 { "vTypes", SUMO_ATTR_VTYPES },
398
399 { "lane", SUMO_ATTR_LANE },
400 { "lanes", SUMO_ATTR_LANES },
401 { "from", SUMO_ATTR_FROM },
402 { "to", SUMO_ATTR_TO },
403 { "fromLonLat", SUMO_ATTR_FROMLONLAT },
404 { "toLonLat", SUMO_ATTR_TOLONLAT },
405 { "fromXY", SUMO_ATTR_FROMXY },
406 { "toXY", SUMO_ATTR_TOXY },
407 { "period", SUMO_ATTR_PERIOD },
408 { "fromTaz", SUMO_ATTR_FROM_TAZ },
409 { "toTaz", SUMO_ATTR_TO_TAZ },
410 { "reroute", SUMO_ATTR_REROUTE },
411 { "personCapacity", SUMO_ATTR_PERSON_CAPACITY },
412 { "containerCapacity", SUMO_ATTR_CONTAINER_CAPACITY },
413 { "personNumber", SUMO_ATTR_PERSON_NUMBER },
414 { "containerNumber", SUMO_ATTR_CONTAINER_NUMBER },
415 { "modes", SUMO_ATTR_MODES },
416 { "walkFactor", SUMO_ATTR_WALKFACTOR },
417
418 { "function", SUMO_ATTR_FUNCTION },
419 { "pos", SUMO_ATTR_POSITION },
420 { "posLat", SUMO_ATTR_POSITION_LAT },
421 { "freq", SUMO_ATTR_FREQUENCY },
422 { "style", SUMO_ATTR_STYLE },
423 { "file", SUMO_ATTR_FILE },
424 { "junction", SUMO_ATTR_JUNCTION },
425 { "number", SUMO_ATTR_NUMBER },
426 { "duration", SUMO_ATTR_DURATION },
427 { "until", SUMO_ATTR_UNTIL },
428 { "routeProbe", SUMO_ATTR_ROUTEPROBE },
429 { "crossingEdges", SUMO_ATTR_CROSSING_EDGES },
430 // Traffic light & Nodes
431 { "time", SUMO_ATTR_TIME },
432 { "begin", SUMO_ATTR_BEGIN },
433 { "end", SUMO_ATTR_END },
434 { "tl", SUMO_ATTR_TLID },
435 { "tlType", SUMO_ATTR_TLTYPE },
436 { "linkIndex", SUMO_ATTR_TLLINKINDEX },
437 { "linkIndex2", SUMO_ATTR_TLLINKINDEX2 },
438 { "shape", SUMO_ATTR_SHAPE },
439 { "spreadType", SUMO_ATTR_SPREADTYPE },
440 { "radius", SUMO_ATTR_RADIUS },
441 { "customShape", SUMO_ATTR_CUSTOMSHAPE },
442 { "keepClear", SUMO_ATTR_KEEP_CLEAR },
443 { "rightOfWay", SUMO_ATTR_RIGHT_OF_WAY },
444 { "fringe", SUMO_ATTR_FRINGE },
445 { "color", SUMO_ATTR_COLOR },
446 { "dir", SUMO_ATTR_DIR },
447 { "state", SUMO_ATTR_STATE },
448 { "layer", SUMO_ATTR_LAYER },
449 { "fill", SUMO_ATTR_FILL },
450 { "lineWidth", SUMO_ATTR_LINEWIDTH },
451 { "prefix", SUMO_ATTR_PREFIX },
452 { "discard", SUMO_ATTR_DISCARD },
453
454 { "fromLane", SUMO_ATTR_FROM_LANE },
455 { "toLane", SUMO_ATTR_TO_LANE },
456 { "dest", SUMO_ATTR_DEST },
457 { "source", SUMO_ATTR_SOURCE },
458 { "via", SUMO_ATTR_VIA },
459 { "viaLonLat", SUMO_ATTR_VIALONLAT },
460 { "viaXY", SUMO_ATTR_VIAXY },
461 { "nodes", SUMO_ATTR_NODES },
462 { "visibility", SUMO_ATTR_VISIBILITY_DISTANCE },
463
464 { "minDur", SUMO_ATTR_MINDURATION },
465 { "maxDur", SUMO_ATTR_MAXDURATION },
466 { "next", SUMO_ATTR_NEXT },
467 { "foes", SUMO_ATTR_FOES },
468 // E2 detector
469 { "cont", SUMO_ATTR_CONT },
470 { "contPos", SUMO_ATTR_CONTPOS },
471 { "timeThreshold", SUMO_ATTR_HALTING_TIME_THRESHOLD },
472 { "speedThreshold", SUMO_ATTR_HALTING_SPEED_THRESHOLD },
473 { "jamThreshold", SUMO_ATTR_JAM_DIST_THRESHOLD },
474 { "show", SUMO_ATTR_SHOW_DETECTOR },
475 // E3 detector
476 { "openEntry", SUMO_ATTR_OPEN_ENTRY },
477
478 { "wautID", SUMO_ATTR_WAUT_ID },
479 { "junctionID", SUMO_ATTR_JUNCTION_ID },
480 { "procedure", SUMO_ATTR_PROCEDURE },
481 { "synchron", SUMO_ATTR_SYNCHRON },
482 { "refTime", SUMO_ATTR_REF_TIME },
483 { "startProg", SUMO_ATTR_START_PROG },
484 { "off", SUMO_ATTR_OFF },
485 { "friendlyPos", SUMO_ATTR_FRIENDLY_POS },
486 { "splitByType", SUMO_ATTR_SPLIT_VTYPE },
487 { "uncontrolled", SUMO_ATTR_UNCONTROLLED },
488 { "pass", SUMO_ATTR_PASS },
489 { "busStop", SUMO_ATTR_BUS_STOP },
490 { "containerStop", SUMO_ATTR_CONTAINER_STOP },
491 { "parkingArea", SUMO_ATTR_PARKING_AREA },
492 { "roadsideCapacity", SUMO_ATTR_ROADSIDE_CAPACITY },
493 { "onRoad", SUMO_ATTR_ONROAD },
494 { "chargingStation", SUMO_ATTR_CHARGING_STATION},
495 { "line", SUMO_ATTR_LINE },
496 { "lines", SUMO_ATTR_LINES },
497 { "tripId", SUMO_ATTR_TRIP_ID },
498 { "intended", SUMO_ATTR_INTENDED },
499 { "value", SUMO_ATTR_VALUE },
500 { "prohibitor", SUMO_ATTR_PROHIBITOR },
501 { "prohibited", SUMO_ATTR_PROHIBITED },
502 { "allow", SUMO_ATTR_ALLOW },
503 { "disallow", SUMO_ATTR_DISALLOW },
504 { "prefer", SUMO_ATTR_PREFER },
505 { "controlledInner", SUMO_ATTR_CONTROLLED_INNER },
506 { "vehsPerHour", SUMO_ATTR_VEHSPERHOUR },
507 { "personsPerHour", SUMO_ATTR_PERSONSPERHOUR },
508 { "output", SUMO_ATTR_OUTPUT },
509 { "height", SUMO_ATTR_HEIGHT },
510 { "guiShape", SUMO_ATTR_GUISHAPE },
511 { "osgFile", SUMO_ATTR_OSGFILE },
512 { "imgFile", SUMO_ATTR_IMGFILE },
513 { "relativePath", SUMO_ATTR_RELATIVEPATH },
514 { "angle", SUMO_ATTR_ANGLE },
515 { "emissionClass", SUMO_ATTR_EMISSIONCLASS },
516 { "impatience", SUMO_ATTR_IMPATIENCE },
517 { "startPos", SUMO_ATTR_STARTPOS },
518 { "endPos", SUMO_ATTR_ENDPOS },
519 { "triggered", SUMO_ATTR_TRIGGERED },
520 { "containerTriggered", SUMO_ATTR_CONTAINER_TRIGGERED },
521 { "parking", SUMO_ATTR_PARKING },
522 { "expected", SUMO_ATTR_EXPECTED },
523 { "expectedContainers", SUMO_ATTR_EXPECTED_CONTAINERS },
524 { "index", SUMO_ATTR_INDEX },
525
526 { "entering", SUMO_ATTR_ENTERING },
527 { "excludeEmpty", SUMO_ATTR_EXCLUDE_EMPTY },
528 { "withInternal", SUMO_ATTR_WITH_INTERNAL },
529 { "trackVehicles", SUMO_ATTR_TRACK_VEHICLES },
530 { "detectPersons", SUMO_ATTR_DETECT_PERSONS },
531 { "maxTraveltime", SUMO_ATTR_MAX_TRAVELTIME },
532 { "minSamples", SUMO_ATTR_MIN_SAMPLES },
533
534 { "lon", SUMO_ATTR_LON },
535 { "lat", SUMO_ATTR_LAT },
536 { "geo", SUMO_ATTR_GEO },
537 { "geoShape", SUMO_ATTR_GEOSHAPE },
538 { "lon/lat", SUMO_ATTR_GEOPOSITION },
539 { "k", SUMO_ATTR_K },
540 { "v", SUMO_ATTR_V },
541 { "ref", SUMO_ATTR_REF },
542 { "href", SUMO_ATTR_HREF },
543 { "zoom", SUMO_ATTR_ZOOM },
544 { "interpolated", SUMO_ATTR_INTERPOLATED },
545 { "threshold", SUMO_ATTR_THRESHOLD },
546
547 { "netOffset", SUMO_ATTR_NET_OFFSET },
548 { "convBoundary", SUMO_ATTR_CONV_BOUNDARY },
549 { "origBoundary", SUMO_ATTR_ORIG_BOUNDARY },
550 { "projParameter", SUMO_ATTR_ORIG_PROJ },
551
552 { "tauLast", SUMO_ATTR_CF_PWAGNER2009_TAULAST },
553 { "apProb", SUMO_ATTR_CF_PWAGNER2009_APPROB },
554 { "delta", SUMO_ATTR_CF_IDM_DELTA },
555 { "stepping", SUMO_ATTR_CF_IDM_STEPPING },
556 { "adaptFactor", SUMO_ATTR_CF_IDMM_ADAPT_FACTOR },
557 { "adaptTime", SUMO_ATTR_CF_IDMM_ADAPT_TIME },
558 { "phi", SUMO_ATTR_CF_KERNER_PHI },
559
560 { "security", SUMO_ATTR_CF_WIEDEMANN_SECURITY },
561 { "estimation", SUMO_ATTR_CF_WIEDEMANN_ESTIMATION },
562
563 { "ccDecel", SUMO_ATTR_CF_CC_CCDECEL },
564 { "constSpacing", SUMO_ATTR_CF_CC_CONSTSPACING },
565 { "kp", SUMO_ATTR_CF_CC_KP },
566 { "lambda", SUMO_ATTR_CF_CC_LAMBDA },
567 { "c1", SUMO_ATTR_CF_CC_C1 },
568 { "xi", SUMO_ATTR_CF_CC_XI },
569 { "omegaN", SUMO_ATTR_CF_CC_OMEGAN },
570 { "tauEngine", SUMO_ATTR_CF_CC_TAU },
571 { "lanesCount", SUMO_ATTR_CF_CC_LANES_COUNT },
572 { "ccAccel", SUMO_ATTR_CF_CC_CCACCEL },
573 { "ploegKp", SUMO_ATTR_CF_CC_PLOEG_KP },
574 { "ploegKd", SUMO_ATTR_CF_CC_PLOEG_KD },
575 { "ploegH", SUMO_ATTR_CF_CC_PLOEG_H },
576 { "flatbedKa", SUMO_ATTR_CF_CC_FLATBED_KA },
577 { "flatbedKv", SUMO_ATTR_CF_CC_FLATBED_KV },
578 { "flatbedKp", SUMO_ATTR_CF_CC_FLATBED_KP },
579 { "flatbedD", SUMO_ATTR_CF_CC_FLATBED_D },
580 { "flatbedH", SUMO_ATTR_CF_CC_FLATBED_H },
581
582 { "generateWalks", SUMO_ATTR_GENERATE_WALKS },
583 { "actType", SUMO_ATTR_ACTTYPE },
584 { "slope", SUMO_ATTR_SLOPE },
585 { "version", SUMO_ATTR_VERSION },
586 { "junctionCornerDetail", SUMO_ATTR_CORNERDETAIL },
587 { "junctionLinkDetail", SUMO_ATTR_LINKDETAIL },
588 { "rectangularLaneCut", SUMO_ATTR_RECTANGULAR_LANE_CUT },
589 { "walkingareas", SUMO_ATTR_WALKINGAREAS },
590 { "lefthand", SUMO_ATTR_LEFTHAND },
591 { "limitTurnSpeed", SUMO_ATTR_LIMIT_TURN_SPEED },
592 { "checkLaneFoesAll", SUMO_ATTR_CHECKLANEFOES_ALL },
593 { "checkLaneFoesRoundabout", SUMO_ATTR_CHECKLANEFOES_ROUNDABOUT },
594
595 { "actorConfig", SUMO_ATTR_ACTORCONFIG },
596 { "vehicle", SUMO_ATTR_VEHICLE },
597 { "startTime", SUMO_ATTR_STARTTIME },
598 { "vehicleClass", SUMO_ATTR_VEHICLECLASS },
599 { "fuel", SUMO_ATTR_FUEL },
600 { "acceleration", SUMO_ATTR_ACCELERATION },
601 { "amount", SUMO_ATTR_AMOUNT },
602 { "origin", SUMO_ATTR_ORIGIN },
603 { "destination", SUMO_ATTR_DESTINATION },
604 { "visible", SUMO_ATTR_VISIBLE },
605
606 #ifndef WIN32
607 { "commandPosix", SUMO_ATTR_COMMAND },
608 #else
609 { "commandWindows", SUMO_ATTR_COMMAND },
610 #endif
611
612 // ActivityGen statistics file
613 { "inhabitants", AGEN_ATTR_INHABITANTS },
614 { "households", AGEN_ATTR_HOUSEHOLDS },
615 { "childrenAgeLimit", AGEN_ATTR_CHILDREN },
616 { "retirementAgeLimit", AGEN_ATTR_RETIREMENT },
617 { "carRate", AGEN_ATTR_CARS },
618 { "unemploymentRate", AGEN_ATTR_UNEMPLOYEMENT },
619 { "laborDemand", AGEN_ATTR_LABORDEMAND },
620 { "footDistanceLimit", AGEN_ATTR_MAX_FOOT_DIST },
621 { "incomingTraffic", AGEN_ATTR_IN_TRAFFIC },
622 { "incoming", AGEN_ATTR_INCOMING },
623 { "outgoingTraffic", AGEN_ATTR_OUT_TRAFFIC },
624 { "outgoing", AGEN_ATTR_OUTGOING },
625 { "population", AGEN_ATTR_POPULATION },
626 { "workPosition", AGEN_ATTR_OUT_WORKPOSITION },
627 { "hour", AGEN_ATTR_HOUR },
628 { "proportion", AGEN_ATTR_PROP },
629 { "capacity", AGEN_ATTR_CAPACITY },
630 { "opening", AGEN_ATTR_OPENING },
631 { "closing", AGEN_ATTR_CLOSING },
632 { "maxTripDuration", AGEN_ATTR_MAX_TRIP_DURATION },
633 { "rate", AGEN_ATTR_RATE },
634 { "beginAge", AGEN_ATTR_BEGINAGE },
635 { "endAge", AGEN_ATTR_ENDAGE },
636 { "peopleNbr", AGEN_ATTR_PEOPLENBR },
637 { "carPreference", AGEN_ATTR_CARPREF },
638 { "meanTimePerKmInCity", AGEN_ATTR_CITYSPEED },
639 { "freeTimeActivityRate", AGEN_ATTR_FREETIMERATE },
640 { "uniformRandomTraffic", AGEN_ATTR_UNI_RAND_TRAFFIC },
641 { "departureVariation", AGEN_ATTR_DEP_VARIATION },
642
643 // netEdit
644 { "selected", GNE_ATTR_SELECTED },
645 { "modificationStatusNotForPrinting", GNE_ATTR_MODIFICATION_STATUS },
646 { "shapeStart", GNE_ATTR_SHAPE_START },
647 { "shapeEnd", GNE_ATTR_SHAPE_END },
648 { "bidiRail", GNE_ATTR_BIDIR },
649 { "blockMovement", GNE_ATTR_BLOCK_MOVEMENT },
650 { "blockShape", GNE_ATTR_BLOCK_SHAPE },
651 { "closedShape", GNE_ATTR_CLOSE_SHAPE },
652 { "parentItem", GNE_ATTR_PARENT },
653 { "genericParameter", GNE_ATTR_GENERIC },
654 { "defaultVTypeModified", GNE_ATTR_DEFAULT_VTYPE_MODIFIED },
655
656 { "targetLanes", SUMO_ATTR_TARGETLANE },
657 { "crossing", SUMO_ATTR_CROSSING },
658
659 { "xmlns:xsi", SUMO_ATTR_XMLNS },
660 { "xsi:noNamespaceSchemaLocation", SUMO_ATTR_SCHEMA_LOCATION },
661
662 //@name RNG state saving attributes
663 // @{
664 { "default", SUMO_ATTR_RNG_DEFAULT },
665 { "routeHandler", SUMO_ATTR_RNG_ROUTEHANDLER },
666 { "insertionControl", SUMO_ATTR_RNG_INSERTIONCONTROL },
667 { "device", SUMO_ATTR_RNG_DEVICE },
668 { "device.btreceiver", SUMO_ATTR_RNG_DEVICE_BT },
669 { "driverState", SUMO_ATTR_RNG_DRIVERSTATE },
670 // @}
671
672 // Other
673 { "", SUMO_ATTR_NOTHING } //< must be the last one
674 };
675
676
677 const std::string SUMO_PARAM_ORIGID("origId");
678
679
680 StringBijection<SumoXMLNodeType>::Entry SUMOXMLDefinitions::sumoNodeTypeValues[] = {
681 {"traffic_light", NODETYPE_TRAFFIC_LIGHT},
682 {"traffic_light_unregulated", NODETYPE_TRAFFIC_LIGHT_NOJUNCTION},
683 {"traffic_light_right_on_red", NODETYPE_TRAFFIC_LIGHT_RIGHT_ON_RED},
684 {"rail_signal", NODETYPE_RAIL_SIGNAL},
685 {"rail_crossing", NODETYPE_RAIL_CROSSING},
686 {"priority", NODETYPE_PRIORITY},
687 {"priority_stop", NODETYPE_PRIORITY_STOP},
688 {"right_before_left", NODETYPE_RIGHT_BEFORE_LEFT},
689 {"allway_stop", NODETYPE_ALLWAY_STOP},
690 {"zipper", NODETYPE_ZIPPER},
691 {"district", NODETYPE_DISTRICT},
692 {"unregulated", NODETYPE_NOJUNCTION},
693 {"internal", NODETYPE_INTERNAL},
694 {"dead_end", NODETYPE_DEAD_END},
695 {"DEAD_END", NODETYPE_DEAD_END_DEPRECATED},
696 {"unknown", NODETYPE_UNKNOWN} //< must be the last one
697 };
698
699
700 StringBijection<SumoXMLEdgeFunc>::Entry SUMOXMLDefinitions::sumoEdgeFuncValues[] = {
701 {"unknown", EDGEFUNC_UNKNOWN},
702 {"normal", EDGEFUNC_NORMAL},
703 {"connector", EDGEFUNC_CONNECTOR},
704 {"crossing", EDGEFUNC_CROSSING},
705 {"walkingarea", EDGEFUNC_WALKINGAREA},
706 {"internal", EDGEFUNC_INTERNAL} //< must be the last one
707 };
708
709
710 StringBijection<LaneSpreadFunction>::Entry SUMOXMLDefinitions::laneSpreadFunctionValues[] = {
711 {"right", LANESPREAD_RIGHT }, // default
712 {"center", LANESPREAD_CENTER } //< must be the last one
713 };
714
715 StringBijection<RightOfWay>::Entry SUMOXMLDefinitions::rightOfWayValuesInitializer[] = {
716 {"edgePriority", RIGHT_OF_WAY_EDGEPRIORITY },
717 {"default", RIGHT_OF_WAY_DEFAULT } // default (must be the last one)
718 };
719
720 StringBijection<FringeType>::Entry SUMOXMLDefinitions::fringeTypeValuesInitializer[] = {
721 {"outer", FRINGE_TYPE_OUTER },
722 {"inner", FRINGE_TYPE_INNER },
723 {"default", FRINGE_TYPE_DEFAULT } // default (must be the last one)
724 };
725
726 StringBijection<PersonMode>::Entry SUMOXMLDefinitions::personModeValuesInitializer[] = {
727 {"none", PERSONMODE_NONE},
728 {"walk", PERSONMODE_WALK},
729 {"bicycle", PERSONMODE_BICYCLE },
730 {"car", PERSONMODE_CAR },
731 {"public", PERSONMODE_PUBLIC} // (must be the last one)
732 };
733
734 StringBijection<LinkState>::Entry SUMOXMLDefinitions::linkStateValues[] = {
735 { "G", LINKSTATE_TL_GREEN_MAJOR },
736 { "g", LINKSTATE_TL_GREEN_MINOR },
737 { "r", LINKSTATE_TL_RED },
738 { "u", LINKSTATE_TL_REDYELLOW },
739 { "Y", LINKSTATE_TL_YELLOW_MAJOR },
740 { "y", LINKSTATE_TL_YELLOW_MINOR },
741 { "o", LINKSTATE_TL_OFF_BLINKING },
742 { "O", LINKSTATE_TL_OFF_NOSIGNAL },
743 { "M", LINKSTATE_MAJOR },
744 { "m", LINKSTATE_MINOR },
745 { "=", LINKSTATE_EQUAL },
746 { "s", LINKSTATE_STOP },
747 { "w", LINKSTATE_ALLWAY_STOP },
748 { "Z", LINKSTATE_ZIPPER },
749 { "-", LINKSTATE_DEADEND } //< must be the last one
750 };
751
752 const char SUMOXMLDefinitions::AllowedTLS_linkStatesInitializer[] = {
753 LINKSTATE_TL_GREEN_MAJOR,
754 LINKSTATE_TL_GREEN_MINOR,
755 LINKSTATE_STOP, // used for NODETYPE_TRAFFIC_LIGHT_RIGHT_ON_RED
756 LINKSTATE_TL_RED,
757 LINKSTATE_TL_REDYELLOW,
758 LINKSTATE_TL_YELLOW_MAJOR,
759 LINKSTATE_TL_YELLOW_MINOR,
760 LINKSTATE_TL_OFF_BLINKING,
761 LINKSTATE_TL_OFF_NOSIGNAL
762 };
763 const std::string SUMOXMLDefinitions::ALLOWED_TLS_LINKSTATES(AllowedTLS_linkStatesInitializer, 9);
764
765 StringBijection<LinkDirection>::Entry SUMOXMLDefinitions::linkDirectionValues[] = {
766 { "s", LINKDIR_STRAIGHT },
767 { "t", LINKDIR_TURN },
768 { "T", LINKDIR_TURN_LEFTHAND },
769 { "l", LINKDIR_LEFT },
770 { "r", LINKDIR_RIGHT },
771 { "L", LINKDIR_PARTLEFT },
772 { "R", LINKDIR_PARTRIGHT },
773 { "invalid", LINKDIR_NODIR } //< must be the last one
774 };
775
776
777 StringBijection<TrafficLightType>::Entry SUMOXMLDefinitions::trafficLightTypesValues[] = {
778 { "static", TLTYPE_STATIC },
779 { "railSignal", TLTYPE_RAIL_SIGNAL },
780 { "railCrossing", TLTYPE_RAIL_CROSSING },
781 { "actuated", TLTYPE_ACTUATED },
782 { "delay_based", TLTYPE_DELAYBASED },
783 { "sotl_phase", TLTYPE_SOTL_PHASE },
784 { "sotl_platoon", TLTYPE_SOTL_PLATOON },
785 { "sotl_request", TLTYPE_SOTL_REQUEST },
786 { "sotl_wave", TLTYPE_SOTL_WAVE },
787 { "sotl_marching", TLTYPE_SOTL_MARCHING },
788 { "swarm", TLTYPE_SWARM_BASED },
789 { "deterministic", TLTYPE_HILVL_DETERMINISTIC },
790 { "off", TLTYPE_OFF },
791 { "<invalid>", TLTYPE_INVALID } //< must be the last one
792 };
793
794
795 StringBijection<LaneChangeModel>::Entry SUMOXMLDefinitions::laneChangeModelValues[] = {
796 { "DK2008", LCM_DK2008 },
797 { "LC2013", LCM_LC2013 },
798 { "SL2015", LCM_SL2015 },
799 { "default", LCM_DEFAULT } //< must be the last one
800 };
801
802 StringBijection<SumoXMLTag>::Entry SUMOXMLDefinitions::carFollowModelValues[] = {
803 { "IDM", SUMO_TAG_CF_IDM },
804 { "IDMM", SUMO_TAG_CF_IDMM },
805 { "Krauss", SUMO_TAG_CF_KRAUSS },
806 { "KraussPS", SUMO_TAG_CF_KRAUSS_PLUS_SLOPE },
807 { "KraussOrig1", SUMO_TAG_CF_KRAUSS_ORIG1 },
808 { "KraussX", SUMO_TAG_CF_KRAUSSX }, // experimental extensions to the Krauss model
809 { "SmartSK", SUMO_TAG_CF_SMART_SK },
810 { "Daniel1", SUMO_TAG_CF_DANIEL1 },
811 { "PWagner2009", SUMO_TAG_CF_PWAGNER2009 },
812 { "BKerner", SUMO_TAG_CF_BKERNER },
813 { "Rail", SUMO_TAG_CF_RAIL },
814 { "CC", SUMO_TAG_CF_CC },
815 { "ACC", SUMO_TAG_CF_ACC },
816 { "CACC", SUMO_TAG_CF_CACC },
817 { "Wiedemann", SUMO_TAG_CF_WIEDEMANN } //< must be the last one
818 };
819
820 StringBijection<LateralAlignment>::Entry SUMOXMLDefinitions::lateralAlignmentValues[] = {
821 { "right", LATALIGN_RIGHT },
822 { "center", LATALIGN_CENTER },
823 { "arbitrary", LATALIGN_ARBITRARY },
824 { "nice", LATALIGN_NICE },
825 { "compact", LATALIGN_COMPACT },
826 { "left", LATALIGN_LEFT } //< must be the last one
827 };
828
829 StringBijection<LaneChangeAction>::Entry SUMOXMLDefinitions::laneChangeActionValues[] = {
830 { "stay", LCA_STAY },
831 { "left", LCA_LEFT },
832 { "right", LCA_RIGHT },
833 { "strategic", LCA_STRATEGIC },
834 { "cooperative", LCA_COOPERATIVE },
835 { "speedGain", LCA_SPEEDGAIN },
836 { "keepRight", LCA_KEEPRIGHT },
837 { "sublane", LCA_SUBLANE },
838 { "traci", LCA_TRACI },
839 { "urgent", LCA_URGENT },
840 { "overlapping", LCA_OVERLAPPING },
841 { "blocked", LCA_BLOCKED },
842 { "amBL", LCA_AMBLOCKINGLEADER },
843 { "amBF", LCA_AMBLOCKINGFOLLOWER },
844 { "amBB", LCA_AMBACKBLOCKER },
845 { "amBBS", LCA_AMBACKBLOCKER_STANDING },
846 { "MR", LCA_MRIGHT },
847 { "ML", LCA_MLEFT },
848
849 { "unknown", LCA_UNKNOWN } //< must be the last one
850 };
851
852 StringBijection<TrainType>::Entry SUMOXMLDefinitions::trainTypeValues[] = {
853 { "NGT400", TRAINTYPE_NGT400 },
854 { "NGT400_16", TRAINTYPE_NGT400_16 },
855 { "RB425", TRAINTYPE_RB425 },
856 { "RB628", TRAINTYPE_RB628 },
857 { "ICE1", TRAINTYPE_ICE1 },
858 { "REDosto7", TRAINTYPE_REDOSTO7 },
859 { "Freight", TRAINTYPE_FREIGHT },
860 { "ICE3", TRAINTYPE_ICE3 }
861 };
862
863
864 StringBijection<int> SUMOXMLDefinitions::Tags(
865 SUMOXMLDefinitions::tags, SUMO_TAG_NOTHING);
866
867 StringBijection<int> SUMOXMLDefinitions::Attrs(
868 SUMOXMLDefinitions::attrs, SUMO_ATTR_NOTHING);
869
870 StringBijection<SumoXMLNodeType> SUMOXMLDefinitions::NodeTypes(
871 SUMOXMLDefinitions::sumoNodeTypeValues, NODETYPE_UNKNOWN);
872
873 StringBijection<SumoXMLEdgeFunc> SUMOXMLDefinitions::EdgeFunctions(
874 SUMOXMLDefinitions::sumoEdgeFuncValues, EDGEFUNC_INTERNAL);
875
876 StringBijection<LaneSpreadFunction> SUMOXMLDefinitions::LaneSpreadFunctions(
877 SUMOXMLDefinitions::laneSpreadFunctionValues, LANESPREAD_CENTER);
878
879 StringBijection<RightOfWay> SUMOXMLDefinitions::RightOfWayValues(
880 SUMOXMLDefinitions::rightOfWayValuesInitializer, RIGHT_OF_WAY_DEFAULT);
881
882 StringBijection<FringeType> SUMOXMLDefinitions::FringeTypeValues(
883 SUMOXMLDefinitions::fringeTypeValuesInitializer, FRINGE_TYPE_DEFAULT);
884
885 StringBijection<PersonMode> SUMOXMLDefinitions::PersonModeValues(
886 SUMOXMLDefinitions::personModeValuesInitializer, PERSONMODE_PUBLIC);
887
888 StringBijection<LinkState> SUMOXMLDefinitions::LinkStates(
889 SUMOXMLDefinitions::linkStateValues, LINKSTATE_DEADEND);
890
891 StringBijection<LinkDirection> SUMOXMLDefinitions::LinkDirections(
892 SUMOXMLDefinitions::linkDirectionValues, LINKDIR_NODIR);
893
894 StringBijection<TrafficLightType> SUMOXMLDefinitions::TrafficLightTypes(
895 SUMOXMLDefinitions::trafficLightTypesValues, TLTYPE_INVALID);
896
897 StringBijection<LaneChangeModel> SUMOXMLDefinitions::LaneChangeModels(
898 SUMOXMLDefinitions::laneChangeModelValues, LCM_DEFAULT);
899
900 StringBijection<SumoXMLTag> SUMOXMLDefinitions::CarFollowModels(
901 SUMOXMLDefinitions::carFollowModelValues, SUMO_TAG_CF_WIEDEMANN);
902
903 StringBijection<LateralAlignment> SUMOXMLDefinitions::LateralAlignments(
904 SUMOXMLDefinitions::lateralAlignmentValues, LATALIGN_LEFT);
905
906 StringBijection<LaneChangeAction> SUMOXMLDefinitions::LaneChangeActions(
907 SUMOXMLDefinitions::laneChangeActionValues, LCA_UNKNOWN);
908
909 StringBijection<TrainType> SUMOXMLDefinitions::TrainTypes(
910 SUMOXMLDefinitions::trainTypeValues, TRAINTYPE_NGT400);
911
912
913 std::string
getJunctionIDFromInternalEdge(const std::string internalEdge)914 SUMOXMLDefinitions::getJunctionIDFromInternalEdge(const std::string internalEdge) {
915 assert(internalEdge[0] == ':');
916 return internalEdge.substr(1, internalEdge.rfind('_') - 1);
917 }
918
919
920 std::string
getEdgeIDFromLane(const std::string laneID)921 SUMOXMLDefinitions::getEdgeIDFromLane(const std::string laneID) {
922 return laneID.substr(0, laneID.rfind('_'));
923 }
924
925
926 bool
isValidNetID(const std::string & value)927 SUMOXMLDefinitions::isValidNetID(const std::string& value) {
928 return (value.size() > 0) && value.find_first_of(" \t\n\r|\\'\";,:!<>&*?") == std::string::npos;
929 }
930
931
932 bool
isValidVehicleID(const std::string & value)933 SUMOXMLDefinitions::isValidVehicleID(const std::string& value) {
934 return (value.size() > 0) && value.find_first_of(" \t\n\r|\\'\";,!<>&*?") == std::string::npos;
935 }
936
937
938 bool
isValidTypeID(const std::string & value)939 SUMOXMLDefinitions::isValidTypeID(const std::string& value) {
940 return (value.size() > 0) && value.find_first_of(" \t\n\r|\\'\";,<>&*?") == std::string::npos;
941 }
942
943
944 bool
isValidDetectorID(const std::string & value)945 SUMOXMLDefinitions::isValidDetectorID(const std::string& value) {
946 return (value.size() > 0) && value.find_first_of("\t\n\r|\\'\";,:!<>&*?") == std::string::npos;
947 }
948
949
950 bool
isValidAttribute(const std::string & value)951 SUMOXMLDefinitions::isValidAttribute(const std::string& value) {
952 return value.find_first_of("\t\n\r@$%^&/|\\{}*'\";:<>") == std::string::npos;
953 }
954
955
956 bool
isValidFilename(const std::string & value)957 SUMOXMLDefinitions::isValidFilename(const std::string& value) {
958 return (value.find_first_of("\t\n\r@$%^&|\\{}*'\";:<>") == std::string::npos);
959 }
960
961
962 bool
isValidListOfNetIDs(const std::string & value)963 SUMOXMLDefinitions::isValidListOfNetIDs(const std::string& value) {
964 const std::vector<std::string>& typeIDs = StringTokenizer(value).getVector();
965 if (typeIDs.empty()) {
966 return false;
967 } else {
968 // check that gives IDs are valid
969 for (auto i : typeIDs) {
970 if (!SUMOXMLDefinitions::isValidNetID(i)) {
971 return false;
972 }
973 }
974 return true;
975 }
976 }
977
978
979 bool
isValidListOfTypeID(const std::string & value)980 SUMOXMLDefinitions::isValidListOfTypeID(const std::string& value) {
981 const std::vector<std::string>& typeIDs = StringTokenizer(value).getVector();
982 if (typeIDs.empty()) {
983 return false;
984 } else {
985 // check that gives IDs are valid
986 for (auto i : typeIDs) {
987 if (!SUMOXMLDefinitions::isValidTypeID(i)) {
988 return false;
989 }
990 }
991 return true;
992 }
993 }
994
995
996 bool
isValidGenericParameterKey(const std::string & value)997 SUMOXMLDefinitions::isValidGenericParameterKey(const std::string& value) {
998 // Generic parameters keys cannot be empty
999 return (value.size() > 0);
1000 }
1001
1002
1003 bool
isValidGenericParameterValue(const std::string &)1004 SUMOXMLDefinitions::isValidGenericParameterValue(const std::string& /*value*/) {
1005 // Generic parameters should not be restricted (characters such as <>'" only
1006 // reach this function if they are properly escaped in the xml inputs (and
1007 // they are also escaped when writing)
1008 return true;
1009 }
1010
1011 /****************************************************************************/
1012
1013