LCOV - code coverage report
Current view: top level - src/utils/xml - SUMOXMLDefinitions.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 17 36 47.2 %
Date: 2024-05-05 15:31:14 Functions: 8 14 57.1 %

          Line data    Source code
       1             : /****************************************************************************/
       2             : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3             : // Copyright (C) 2002-2024 German Aerospace Center (DLR) and others.
       4             : // This program and the accompanying materials are made available under the
       5             : // terms of the Eclipse Public License 2.0 which is available at
       6             : // https://www.eclipse.org/legal/epl-2.0/
       7             : // This Source Code may also be made available under the following Secondary
       8             : // Licenses when the conditions for such availability set forth in the Eclipse
       9             : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10             : // or later which is available at
      11             : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12             : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13             : /****************************************************************************/
      14             : /// @file    SUMOXMLDefinitions.cpp
      15             : /// @author  Daniel Krajzewicz
      16             : /// @author  Jakob Erdmann
      17             : /// @author  Clemens Honomichl
      18             : /// @author  Piotr Woznica
      19             : /// @author  Michael Behrisch
      20             : /// @author  Walter Bamberger
      21             : /// @date    Sept 2002
      22             : ///
      23             : // Definitions of elements and attributes known by SUMO
      24             : /****************************************************************************/
      25             : #include <config.h>
      26             : 
      27             : #include <cassert>
      28             : #include <utils/common/StringBijection.h>
      29             : #include <utils/common/StringTokenizer.h>
      30             : #include <utils/common/StringUtils.h>
      31             : 
      32             : #include "SUMOXMLDefinitions.h"
      33             : 
      34             : // ===========================================================================
      35             : // definitions
      36             : // ===========================================================================
      37             : 
      38             : StringBijection<int>::Entry SUMOXMLDefinitions::tags[] = {
      39             :     // Simulation elements
      40             :     { "net",                                    SUMO_TAG_NET },
      41             :     { "edge",                                   SUMO_TAG_EDGE },
      42             :     { "lane",                                   SUMO_TAG_LANE },
      43             :     { "neigh",                                  SUMO_TAG_NEIGH },
      44             :     { "poly",                                   SUMO_TAG_POLY },
      45             :     { "poi",                                    SUMO_TAG_POI },
      46             :     { "junction",                               SUMO_TAG_JUNCTION },
      47             :     { "restriction",                            SUMO_TAG_RESTRICTION },
      48             :     { "meso",                                   SUMO_TAG_MESO },
      49             :     { "busStop",                                SUMO_TAG_BUS_STOP },
      50             :     { "trainStop",                              SUMO_TAG_TRAIN_STOP },
      51             :     { "ptLine",                                 SUMO_TAG_PT_LINE },
      52             :     { "access",                                 SUMO_TAG_ACCESS },
      53             :     { "containerStop",                          SUMO_TAG_CONTAINER_STOP },
      54             :     { "chargingStation",                        SUMO_TAG_CHARGING_STATION },
      55             :     { "parkingArea",                            SUMO_TAG_PARKING_AREA },
      56             :     { "space",                                  SUMO_TAG_PARKING_SPACE },
      57             :     { "e1Detector",                             SUMO_TAG_E1DETECTOR },
      58             :     { "inductionLoop",                          SUMO_TAG_INDUCTION_LOOP },
      59             :     { "e2Detector",                             SUMO_TAG_E2DETECTOR },
      60             :     { "laneAreaDetector",                       SUMO_TAG_LANE_AREA_DETECTOR },
      61             :     { "multiLaneAreaDetector",                  GNE_TAG_MULTI_LANE_AREA_DETECTOR },
      62             :     { "e3Detector",                             SUMO_TAG_E3DETECTOR },
      63             :     { "entryExitDetector",                      SUMO_TAG_ENTRY_EXIT_DETECTOR },
      64             :     { "detEntry",                               SUMO_TAG_DET_ENTRY },
      65             :     { "detExit",                                SUMO_TAG_DET_EXIT },
      66             :     { "edgeData",                               SUMO_TAG_MEANDATA_EDGE },
      67             :     { "laneData",                               SUMO_TAG_MEANDATA_LANE },
      68             :     { "edgeFollowDetector",                     SUMO_TAG_EDGEFOLLOWDETECTOR },
      69             :     { "instantInductionLoop",                   SUMO_TAG_INSTANT_INDUCTION_LOOP },
      70             :     { "routeProbe",                             SUMO_TAG_ROUTEPROBE },
      71             :     { "calibrator",                             SUMO_TAG_CALIBRATOR },
      72             :     { "calibratorLane",                         GNE_TAG_CALIBRATOR_LANE },
      73             :     { "calibratorFlow",                         GNE_TAG_CALIBRATOR_FLOW },
      74             :     { "rerouter",                               SUMO_TAG_REROUTER },
      75             :     { "rerouterSymbol",                         GNE_TAG_REROUTER_SYMBOL },
      76             :     { "interval",                               SUMO_TAG_INTERVAL },
      77             :     { "destProbReroute",                        SUMO_TAG_DEST_PROB_REROUTE },
      78             :     { "closingReroute",                         SUMO_TAG_CLOSING_REROUTE },
      79             :     { "closingLaneReroute",                     SUMO_TAG_CLOSING_LANE_REROUTE },
      80             :     { "routeProbReroute",                       SUMO_TAG_ROUTE_PROB_REROUTE },
      81             :     { "parkingAreaReroute",                     SUMO_TAG_PARKING_AREA_REROUTE },
      82             :     { "viaProbReroute",                         SUMO_TAG_VIA_PROB_REROUTE },
      83             :     { "step",                                   SUMO_TAG_STEP },
      84             :     { "variableSpeedSign",                      SUMO_TAG_VSS },
      85             :     { "variableSpeedSignSymbol",                GNE_TAG_VSS_SYMBOL },
      86             :     { "vaporizer",                              SUMO_TAG_VAPORIZER },
      87             :     { "tractionSubstation",                     SUMO_TAG_TRACTION_SUBSTATION },
      88             :     { "overheadWireSegment",                    SUMO_TAG_OVERHEAD_WIRE_SEGMENT },   // <- Deprecate
      89             :     { "overheadWire",                           SUMO_TAG_OVERHEAD_WIRE_SECTION },
      90             :     { "overheadWireClamp",                      SUMO_TAG_OVERHEAD_WIRE_CLAMP },
      91             :     { "vTypeProbe",                             SUMO_TAG_VTYPEPROBE },
      92             :     { "routes",                                 SUMO_TAG_ROUTES },
      93             :     { "trip",                                   SUMO_TAG_TRIP },
      94             :     { "tripJunctions",                          GNE_TAG_TRIP_JUNCTIONS },
      95             :     { "tripTAZs",                               GNE_TAG_TRIP_TAZS },
      96             :     { "vehicle",                                SUMO_TAG_VEHICLE },
      97             :     { "vehicleWithRoute",                       GNE_TAG_VEHICLE_WITHROUTE },
      98             :     { "flow",                                   SUMO_TAG_FLOW },
      99             :     { "flowJunctions",                          GNE_TAG_FLOW_JUNCTIONS },
     100             :     { "flowTAZs",                               GNE_TAG_FLOW_TAZS },
     101             :     { "flowState",                              SUMO_TAG_FLOWSTATE },
     102             :     { "vType",                                  SUMO_TAG_VTYPE },
     103             :     { "route",                                  SUMO_TAG_ROUTE },
     104             :     { "routeEmbedded",                          GNE_TAG_ROUTE_EMBEDDED },
     105             :     { "request",                                SUMO_TAG_REQUEST },
     106             :     { "source",                                 SUMO_TAG_SOURCE },
     107             :     { "taz",                                    SUMO_TAG_TAZ },
     108             :     { "tazSource",                              SUMO_TAG_TAZSOURCE },
     109             :     { "tazSink",                                SUMO_TAG_TAZSINK },
     110             :     { "trafficLight",                           SUMO_TAG_TRAFFIC_LIGHT },
     111             :     { "tlLogic",                                SUMO_TAG_TLLOGIC },
     112             :     { "phase",                                  SUMO_TAG_PHASE },
     113             :     { "condition",                              SUMO_TAG_CONDITION },
     114             :     { "assignment",                             SUMO_TAG_ASSIGNMENT },
     115             :     { "function",                               SUMO_TAG_FUNCTION },
     116             :     { "edgeControl",                            SUMO_TAG_EDGECONTROL },
     117             : 
     118             :     { "edgeRelation",                           SUMO_TAG_EDGEREL },
     119             :     { "tazRelation",                            SUMO_TAG_TAZREL },
     120             :     { "timedEvent",                             SUMO_TAG_TIMEDEVENT },
     121             :     { "fromEdge",                               SUMO_TAG_FROMEDGE },
     122             :     { "toEdge",                                 SUMO_TAG_TOEDGE },
     123             :     { "sink",                                   SUMO_TAG_SINK },
     124             :     { "param",                                  SUMO_TAG_PARAM },
     125             :     { "WAUT",                                   SUMO_TAG_WAUT },
     126             :     { "wautSwitch",                             SUMO_TAG_WAUT_SWITCH },
     127             :     { "wautJunction",                           SUMO_TAG_WAUT_JUNCTION },
     128             :     { "segment",                                SUMO_TAG_SEGMENT },
     129             :     { "delete",                                 SUMO_TAG_DEL },
     130             :     { "stop",                                   SUMO_TAG_STOP },
     131             :     { "stopBusStop",                            GNE_TAG_STOP_BUSSTOP },
     132             :     { "stopTrainStop",                          GNE_TAG_STOP_TRAINSTOP },
     133             :     { "stopContainerStop",                      GNE_TAG_STOP_CONTAINERSTOP },
     134             :     { "stopChargingStation",                    GNE_TAG_STOP_CHARGINGSTATION },
     135             :     { "stopParkingArea",                        GNE_TAG_STOP_PARKINGAREA },
     136             :     { "stopLane",                               GNE_TAG_STOP_LANE },
     137             :     { "polygonType",                            SUMO_TAG_POLYTYPE },
     138             :     { "connection",                             SUMO_TAG_CONNECTION },
     139             :     { "conflict",                               SUMO_TAG_CONFLICT },
     140             :     { "prohibition",                            SUMO_TAG_PROHIBITION },
     141             :     { "split",                                  SUMO_TAG_SPLIT },
     142             :     { "node",                                   SUMO_TAG_NODE },
     143             :     { "type",                                   SUMO_TAG_TYPE },
     144             :     { "laneType",                               SUMO_TAG_LANETYPE },
     145             :     { "detectorDefinition",                     SUMO_TAG_DETECTOR_DEFINITION },
     146             :     { "routeDistribution",                      SUMO_TAG_ROUTE_DISTRIBUTION },
     147             :     { "vTypeDistribution",                      SUMO_TAG_VTYPE_DISTRIBUTION },
     148             :     { "roundabout",                             SUMO_TAG_ROUNDABOUT },
     149             :     { "join",                                   SUMO_TAG_JOIN },
     150             :     { "joinExclude",                            SUMO_TAG_JOINEXCLUDE },
     151             :     { "crossing",                               SUMO_TAG_CROSSING },
     152             :     { "walkingArea",                            SUMO_TAG_WALKINGAREA },
     153             :     { "stopOffset",                             SUMO_TAG_STOPOFFSET },
     154             :     { "railSignalConstraints",                  SUMO_TAG_RAILSIGNAL_CONSTRAINTS },
     155             :     { "predecessor",                            SUMO_TAG_PREDECESSOR },
     156             :     { "insertionPredecessor",                   SUMO_TAG_INSERTION_PREDECESSOR },
     157             :     { "foeInsertion",                           SUMO_TAG_FOE_INSERTION },
     158             :     { "insertionOrder",                         SUMO_TAG_INSERTION_ORDER },
     159             :     { "bidiPredecessor",                        SUMO_TAG_BIDI_PREDECESSOR },
     160             :     { "railSignalConstraintTracker",            SUMO_TAG_RAILSIGNAL_CONSTRAINT_TRACKER },
     161             :     { "link",                                   SUMO_TAG_LINK },
     162             :     { "approaching",                            SUMO_TAG_APPROACHING },
     163             :     // OSM
     164             :     { "way",                                    SUMO_TAG_WAY },
     165             :     { "nd",                                     SUMO_TAG_ND },
     166             :     { "tag",                                    SUMO_TAG_TAG },
     167             :     { "relation",                               SUMO_TAG_RELATION },
     168             :     { "member",                                 SUMO_TAG_MEMBER },
     169             :     // View
     170             :     { "viewsettings",                           SUMO_TAG_VIEWSETTINGS },
     171             :     { "view3D",                                 SUMO_TAG_VIEWSETTINGS_3D },
     172             :     { "decal",                                  SUMO_TAG_VIEWSETTINGS_DECAL },
     173             :     { "light",                                  SUMO_TAG_VIEWSETTINGS_LIGHT },
     174             :     { "scheme",                                 SUMO_TAG_VIEWSETTINGS_SCHEME },
     175             :     { "opengl",                                 SUMO_TAG_VIEWSETTINGS_OPENGL },
     176             :     { "background",                             SUMO_TAG_VIEWSETTINGS_BACKGROUND },
     177             :     { "edges",                                  SUMO_TAG_VIEWSETTINGS_EDGES },
     178             :     { "vehicles",                               SUMO_TAG_VIEWSETTINGS_VEHICLES },
     179             :     { "persons",                                SUMO_TAG_VIEWSETTINGS_PERSONS },
     180             :     { "containers",                             SUMO_TAG_VIEWSETTINGS_CONTAINERS },
     181             :     { "junctions",                              SUMO_TAG_VIEWSETTINGS_JUNCTIONS },
     182             :     { "additionals",                            SUMO_TAG_VIEWSETTINGS_ADDITIONALS },
     183             :     { "pois",                                   SUMO_TAG_VIEWSETTINGS_POIS },
     184             :     { "polys",                                  SUMO_TAG_VIEWSETTINGS_POLYS },
     185             :     { "legend",                                 SUMO_TAG_VIEWSETTINGS_LEGEND },
     186             :     { "event",                                  SUMO_TAG_VIEWSETTINGS_EVENT },
     187             :     { "jamTime",                                SUMO_TAG_VIEWSETTINGS_EVENT_JAM_TIME },
     188             :     { "include",                                SUMO_TAG_INCLUDE },
     189             :     { "delay",                                  SUMO_TAG_DELAY },
     190             :     { "viewport",                               SUMO_TAG_VIEWPORT },
     191             :     { "snapshot",                               SUMO_TAG_SNAPSHOT },
     192             :     { "breakpoint",                             SUMO_TAG_BREAKPOINT },
     193             :     { "location",                               SUMO_TAG_LOCATION },
     194             :     { "colorScheme",                            SUMO_TAG_COLORSCHEME },
     195             :     { "scalingScheme",                          SUMO_TAG_SCALINGSCHEME },
     196             :     { "entry",                                  SUMO_TAG_ENTRY },
     197             :     { "rngState",                               SUMO_TAG_RNGSTATE },
     198             :     { "rngLane",                                SUMO_TAG_RNGLANE },
     199             :     { "vehicleTransfer",                        SUMO_TAG_VEHICLETRANSFER },
     200             :     { "device",                                 SUMO_TAG_DEVICE },
     201             :     // Cars
     202             :     { "carFollowing-IDM",                       SUMO_TAG_CF_IDM },
     203             :     { "carFollowing-IDMM",                      SUMO_TAG_CF_IDMM },
     204             :     { "carFollowing-Krauss",                    SUMO_TAG_CF_KRAUSS },
     205             :     { "carFollowing-KraussPS",                  SUMO_TAG_CF_KRAUSS_PLUS_SLOPE },
     206             :     { "carFollowing-KraussOrig1",               SUMO_TAG_CF_KRAUSS_ORIG1 },
     207             :     { "carFollowing-KraussX",                   SUMO_TAG_CF_KRAUSSX },
     208             :     { "carFollowing-EIDM",                      SUMO_TAG_CF_EIDM },
     209             :     { "carFollowing-SmartSK",                   SUMO_TAG_CF_SMART_SK },
     210             :     { "carFollowing-Daniel1",                   SUMO_TAG_CF_DANIEL1 },
     211             :     { "carFollowing-PWagner2009",               SUMO_TAG_CF_PWAGNER2009 },
     212             :     { "carFollowing-BKerner",                   SUMO_TAG_CF_BKERNER },
     213             :     { "carFollowing-Wiedemann",                 SUMO_TAG_CF_WIEDEMANN },
     214             :     { "carFollowing-W99",                       SUMO_TAG_CF_W99 },
     215             :     { "carFollowing-Rail",                      SUMO_TAG_CF_RAIL },
     216             :     { "carFollowing-ACC",                       SUMO_TAG_CF_ACC },
     217             :     { "carFollowing-CACC",                      SUMO_TAG_CF_CACC },
     218             :     { "carFollowing-CC",                        SUMO_TAG_CF_CC },
     219             :     // Person
     220             :     { "person",                                 SUMO_TAG_PERSON },
     221             :     { "personTrip",                             SUMO_TAG_PERSONTRIP },
     222             :     { "ride",                                   SUMO_TAG_RIDE },
     223             :     { "walk",                                   SUMO_TAG_WALK },
     224             :     { "personFlow",                             SUMO_TAG_PERSONFLOW },
     225             :     // Data (Netedit)
     226             :     { "dataSet",                                SUMO_TAG_DATASET },
     227             :     { "dataInterval",                           SUMO_TAG_DATAINTERVAL },
     228             :     // Transport
     229             :     { "container",                              SUMO_TAG_CONTAINER },
     230             :     { "transport",                              SUMO_TAG_TRANSPORT },
     231             :     { "tranship",                               SUMO_TAG_TRANSHIP },
     232             :     { "containerFlow",                                                SUMO_TAG_CONTAINERFLOW },
     233             :     //Trajectories
     234             :     { "trajectories",                           SUMO_TAG_TRAJECTORIES },
     235             :     { "timestep",                               SUMO_TAG_TIMESTEP },
     236             :     { "timeSlice",                              SUMO_TAG_TIMESLICE },
     237             :     { "actorConfig",                            SUMO_TAG_ACTORCONFIG },
     238             :     { "motionState",                            SUMO_TAG_MOTIONSTATE },
     239             :     { "odPair",                                 SUMO_TAG_OD_PAIR },
     240             :     { "transportables",                         SUMO_TAG_TRANSPORTABLES },
     241             :     // ActivityGen statistics file
     242             :     { "general",                                AGEN_TAG_GENERAL },
     243             :     { "street",                                 AGEN_TAG_STREET },
     244             :     { "workHours",                              AGEN_TAG_WORKHOURS },
     245             :     { "opening",                                AGEN_TAG_OPENING },
     246             :     { "closing",                                AGEN_TAG_CLOSING },
     247             :     { "schools",                                AGEN_TAG_SCHOOLS },
     248             :     { "school",                                 AGEN_TAG_SCHOOL },
     249             :     { "busStation",                             AGEN_TAG_BUSSTATION },
     250             :     { "busLine",                                AGEN_TAG_BUSLINE },
     251             :     { "stations",                               AGEN_TAG_STATIONS },
     252             :     { "revStations",                            AGEN_TAG_REV_STATIONS },
     253             :     { "station",                                AGEN_TAG_STATION },
     254             :     { "frequency",                              AGEN_TAG_FREQUENCY },
     255             :     { "population",                             AGEN_TAG_POPULATION },
     256             :     { "bracket",                                AGEN_TAG_BRACKET },
     257             :     { "cityGates",                              AGEN_TAG_CITYGATES },
     258             :     { "entrance",                               AGEN_TAG_ENTRANCE },
     259             :     { "parameters",                             AGEN_TAG_PARAM },
     260             :     // Netedit
     261             :     { "edgeData-edge",                          GNE_TAG_EDGEREL_SINGLE },
     262             :     { "internalLane",                           GNE_TAG_INTERNAL_LANE },
     263             :     { "poiLane",                                GNE_TAG_POILANE },
     264             :     { "poiGeo",                                 GNE_TAG_POIGEO },
     265             :     { "jupedsim.walkable_area",                 GNE_TAG_JPS_WALKABLEAREA },
     266             :     { "jupedsim.obstacle",                      GNE_TAG_JPS_OBSTACLE },
     267             :     { "flowRoute",                              GNE_TAG_FLOW_ROUTE },
     268             :     { "flowWithRoute",                          GNE_TAG_FLOW_WITHROUTE },
     269             :     // GNE waypoints
     270             :     { "waypoint",                               GNE_TAG_WAYPOINT },
     271             :     { "waypointLane",                           GNE_TAG_WAYPOINT_LANE },
     272             :     { "waypointBusStop",                        GNE_TAG_WAYPOINT_BUSSTOP },
     273             :     { "waypointTrainStop",                      GNE_TAG_WAYPOINT_TRAINSTOP },
     274             :     { "waypointContainerStop",                  GNE_TAG_WAYPOINT_CONTAINERSTOP },
     275             :     { "waypointChargingStation",                GNE_TAG_WAYPOINT_CHARGINGSTATION },
     276             :     { "waypointParkingArea",                    GNE_TAG_WAYPOINT_PARKINGAREA },
     277             :     // GNE Person trips
     278             :     { "personTrip: edge->edge",                 GNE_TAG_PERSONTRIP_EDGE_EDGE },
     279             :     { "personTrip: edge->taz",                  GNE_TAG_PERSONTRIP_EDGE_TAZ },
     280             :     { "personTrip: edge->junction",             GNE_TAG_PERSONTRIP_EDGE_JUNCTION },
     281             :     { "personTrip: edge->busstop",              GNE_TAG_PERSONTRIP_EDGE_BUSSTOP },
     282             :     { "personTrip: edge->trainstop",            GNE_TAG_PERSONTRIP_EDGE_TRAINSTOP },
     283             :     { "personTrip: taz->edge",                  GNE_TAG_PERSONTRIP_TAZ_EDGE },
     284             :     { "personTrip: taz->taz",                   GNE_TAG_PERSONTRIP_TAZ_TAZ },
     285             :     { "personTrip: taz->junction",              GNE_TAG_PERSONTRIP_TAZ_JUNCTION },
     286             :     { "personTrip: taz->busstop",               GNE_TAG_PERSONTRIP_TAZ_BUSSTOP },
     287             :     { "personTrip: taz->trainstop",             GNE_TAG_PERSONTRIP_TAZ_TRAINSTOP },
     288             :     { "personTrip: junction->edge",             GNE_TAG_PERSONTRIP_JUNCTION_EDGE },
     289             :     { "personTrip: junction->taz",              GNE_TAG_PERSONTRIP_JUNCTION_TAZ },
     290             :     { "personTrip: junction->junction",         GNE_TAG_PERSONTRIP_JUNCTION_JUNCTION },
     291             :     { "personTrip: junction->busstop",          GNE_TAG_PERSONTRIP_JUNCTION_BUSSTOP },
     292             :     { "personTrip: junction->trainstop",        GNE_TAG_PERSONTRIP_JUNCTION_TRAINSTOP },
     293             :     { "personTrip: busstop->edge",              GNE_TAG_PERSONTRIP_BUSSTOP_EDGE },
     294             :     { "personTrip: busstop->taz",               GNE_TAG_PERSONTRIP_BUSSTOP_TAZ },
     295             :     { "personTrip: busstop->junction",          GNE_TAG_PERSONTRIP_BUSSTOP_JUNCTION },
     296             :     { "personTrip: busstop->busstop",           GNE_TAG_PERSONTRIP_BUSSTOP_BUSSTOP },
     297             :     { "personTrip: busstop->trainstop",         GNE_TAG_PERSONTRIP_BUSSTOP_TRAINSTOP },
     298             :     { "personTrip: trainstop->edge",            GNE_TAG_PERSONTRIP_TRAINSTOP_EDGE },
     299             :     { "personTrip: trainstop->taz",             GNE_TAG_PERSONTRIP_TRAINSTOP_TAZ },
     300             :     { "personTrip: trainstop->junction",        GNE_TAG_PERSONTRIP_TRAINSTOP_JUNCTION },
     301             :     { "personTrip: trainstop->busstop",         GNE_TAG_PERSONTRIP_TRAINSTOP_BUSSTOP },
     302             :     { "personTrip: trainstop->trainstop",       GNE_TAG_PERSONTRIP_TRAINSTOP_TRAINSTOP },
     303             :     // GNE Walks
     304             :     { "walk: edge->edge",                       GNE_TAG_WALK_EDGE_EDGE },
     305             :     { "walk: edge->taz",                        GNE_TAG_WALK_EDGE_TAZ },
     306             :     { "walk: edge->junction",                   GNE_TAG_WALK_EDGE_JUNCTION },
     307             :     { "walk: edge->busstop",                    GNE_TAG_WALK_EDGE_BUSSTOP },
     308             :     { "walk: edge->trainstop",                  GNE_TAG_WALK_EDGE_TRAINSTOP },
     309             :     { "walk: taz->edge",                        GNE_TAG_WALK_TAZ_EDGE },
     310             :     { "walk: taz->taz",                         GNE_TAG_WALK_TAZ_TAZ },
     311             :     { "walk: taz->junction",                    GNE_TAG_WALK_TAZ_JUNCTION },
     312             :     { "walk: taz->busstop",                     GNE_TAG_WALK_TAZ_BUSSTOP },
     313             :     { "walk: taz->trainstop",                   GNE_TAG_WALK_TAZ_TRAINSTOP },
     314             :     { "walk: junction->edge",                   GNE_TAG_WALK_JUNCTION_EDGE },
     315             :     { "walk: junction->taz",                    GNE_TAG_WALK_JUNCTION_TAZ },
     316             :     { "walk: junction->junction",               GNE_TAG_WALK_JUNCTION_JUNCTION },
     317             :     { "walk: junction->busstop",                GNE_TAG_WALK_JUNCTION_BUSSTOP },
     318             :     { "walk: junction->trainstop",              GNE_TAG_WALK_JUNCTION_TRAINSTOP },
     319             :     { "walk: busstop->edge",                    GNE_TAG_WALK_BUSSTOP_EDGE },
     320             :     { "walk: busstop->taz",                     GNE_TAG_WALK_BUSSTOP_TAZ },
     321             :     { "walk: busstop->junction",                GNE_TAG_WALK_BUSSTOP_JUNCTION },
     322             :     { "walk: busstop->busstop",                 GNE_TAG_WALK_BUSSTOP_BUSSTOP },
     323             :     { "walk: busstop->trainstop",               GNE_TAG_WALK_BUSSTOP_TRAINSTOP },
     324             :     { "walk: trainstop->edge",                  GNE_TAG_WALK_TRAINSTOP_EDGE },
     325             :     { "walk: trainstop->taz",                   GNE_TAG_WALK_TRAINSTOP_TAZ },
     326             :     { "walk: trainstop->junction",              GNE_TAG_WALK_TRAINSTOP_JUNCTION },
     327             :     { "walk: trainstop->busstop",               GNE_TAG_WALK_TRAINSTOP_BUSSTOP },
     328             :     { "walk: trainstop->trainstop",             GNE_TAG_WALK_TRAINSTOP_TRAINSTOP },
     329             :     { "walk: edges",                            GNE_TAG_WALK_EDGES },
     330             :     { "walk: route",                            GNE_TAG_WALK_ROUTE },
     331             :     // GNE Rides
     332             :     { "ride: edge->edge",                       GNE_TAG_RIDE_EDGE_EDGE },
     333             :     { "ride: edge->busstop",                    GNE_TAG_RIDE_EDGE_BUSSTOP },
     334             :     { "ride: edge->trainstop",                  GNE_TAG_RIDE_EDGE_TRAINSTOP },
     335             :     { "ride: busstop->edge",                    GNE_TAG_RIDE_BUSSTOP_EDGE },
     336             :     { "ride: busstop->busstop",                 GNE_TAG_RIDE_BUSSTOP_BUSSTOP },
     337             :     { "ride: busstop->trainstop",               GNE_TAG_RIDE_BUSSTOP_TRAINSTOP },
     338             :     { "ride: trainstop->edge",                  GNE_TAG_RIDE_TRAINSTOP_EDGE },
     339             :     { "ride: trainstop->busstop",               GNE_TAG_RIDE_TRAINSTOP_BUSSTOP },
     340             :     { "ride: trainstop->trainstop",             GNE_TAG_RIDE_TRAINSTOP_TRAINSTOP },
     341             :     // GNE Person Stops
     342             :     { "stopPerson: busStop",                    GNE_TAG_STOPPERSON_BUSSTOP },
     343             :     { "stopPerson: trainStop",                  GNE_TAG_STOPPERSON_TRAINSTOP },
     344             :     { "stopPerson: edge",                       GNE_TAG_STOPPERSON_EDGE },
     345             :     // GNE Transports
     346             :     { "transport: edge->edge",                  GNE_TAG_TRANSPORT_EDGE_EDGE },
     347             :     { "transport: edge->containerStop",         GNE_TAG_TRANSPORT_EDGE_CONTAINERSTOP },
     348             :     { "transport: containerStop->edge",         GNE_TAG_TRANSPORT_CONTAINERSTOP_EDGE },
     349             :     { "transport: containerStop->containerStop", GNE_TAG_TRANSPORT_CONTAINERSTOP_CONTAINERSTOP },
     350             :     // GNE Tranships
     351             :     { "tranship: edge->edge",                   GNE_TAG_TRANSHIP_EDGE_EDGE },
     352             :     { "tranship: edge->containerStop",          GNE_TAG_TRANSHIP_EDGE_CONTAINERSTOP },
     353             :     { "tranship: containerStop->edge",          GNE_TAG_TRANSHIP_CONTAINERSTOP_EDGE },
     354             :     { "tranship: containerStop->containerStop", GNE_TAG_TRANSHIP_CONTAINERSTOP_CONTAINERSTOP },
     355             :     { "tranship: edges",                        GNE_TAG_TRANSHIP_EDGES },
     356             :     // GNE Container Stops
     357             :     { "stopContainer: containerStop",           GNE_TAG_STOPCONTAINER_CONTAINERSTOP },
     358             :     { "stopContainer: edge",                    GNE_TAG_STOPCONTAINER_EDGE },
     359             :     // root file
     360             :     { "rootFile",                               SUMO_TAG_ROOTFILE },
     361             :     // Last element
     362             :     { "",                                       SUMO_TAG_NOTHING }  // -> must be the last one
     363             : };
     364             : 
     365             : 
     366             : StringBijection<int>::Entry SUMOXMLDefinitions::attrs[] = {
     367             :     // meta value for attribute enum
     368             :     { "default",                SUMO_ATTR_DEFAULT },
     369             :     // meandata
     370             :     { "sampledSeconds",         SUMO_ATTR_SAMPLEDSECONDS },
     371             :     { "density",                SUMO_ATTR_DENSITY },
     372             :     { "laneDensity",            SUMO_ATTR_LANEDENSITY },
     373             :     { "occupancy",              SUMO_ATTR_OCCUPANCY },
     374             :     { "waitingTime",            SUMO_ATTR_WAITINGTIME },
     375             :     { "timeLoss",               SUMO_ATTR_TIMELOSS },
     376             :     { "speed",                  SUMO_ATTR_SPEED },
     377             :     { "speedRelative",          SUMO_ATTR_SPEEDREL },
     378             :     { "departed",               SUMO_ATTR_DEPARTED },
     379             :     { "arrived",                SUMO_ATTR_ARRIVED },
     380             :     { "entered",                SUMO_ATTR_ENTERED },
     381             :     { "left",                   SUMO_ATTR_LEFT },
     382             :     { "vaporized",              SUMO_ATTR_VAPORIZED },
     383             :     { "teleported",             SUMO_ATTR_TELEPORTED },
     384             :     { "traveltime",             SUMO_ATTR_TRAVELTIME },
     385             :     { "laneChangedFrom",        SUMO_ATTR_LANECHANGEDFROM },
     386             :     { "laneChangedTo",          SUMO_ATTR_LANECHANGEDTO },
     387             :     { "overlapTraveltime",      SUMO_ATTR_OVERLAPTRAVELTIME },
     388             :     { "CO_abs",                 SUMO_ATTR_CO_ABS },
     389             :     { "CO2_abs",                SUMO_ATTR_CO2_ABS },
     390             :     { "HC_abs",                 SUMO_ATTR_HC_ABS },
     391             :     { "PMx_abs",                SUMO_ATTR_PMX_ABS },
     392             :     { "NOx_abs",                SUMO_ATTR_NOX_ABS },
     393             :     { "fuel_abs",               SUMO_ATTR_FUEL_ABS },
     394             :     { "electricity_abs",        SUMO_ATTR_ELECTRICITY_ABS },
     395             :     { "CO_normed",              SUMO_ATTR_CO_NORMED },
     396             :     { "CO2_normed",             SUMO_ATTR_CO2_NORMED },
     397             :     { "HC_normed",              SUMO_ATTR_HC_NORMED },
     398             :     { "PMx_normed",             SUMO_ATTR_PMX_NORMED },
     399             :     { "NOx_normed",             SUMO_ATTR_NOX_NORMED },
     400             :     { "fuel_normed",            SUMO_ATTR_FUEL_NORMED },
     401             :     { "electricity_normed",     SUMO_ATTR_ELECTRICITY_NORMED },
     402             :     { "CO_perVeh",              SUMO_ATTR_CO_PERVEH },
     403             :     { "CO2_perVeh",             SUMO_ATTR_CO2_PERVEH },
     404             :     { "HC_perVeh",              SUMO_ATTR_HC_PERVEH },
     405             :     { "PMx_perVeh",             SUMO_ATTR_PMX_PERVEH },
     406             :     { "NOx_perVeh",             SUMO_ATTR_NOX_PERVEH },
     407             :     { "fuel_perVeh",            SUMO_ATTR_FUEL_PERVEH },
     408             :     { "electricity_perVeh",     SUMO_ATTR_ELECTRICITY_PERVEH },
     409             :     { "noise",                  SUMO_ATTR_NOISE },
     410             :     { "amount",                 SUMO_ATTR_AMOUNT },
     411             :     { "averageSpeed",           SUMO_ATTR_AVERAGESPEED },
     412             :     // FCD
     413             :     { "x",                      SUMO_ATTR_X },
     414             :     { "y",                      SUMO_ATTR_Y },
     415             :     { "z",                      SUMO_ATTR_Z },
     416             :     { "angle",                  SUMO_ATTR_ANGLE },
     417             :     { "type",                   SUMO_ATTR_TYPE },
     418             :     { "pos",                    SUMO_ATTR_POSITION },
     419             :     { "edge",                   SUMO_ATTR_EDGE },
     420             :     { "lane",                   SUMO_ATTR_LANE },
     421             :     { "slope",                  SUMO_ATTR_SLOPE },
     422             :     { "signals",                SUMO_ATTR_SIGNALS },
     423             :     { "acceleration",           SUMO_ATTR_ACCELERATION },
     424             :     { "accelerationLat",        SUMO_ATTR_ACCELERATION_LAT },
     425             :     { "distance",               SUMO_ATTR_DISTANCE },
     426             :     { "leaderID",               SUMO_ATTR_LEADER_ID },
     427             :     { "leaderSpeed",            SUMO_ATTR_LEADER_SPEED },
     428             :     { "leaderGap",              SUMO_ATTR_LEADER_GAP },
     429             :     { "vehicle",                SUMO_ATTR_VEHICLE },
     430             :     { "odometer",               SUMO_ATTR_ODOMETER },
     431             :     { "posLat",                 SUMO_ATTR_POSITION_LAT },
     432             :     { "speedLat",               SUMO_ATTR_SPEED_LAT },
     433             :     { "arrivalDelay",           SUMO_ATTR_ARRIVALDELAY },
     434             : 
     435             :     // Edge
     436             :     { "id",                     SUMO_ATTR_ID },
     437             :     { "refId",                  SUMO_ATTR_REFID },
     438             :     { "name",                   SUMO_ATTR_NAME },
     439             :     { "version",                SUMO_ATTR_VERSION },
     440             :     { "priority",               SUMO_ATTR_PRIORITY },
     441             :     { "numLanes",               SUMO_ATTR_NUMLANES },
     442             :     { "friction",               SUMO_ATTR_FRICTION },
     443             :     { "oneway",                 SUMO_ATTR_ONEWAY },
     444             :     { "width",                  SUMO_ATTR_WIDTH },
     445             :     { "widthResolution",        SUMO_ATTR_WIDTHRESOLUTION },
     446             :     { "maxWidth",               SUMO_ATTR_MAXWIDTH },
     447             :     { "minWidth",               SUMO_ATTR_MINWIDTH },
     448             :     { "sidewalkWidth",          SUMO_ATTR_SIDEWALKWIDTH },
     449             :     { "bikeLaneWidth",          SUMO_ATTR_BIKELANEWIDTH },
     450             :     { "remove",                 SUMO_ATTR_REMOVE },
     451             :     { "length",                 SUMO_ATTR_LENGTH },
     452             :     { "bidi",                   SUMO_ATTR_BIDI },
     453             :     // Split
     454             :     { "idBefore",               SUMO_ATTR_ID_BEFORE },
     455             :     { "idAfter",                SUMO_ATTR_ID_AFTER },
     456             :     // Positions
     457             :     { "center",                 SUMO_ATTR_CENTER },
     458             :     { "centerX",                SUMO_ATTR_CENTER_X },
     459             :     { "centerY",                SUMO_ATTR_CENTER_Y },
     460             :     { "centerZ",                SUMO_ATTR_CENTER_Z },
     461             : 
     462             :     { "key",                    SUMO_ATTR_KEY },
     463             :     { "requestSize",            SUMO_ATTR_REQUESTSIZE },
     464             :     { "request",                SUMO_ATTR_REQUEST },
     465             :     { "response",               SUMO_ATTR_RESPONSE },
     466             :     { "programID",              SUMO_ATTR_PROGRAMID },
     467             :     { "phase",                  SUMO_ATTR_PHASE },
     468             :     { "offset",                 SUMO_ATTR_OFFSET },
     469             :     { "endOffset",              SUMO_ATTR_ENDOFFSET },
     470             :     { "incLanes",               SUMO_ATTR_INCLANES },
     471             :     { "intLanes",               SUMO_ATTR_INTLANES },
     472             : 
     473             :     { "weight",                 SUMO_ATTR_WEIGHT },
     474             :     { "node",                   SUMO_ATTR_NODE },
     475             :     { "edges",                  SUMO_ATTR_EDGES },
     476             :     // Vehicle
     477             :     { "depart",                 SUMO_ATTR_DEPART },
     478             :     { "departLane",             SUMO_ATTR_DEPARTLANE },
     479             :     { "departPos",              SUMO_ATTR_DEPARTPOS },
     480             :     { "departPosLat",           SUMO_ATTR_DEPARTPOS_LAT },
     481             :     { "departSpeed",            SUMO_ATTR_DEPARTSPEED },
     482             :     { "departEdge",             SUMO_ATTR_DEPARTEDGE },
     483             :     { "arrivalLane",            SUMO_ATTR_ARRIVALLANE },
     484             :     { "arrivalPos",             SUMO_ATTR_ARRIVALPOS },
     485             :     { "arrivalPosLat",          SUMO_ATTR_ARRIVALPOS_LAT },
     486             :     { "arrivalSpeed",           SUMO_ATTR_ARRIVALSPEED },
     487             :     { "arrivalEdge",            SUMO_ATTR_ARRIVALEDGE },
     488             :     { "route",                  SUMO_ATTR_ROUTE },
     489             :     { "maxSpeed",               SUMO_ATTR_MAXSPEED },
     490             :     { "desiredMaxSpeed",        SUMO_ATTR_DESIRED_MAXSPEED },
     491             :     { "maxSpeedLat",            SUMO_ATTR_MAXSPEED_LAT },
     492             :     { "latAlignment",           SUMO_ATTR_LATALIGNMENT },
     493             :     { "minGapLat",              SUMO_ATTR_MINGAP_LAT },
     494             :     { "accel",                  SUMO_ATTR_ACCEL },
     495             :     { "decel",                  SUMO_ATTR_DECEL },
     496             :     { "emergencyDecel",         SUMO_ATTR_EMERGENCYDECEL },
     497             :     { "apparentDecel",          SUMO_ATTR_APPARENTDECEL },
     498             :     { "actionStepLength",       SUMO_ATTR_ACTIONSTEPLENGTH },
     499             :     { "vClass",                 SUMO_ATTR_VCLASS },
     500             :     { "vClasses",               SUMO_ATTR_VCLASSES },
     501             :     { "exceptions",             SUMO_ATTR_EXCEPTIONS },
     502             :     { "repno",                  SUMO_ATTR_REPNUMBER },
     503             :     { "speedFactor",            SUMO_ATTR_SPEEDFACTOR },
     504             :     { "speedDev",               SUMO_ATTR_SPEEDDEV },
     505             :     { "laneChangeModel",        SUMO_ATTR_LANE_CHANGE_MODEL },
     506             :     { "carFollowModel",         SUMO_ATTR_CAR_FOLLOW_MODEL },
     507             :     { "minGap",                 SUMO_ATTR_MINGAP },
     508             :     { "collisionMinGapFactor",  SUMO_ATTR_COLLISION_MINGAP_FACTOR },
     509             :     { "boardingDuration",       SUMO_ATTR_BOARDING_DURATION },
     510             :     { "loadingDuration",        SUMO_ATTR_LOADING_DURATION },
     511             :     { "scale",                  SUMO_ATTR_SCALE },
     512             :     { "insertionChecks",        SUMO_ATTR_INSERTIONCHECKS },
     513             :     { "timeToTeleport",         SUMO_ATTR_TIME_TO_TELEPORT },
     514             :     { "timeToTeleportBidi",     SUMO_ATTR_TIME_TO_TELEPORT_BIDI },
     515             :     { "speedFactorPremature",   SUMO_ATTR_SPEEDFACTOR_PREMATURE },
     516             :     { "maneuverAngleTimes",     SUMO_ATTR_MANEUVER_ANGLE_TIMES },
     517             :     { "parkingBadges",          SUMO_ATTR_PARKING_BADGES },
     518             :     // MSDevice_ElecHybrid
     519             :     { "overheadWireChargingPower",      SUMO_ATTR_OVERHEADWIRECHARGINGPOWER },
     520             :     // OverheadWire
     521             :     { "overheadWireSegment",    SUMO_ATTR_OVERHEAD_WIRE_SEGMENT },
     522             :     { "segments",               SUMO_ATTR_OVERHEAD_WIRE_SEGMENTS },     // <- deprecate
     523             :     { "voltage",                SUMO_ATTR_VOLTAGE },
     524             :     { "voltageSource",          SUMO_ATTR_VOLTAGESOURCE },
     525             :     { "currentLimit",           SUMO_ATTR_CURRENTLIMIT },
     526             :     { "substationId",           SUMO_ATTR_SUBSTATIONID },
     527             :     { "wireResistivity",        SUMO_ATTR_OVERHEAD_WIRE_RESISTIVITY },
     528             :     { "forbiddenInnerLanes",    SUMO_ATTR_OVERHEAD_WIRE_FORBIDDEN },
     529             :     { "clamps",                 SUMO_ATTR_OVERHEAD_WIRE_CLAMPS },       // <- deprecate
     530             :     { "idSegmentStartClamp",    SUMO_ATTR_OVERHEAD_WIRE_CLAMP_START },  // <- deprecate
     531             :     { "idSegmentEndClamp",      SUMO_ATTR_OVERHEAD_WIRE_CLAMP_END },    // <- deprecate
     532             :     { "wireClampStart",         SUMO_ATTR_OVERHEAD_WIRECLAMP_START },
     533             :     { "wireClampEnd",           SUMO_ATTR_OVERHEAD_WIRECLAMP_END },
     534             :     { "wireClampLaneStart",     SUMO_ATTR_OVERHEAD_WIRECLAMP_LANESTART },
     535             :     { "wireClampLaneEnd",       SUMO_ATTR_OVERHEAD_WIRECLAMP_LANEEND },
     536             :     // Charging Station
     537             :     { "power",                  SUMO_ATTR_CHARGINGPOWER },
     538             :     { "efficiency",             SUMO_ATTR_EFFICIENCY },
     539             :     { "chargeInTransit",        SUMO_ATTR_CHARGEINTRANSIT },
     540             :     { "chargeDelay",            SUMO_ATTR_CHARGEDELAY},
     541             :     { "chargeType",             SUMO_ATTR_CHARGETYPE},
     542             :     // MSDevice_Battery
     543             :     { "actualBatteryCapacity",          SUMO_ATTR_ACTUALBATTERYCAPACITY },
     544             :     { "maximumBatteryCapacity",         SUMO_ATTR_MAXIMUMBATTERYCAPACITY },
     545             :     { "maximumPower",                   SUMO_ATTR_MAXIMUMPOWER },
     546             :     { "vehicleMass",                    SUMO_ATTR_VEHICLEMASS },
     547             :     { "rotatingMass",                   SUMO_ATTR_ROTATINGMASS },
     548             :     { "frontSurfaceArea",               SUMO_ATTR_FRONTSURFACEAREA },
     549             :     { "airDragCoefficient",             SUMO_ATTR_AIRDRAGCOEFFICIENT },
     550             :     { "internalMomentOfInertia",        SUMO_ATTR_INTERNALMOMENTOFINERTIA },
     551             :     { "radialDragCoefficient",          SUMO_ATTR_RADIALDRAGCOEFFICIENT },
     552             :     { "rollDragCoefficient",            SUMO_ATTR_ROLLDRAGCOEFFICIENT },
     553             :     { "constantPowerIntake",            SUMO_ATTR_CONSTANTPOWERINTAKE },
     554             :     { "propulsionEfficiency",           SUMO_ATTR_PROPULSIONEFFICIENCY },
     555             :     { "recuperationEfficiency",         SUMO_ATTR_RECUPERATIONEFFICIENCY },
     556             :     { "recuperationEfficiencyByDecel",  SUMO_ATTR_RECUPERATIONEFFICIENCY_BY_DECELERATION },
     557             :     { "stoppingTreshold",               SUMO_ATTR_STOPPINGTHRESHOLD },
     558             :     // MSDevice_Tripinfo
     559             :     { "waitingCount",                   SUMO_ATTR_WAITINGCOUNT },
     560             :     { "stopTime",                       SUMO_ATTR_STOPTIME },
     561             : 
     562             :     // MSElecHybridExport
     563             :     { "overheadWireId",         SUMO_ATTR_OVERHEADWIREID },
     564             :     { "tractionSubstationId",   SUMO_ATTR_TRACTIONSUBSTATIONID },
     565             :     { "current",                SUMO_ATTR_CURRENTFROMOVERHEADWIRE },
     566             :     { "circuitVoltage",         SUMO_ATTR_VOLTAGEOFOVERHEADWIRE },
     567             :     { "alphaCircuitSolver",     SUMO_ATTR_ALPHACIRCUITSOLVER },
     568             :     { "recuperationEnabled",     SUMO_ATTR_RECUPERATIONENABLE },
     569             :     // MSBatteryExport
     570             :     { "energyConsumed",         SUMO_ATTR_ENERGYCONSUMED },
     571             :     { "totalEnergyConsumed",    SUMO_ATTR_TOTALENERGYCONSUMED },
     572             :     { "totalEnergyRegenerated", SUMO_ATTR_TOTALENERGYREGENERATED },
     573             :     { "chargingStationId",      SUMO_ATTR_CHARGINGSTATIONID },
     574             :     { "energyCharged",          SUMO_ATTR_ENERGYCHARGED },
     575             :     { "energyChargedInTransit", SUMO_ATTR_ENERGYCHARGEDINTRANSIT },
     576             :     { "energyChargedStopped",   SUMO_ATTR_ENERGYCHARGEDSTOPPED },
     577             :     { "posOnLane",              SUMO_ATTR_POSONLANE },
     578             :     { "timeStopped",            SUMO_ATTR_TIMESTOPPED },
     579             :     // MMPEVEM
     580             :     { "wheelRadius",               SUMO_ATTR_WHEELRADIUS },
     581             :     { "maximumTorque",             SUMO_ATTR_MAXIMUMTORQUE },
     582             :     { "maximumSpeed",              SUMO_ATTR_MAXIMUMSPEED },
     583             :     { "gearEfficiency",            SUMO_ATTR_GEAREFFICIENCY },
     584             :     { "gearRatio",                 SUMO_ATTR_GEARRATIO },
     585             :     { "maximumRecuperationTorque", SUMO_ATTR_MAXIMUMRECUPERATIONTORQUE },
     586             :     { "maximumRecuperationPower",  SUMO_ATTR_MAXIMUMRECUPERATIONPOWER },
     587             :     { "internalBatteryResistance", SUMO_ATTR_INTERNALBATTERYRESISTANCE },
     588             :     { "nominalBatteryVoltage",     SUMO_ATTR_NOMINALBATTERYVOLTAGE },
     589             :     { "powerLossMap",              SUMO_ATTR_POWERLOSSMAP },
     590             :     // ChargingStation output
     591             :     { "chargingStatus",                 SUMO_ATTR_CHARGING_STATUS },
     592             :     { "totalEnergyCharged",             SUMO_ATTR_TOTALENERGYCHARGED },
     593             :     { "chargingSteps",                  SUMO_ATTR_CHARGINGSTEPS },
     594             :     { "totalEnergyChargedIntoVehicle",  SUMO_ATTR_TOTALENERGYCHARGED_VEHICLE },
     595             :     { "chargingBegin",                  SUMO_ATTR_CHARGINGBEGIN },
     596             :     { "chargingEnd",                    SUMO_ATTR_CHARGINGEND },
     597             :     { "partialCharge",                  SUMO_ATTR_PARTIALCHARGE },
     598             : 
     599             :     // general emission / consumption
     600             :     { "shutOffStopDuration",    SUMO_ATTR_SHUT_OFF_STOP },
     601             :     { "shutOffAutoDuration",    SUMO_ATTR_SHUT_OFF_AUTO },
     602             :     { "loading",                SUMO_ATTR_LOADING },
     603             : 
     604             :     /// @name carFollow model attributes
     605             :     { "sigma",                  SUMO_ATTR_SIGMA },
     606             :     { "sigmaStep",              SUMO_ATTR_SIGMA_STEP },
     607             :     { "startupDelay",           SUMO_ATTR_STARTUP_DELAY },
     608             :     { "tau",                    SUMO_ATTR_TAU },
     609             :     { "tmp1",                   SUMO_ATTR_TMP1 },
     610             :     { "tmp2",                   SUMO_ATTR_TMP2 },
     611             :     { "tmp3",                   SUMO_ATTR_TMP3 },
     612             :     { "tmp4",                   SUMO_ATTR_TMP4 },
     613             :     { "tmp5",                   SUMO_ATTR_TMP5 },
     614             : 
     615             :     { "vehdynamics",            SUMO_ATTR_CF_EIDM_USEVEHDYNAMICS },
     616             :     { "tpreview",               SUMO_ATTR_CF_EIDM_T_LOOK_AHEAD },
     617             :     { "tPersDrive",             SUMO_ATTR_CF_EIDM_T_PERSISTENCE_DRIVE },
     618             :     { "treaction",              SUMO_ATTR_CF_EIDM_T_REACTION },
     619             :     { "tPersEstimate",          SUMO_ATTR_CF_EIDM_T_PERSISTENCE_ESTIMATE },
     620             :     { "ccoolness",              SUMO_ATTR_CF_EIDM_C_COOLNESS },
     621             :     { "sigmaleader",            SUMO_ATTR_CF_EIDM_SIG_LEADER },
     622             :     { "sigmagap",               SUMO_ATTR_CF_EIDM_SIG_GAP },
     623             :     { "sigmaerror",             SUMO_ATTR_CF_EIDM_SIG_ERROR },
     624             :     { "jerkmax",                SUMO_ATTR_CF_EIDM_JERK_MAX },
     625             :     { "epsilonacc",             SUMO_ATTR_CF_EIDM_EPSILON_ACC },
     626             :     { "taccmax",                SUMO_ATTR_CF_EIDM_T_ACC_MAX },
     627             :     { "Mflatness",              SUMO_ATTR_CF_EIDM_M_FLATNESS },
     628             :     { "Mbegin",                 SUMO_ATTR_CF_EIDM_M_BEGIN },
     629             :     { "maxvehpreview",          SUMO_ATTR_CF_EIDM_MAX_VEH_PREVIEW },
     630             : 
     631             :     { "speedControlGain",               SUMO_ATTR_SC_GAIN },
     632             :     { "gapClosingControlGainSpeed",     SUMO_ATTR_GCC_GAIN_SPEED },
     633             :     { "gapClosingControlGainSpace",     SUMO_ATTR_GCC_GAIN_SPACE },
     634             :     { "gapControlGainSpeed",            SUMO_ATTR_GC_GAIN_SPEED },
     635             :     { "gapControlGainSpace",            SUMO_ATTR_GC_GAIN_SPACE },
     636             :     { "collisionAvoidanceGainSpeed",    SUMO_ATTR_CA_GAIN_SPEED },
     637             :     { "collisionAvoidanceGainSpace",    SUMO_ATTR_CA_GAIN_SPACE },
     638             :     { "collisionAvoidanceOverride",     SUMO_ATTR_CA_OVERRIDE },
     639             : 
     640             :     { "speedControlGainCACC",           SUMO_ATTR_SC_GAIN_CACC },
     641             :     { "gapClosingControlGainGap",       SUMO_ATTR_GCC_GAIN_GAP_CACC },
     642             :     { "gapClosingControlGainGapDot",    SUMO_ATTR_GCC_GAIN_GAP_DOT_CACC },
     643             :     { "gapControlGainGap",              SUMO_ATTR_GC_GAIN_GAP_CACC },
     644             :     { "gapControlGainGapDot",           SUMO_ATTR_GC_GAIN_GAP_DOT_CACC },
     645             :     { "collisionAvoidanceGainGap",      SUMO_ATTR_CA_GAIN_GAP_CACC },
     646             :     { "collisionAvoidanceGainGapDot",   SUMO_ATTR_CA_GAIN_GAP_DOT_CACC },
     647             :     { "tauCACCToACC",                   SUMO_ATTR_HEADWAY_TIME_CACC_TO_ACC },
     648             :     { "speedControlMinGap",             SUMO_ATTR_SC_MIN_GAP },
     649             :     { "applyDriverState",               SUMO_ATTR_APPLYDRIVERSTATE },
     650             : 
     651             :     { "trainType",                      SUMO_ATTR_TRAIN_TYPE },
     652             :     { "speedTable",                     SUMO_ATTR_SPEED_TABLE },
     653             :     { "tractionTable",                  SUMO_ATTR_TRACTION_TABLE },
     654             :     { "resistanceTable",                SUMO_ATTR_RESISTANCE_TABLE },
     655             :     { "massFactor",                     SUMO_ATTR_MASSFACTOR },
     656             :     { "maxPower",                       SUMO_ATTR_MAXPOWER },
     657             :     { "maxTraction",                    SUMO_ATTR_MAXTRACTION },
     658             :     { "resCoef_constant",               SUMO_ATTR_RESISTANCE_COEFFICIENT_CONSTANT },
     659             :     { "resCoef_linear",                 SUMO_ATTR_RESISTANCE_COEFFICIENT_LINEAR },
     660             :     { "resCoef_quadratic",              SUMO_ATTR_RESISTANCE_COEFFICIENT_QUADRATIC },
     661             :     /// @}
     662             : 
     663             :     /// @name Lane changing model attributes
     664             :     /// @{
     665             :     { "lcStrategic",                SUMO_ATTR_LCA_STRATEGIC_PARAM },
     666             :     { "lcCooperative",              SUMO_ATTR_LCA_COOPERATIVE_PARAM },
     667             :     { "lcSpeedGain",                SUMO_ATTR_LCA_SPEEDGAIN_PARAM },
     668             :     { "lcKeepRight",                SUMO_ATTR_LCA_KEEPRIGHT_PARAM },
     669             :     { "lcSublane",                  SUMO_ATTR_LCA_SUBLANE_PARAM },
     670             :     { "lcOpposite",                 SUMO_ATTR_LCA_OPPOSITE_PARAM },
     671             :     { "lcPushy",                    SUMO_ATTR_LCA_PUSHY },
     672             :     { "lcPushyGap",                 SUMO_ATTR_LCA_PUSHYGAP },
     673             :     { "lcAssertive",                SUMO_ATTR_LCA_ASSERTIVE },
     674             :     { "lcImpatience",               SUMO_ATTR_LCA_IMPATIENCE },
     675             :     { "lcTimeToImpatience",         SUMO_ATTR_LCA_TIME_TO_IMPATIENCE },
     676             :     { "lcAccelLat",                 SUMO_ATTR_LCA_ACCEL_LAT },
     677             :     { "lcTurnAlignmentDistance",    SUMO_ATTR_LCA_TURN_ALIGNMENT_DISTANCE },
     678             :     { "lcOvertakeRight",            SUMO_ATTR_LCA_OVERTAKE_RIGHT },
     679             :     { "lcLookaheadLeft",            SUMO_ATTR_LCA_LOOKAHEADLEFT },
     680             :     { "lcSpeedGainRight",           SUMO_ATTR_LCA_SPEEDGAINRIGHT },
     681             :     { "lcSpeedGainLookahead",       SUMO_ATTR_LCA_SPEEDGAIN_LOOKAHEAD },
     682             :     { "lcCooperativeRoundabout",    SUMO_ATTR_LCA_COOPERATIVE_ROUNDABOUT },
     683             :     { "lcCooperativeSpeed",         SUMO_ATTR_LCA_COOPERATIVE_SPEED },
     684             :     { "lcMaxSpeedLatStanding",      SUMO_ATTR_LCA_MAXSPEEDLATSTANDING },
     685             :     { "lcMaxSpeedLatFactor",        SUMO_ATTR_LCA_MAXSPEEDLATFACTOR },
     686             :     { "lcMaxDistLatStanding",       SUMO_ATTR_LCA_MAXDISTLATSTANDING },
     687             :     { "lcLaneDiscipline",           SUMO_ATTR_LCA_LANE_DISCIPLINE },
     688             :     { "lcSigma",                    SUMO_ATTR_LCA_SIGMA },
     689             :     { "lcKeepRightAcceptanceTime",  SUMO_ATTR_LCA_KEEPRIGHT_ACCEPTANCE_TIME },
     690             :     { "lcOvertakeDeltaSpeedFactor", SUMO_ATTR_LCA_OVERTAKE_DELTASPEED_FACTOR },
     691             :     { "lcExperimental1",            SUMO_ATTR_LCA_EXPERIMENTAL1 },
     692             :     /// @}
     693             : 
     694             :     /// @name junction model attributes
     695             :     /// @{
     696             :     { "jmCrossingGap",          SUMO_ATTR_JM_CROSSING_GAP },
     697             :     { "jmDriveAfterYellowTime", SUMO_ATTR_JM_DRIVE_AFTER_YELLOW_TIME },
     698             :     { "jmDriveAfterRedTime",    SUMO_ATTR_JM_DRIVE_AFTER_RED_TIME },
     699             :     { "jmDriveRedSpeed",        SUMO_ATTR_JM_DRIVE_RED_SPEED },
     700             :     { "jmIgnoreKeepClearTime",  SUMO_ATTR_JM_IGNORE_KEEPCLEAR_TIME },
     701             :     { "jmIgnoreFoeSpeed",       SUMO_ATTR_JM_IGNORE_FOE_SPEED },
     702             :     { "jmIgnoreFoeProb",        SUMO_ATTR_JM_IGNORE_FOE_PROB },
     703             :     { "jmIgnoreJunctionFoeProb", SUMO_ATTR_JM_IGNORE_JUNCTION_FOE_PROB },
     704             :     { "jmSigmaMinor",           SUMO_ATTR_JM_SIGMA_MINOR },
     705             :     { "jmStoplineGap",          SUMO_ATTR_JM_STOPLINE_GAP },
     706             :     { "jmTimegapMinor",         SUMO_ATTR_JM_TIMEGAP_MINOR },
     707             :     { "junctionModel.ignoreIDs",    SUMO_ATTR_JM_IGNORE_IDS },
     708             :     { "junctionModel.ignoreTypes",  SUMO_ATTR_JM_IGNORE_TYPES },
     709             :     { "carFollowModel.ignoreIDs",   SUMO_ATTR_CF_IGNORE_IDS },
     710             :     { "carFollowModel.ignoreTypes", SUMO_ATTR_CF_IGNORE_TYPES },
     711             :     /// @}
     712             :     { "flexArrival", SUMO_ATTR_FLEX_ARRIVAL },
     713             : 
     714             :     { "last",                   SUMO_ATTR_LAST },
     715             :     { "cost",                   SUMO_ATTR_COST },
     716             :     { "costs",                  SUMO_ATTR_COSTS },
     717             :     { "savings",                SUMO_ATTR_SAVINGS },
     718             :     { "exitTimes",              SUMO_ATTR_EXITTIMES },
     719             :     { "probability",            SUMO_ATTR_PROB },
     720             :     { "replacedAtTime",         SUMO_ATTR_REPLACED_AT_TIME },
     721             :     { "replacedOnIndex",        SUMO_ATTR_REPLACED_ON_INDEX },
     722             :     { "count",                  SUMO_ATTR_COUNT },
     723             :     { "probabilities",          SUMO_ATTR_PROBS },
     724             :     { "routes",                 SUMO_ATTR_ROUTES },
     725             :     { "vTypes",                 SUMO_ATTR_VTYPES },
     726             :     { "nextEdges",              SUMO_ATTR_NEXT_EDGES },
     727             :     { "deterministic",          SUMO_ATTR_DETERMINISTIC },
     728             : 
     729             :     { "lanes",                  SUMO_ATTR_LANES },
     730             :     { "from",                   SUMO_ATTR_FROM },
     731             :     { "to",                     SUMO_ATTR_TO },
     732             :     { "fromLonLat",             SUMO_ATTR_FROMLONLAT },
     733             :     { "toLonLat",               SUMO_ATTR_TOLONLAT },
     734             :     { "fromXY",                 SUMO_ATTR_FROMXY },
     735             :     { "toXY",                   SUMO_ATTR_TOXY },
     736             :     { "fromJunction",           SUMO_ATTR_FROM_JUNCTION },
     737             :     { "toJunction",             SUMO_ATTR_TO_JUNCTION },
     738             :     { "period",                 SUMO_ATTR_PERIOD },
     739             :     { "repeat",                 SUMO_ATTR_REPEAT },
     740             :     { "cycleTime",              SUMO_ATTR_CYCLETIME },
     741             :     { "fromTaz",                SUMO_ATTR_FROM_TAZ },
     742             :     { "toTaz",                  SUMO_ATTR_TO_TAZ },
     743             :     { "reroute",                SUMO_ATTR_REROUTE },
     744             :     { "personCapacity",         SUMO_ATTR_PERSON_CAPACITY },
     745             :     { "containerCapacity",      SUMO_ATTR_CONTAINER_CAPACITY },
     746             :     { "parkingLength",          SUMO_ATTR_PARKING_LENGTH },
     747             :     { "personNumber",           SUMO_ATTR_PERSON_NUMBER },
     748             :     { "containerNumber",        SUMO_ATTR_CONTAINER_NUMBER },
     749             :     { "modes",                  SUMO_ATTR_MODES },
     750             :     { "walkFactor",             SUMO_ATTR_WALKFACTOR },
     751             : 
     752             :     { "function",               SUMO_ATTR_FUNCTION },
     753             :     { "freq",                   SUMO_ATTR_FREQUENCY },
     754             :     { "style",                  SUMO_ATTR_STYLE },
     755             :     { "file",                   SUMO_ATTR_FILE },
     756             :     { "junction",               SUMO_ATTR_JUNCTION },
     757             :     { "number",                 SUMO_ATTR_NUMBER },
     758             :     { "duration",               SUMO_ATTR_DURATION },
     759             :     { "until",                  SUMO_ATTR_UNTIL },
     760             :     { "arrival",                SUMO_ATTR_ARRIVAL },
     761             :     { "extension",              SUMO_ATTR_EXTENSION },
     762             :     { "started",                SUMO_ATTR_STARTED },
     763             :     { "ended",                  SUMO_ATTR_ENDED },
     764             :     { "routeProbe",             SUMO_ATTR_ROUTEPROBE },
     765             :     { "crossingEdges",          SUMO_ATTR_CROSSING_EDGES },
     766             :     // Traffic light & Nodes
     767             :     { "time",                   SUMO_ATTR_TIME },
     768             :     { "begin",                  SUMO_ATTR_BEGIN },
     769             :     { "end",                    SUMO_ATTR_END },
     770             :     { "tl",                     SUMO_ATTR_TLID },
     771             :     { "tlType",                 SUMO_ATTR_TLTYPE },
     772             :     { "tlLayout",               SUMO_ATTR_TLLAYOUT },
     773             :     { "linkIndex",              SUMO_ATTR_TLLINKINDEX },
     774             :     { "linkIndex2",             SUMO_ATTR_TLLINKINDEX2 },
     775             :     { "shape",                  SUMO_ATTR_SHAPE },
     776             :     { "outlineShape",           SUMO_ATTR_OUTLINESHAPE },
     777             :     { "spreadType",             SUMO_ATTR_SPREADTYPE },
     778             :     { "radius",                 SUMO_ATTR_RADIUS },
     779             :     { "customShape",            SUMO_ATTR_CUSTOMSHAPE },
     780             :     { "keepClear",              SUMO_ATTR_KEEP_CLEAR },
     781             :     { "indirect",               SUMO_ATTR_INDIRECT },
     782             :     { "rightOfWay",             SUMO_ATTR_RIGHT_OF_WAY },
     783             :     { "fringe",                 SUMO_ATTR_FRINGE },
     784             :     { "color",                  SUMO_ATTR_COLOR },
     785             :     { "dir",                    SUMO_ATTR_DIR },
     786             :     { "state",                  SUMO_ATTR_STATE },
     787             :     { "lcState",                SUMO_ATTR_LCSTATE },
     788             :     { "icon",                   SUMO_ATTR_ICON },
     789             :     { "layer",                  SUMO_ATTR_LAYER },
     790             :     { "fill",                   SUMO_ATTR_FILL },
     791             :     { "lineWidth",              SUMO_ATTR_LINEWIDTH },
     792             :     { "prefix",                 SUMO_ATTR_PREFIX },
     793             :     { "discard",                SUMO_ATTR_DISCARD },
     794             : 
     795             :     { "fromLane",               SUMO_ATTR_FROM_LANE },
     796             :     { "toLane",                 SUMO_ATTR_TO_LANE },
     797             :     { "dest",                   SUMO_ATTR_DEST },
     798             :     { "source",                 SUMO_ATTR_SOURCE },
     799             :     { "via",                    SUMO_ATTR_VIA },
     800             :     { "viaLonLat",              SUMO_ATTR_VIALONLAT },
     801             :     { "viaXY",                  SUMO_ATTR_VIAXY },
     802             :     { "viaJunctions",           SUMO_ATTR_VIAJUNCTIONS },
     803             :     { "nodes",                  SUMO_ATTR_NODES },
     804             :     { "visibility",             SUMO_ATTR_VISIBILITY_DISTANCE },
     805             : 
     806             :     { "minDur",                 SUMO_ATTR_MINDURATION },
     807             :     { "maxDur",                 SUMO_ATTR_MAXDURATION },
     808             :     { "earliestEnd",            SUMO_ATTR_EARLIEST_END },
     809             :     { "latestEnd",              SUMO_ATTR_LATEST_END },
     810             :     { "earlyTarget",            SUMO_ATTR_EARLY_TARGET },
     811             :     { "finalTarget",            SUMO_ATTR_FINAL_TARGET },
     812             :     { "check",                  SUMO_ATTR_CHECK },
     813             :     { "nArgs",                  SUMO_ATTR_NARGS },
     814             :     { "vehext",                 SUMO_ATTR_VEHICLEEXTENSION },
     815             :     { "yellow",                 SUMO_ATTR_YELLOW },
     816             :     { "red",                    SUMO_ATTR_RED },
     817             :     { "next",                   SUMO_ATTR_NEXT },
     818             :     { "foes",                   SUMO_ATTR_FOES },
     819             :     { "constraints",            SUMO_ATTR_CONSTRAINTS },
     820             :     { "detectors",              SUMO_ATTR_DETECTORS },
     821             :     { "conditions",             SUMO_ATTR_CONDITIONS },
     822             :     { "saveDetectors",          SUMO_ATTR_SAVE_DETECTORS },
     823             :     { "saveConditions",         SUMO_ATTR_SAVE_CONDITIONS },
     824             : 
     825             :     // E2 detector
     826             :     { "cont",                   SUMO_ATTR_CONT },
     827             :     { "contPos",                SUMO_ATTR_CONTPOS },
     828             :     { "timeThreshold",          SUMO_ATTR_HALTING_TIME_THRESHOLD },
     829             :     { "speedThreshold",         SUMO_ATTR_HALTING_SPEED_THRESHOLD },
     830             :     { "jamThreshold",           SUMO_ATTR_JAM_DIST_THRESHOLD },
     831             :     { "show",                   SUMO_ATTR_SHOW_DETECTOR },
     832             :     // E3 detector
     833             :     { "openEntry",              SUMO_ATTR_OPEN_ENTRY },
     834             :     { "expectArrival",          SUMO_ATTR_EXPECT_ARRIVAL },
     835             : 
     836             :     { "wautID",                 SUMO_ATTR_WAUT_ID },
     837             :     { "junctionID",             SUMO_ATTR_JUNCTION_ID },
     838             :     { "procedure",              SUMO_ATTR_PROCEDURE },
     839             :     { "synchron",               SUMO_ATTR_SYNCHRON },
     840             :     { "refTime",                SUMO_ATTR_REF_TIME },
     841             :     { "startProg",              SUMO_ATTR_START_PROG },
     842             :     { "off",                    SUMO_ATTR_OFF },
     843             :     { "friendlyPos",            SUMO_ATTR_FRIENDLY_POS },
     844             :     { "splitByType",            SUMO_ATTR_SPLIT_VTYPE },
     845             :     { "uncontrolled",           SUMO_ATTR_UNCONTROLLED },
     846             :     { "pass",                   SUMO_ATTR_PASS },
     847             :     { "busStop",                SUMO_ATTR_BUS_STOP },
     848             :     { "trainStop",              SUMO_ATTR_TRAIN_STOP },
     849             :     { "containerStop",          SUMO_ATTR_CONTAINER_STOP },
     850             :     { "parkingArea",            SUMO_ATTR_PARKING_AREA },
     851             :     { "roadsideCapacity",       SUMO_ATTR_ROADSIDE_CAPACITY },
     852             :     { "acceptedBadges",         SUMO_ATTR_ACCEPTED_BADGES },
     853             :     { "onRoad",                 SUMO_ATTR_ONROAD },
     854             :     { "chargingStation",        SUMO_ATTR_CHARGING_STATION },
     855             :     { "group",                  SUMO_ATTR_GROUP },
     856             :     { "line",                   SUMO_ATTR_LINE },
     857             :     { "lines",                  SUMO_ATTR_LINES },
     858             :     { "tripId",                 SUMO_ATTR_TRIP_ID },
     859             :     { "split",                  SUMO_ATTR_SPLIT },
     860             :     { "join",                   SUMO_ATTR_JOIN },
     861             :     { "intended",               SUMO_ATTR_INTENDED },
     862             :     { "onDemand",               SUMO_ATTR_ONDEMAND },
     863             :     { "jump",                   SUMO_ATTR_JUMP },
     864             :     { "usedEnded",              SUMO_ATTR_USED_ENDED },
     865             :     { "collision",              SUMO_ATTR_COLLISION },
     866             :     { "value",                  SUMO_ATTR_VALUE },
     867             :     { "prohibitor",             SUMO_ATTR_PROHIBITOR },
     868             :     { "prohibited",             SUMO_ATTR_PROHIBITED },
     869             :     { "allow",                  SUMO_ATTR_ALLOW },
     870             :     { "disallow",               SUMO_ATTR_DISALLOW },
     871             :     { "prefer",                 SUMO_ATTR_PREFER },
     872             :     { "changeLeft",             SUMO_ATTR_CHANGE_LEFT },
     873             :     { "changeRight",            SUMO_ATTR_CHANGE_RIGHT },
     874             :     { "controlledInner",        SUMO_ATTR_CONTROLLED_INNER },
     875             :     { "vehsPerHour",            SUMO_ATTR_VEHSPERHOUR },
     876             :     { "personsPerHour",         SUMO_ATTR_PERSONSPERHOUR },
     877             :     { "containersPerHour",            SUMO_ATTR_CONTAINERSPERHOUR },
     878             :     { "perHour",                              SUMO_ATTR_PERHOUR },
     879             :     { "done",                             SUMO_ATTR_DONE },
     880             :     { "output",                 SUMO_ATTR_OUTPUT },
     881             :     { "height",                 SUMO_ATTR_HEIGHT },
     882             :     { "guiShape",               SUMO_ATTR_GUISHAPE },
     883             :     { "osgFile",                SUMO_ATTR_OSGFILE },
     884             :     { "imgFile",                SUMO_ATTR_IMGFILE },
     885             :     { "relativePath",           SUMO_ATTR_RELATIVEPATH },
     886             :     { "emissionClass",          SUMO_ATTR_EMISSIONCLASS },
     887             :     { "mass",                   SUMO_ATTR_MASS },
     888             :     { "impatience",             SUMO_ATTR_IMPATIENCE },
     889             :     { "startPos",               SUMO_ATTR_STARTPOS },
     890             :     { "endPos",                 SUMO_ATTR_ENDPOS },
     891             :     { "triggered",              SUMO_ATTR_TRIGGERED },
     892             :     { "containerTriggered",     SUMO_ATTR_CONTAINER_TRIGGERED },
     893             :     { "parking",                SUMO_ATTR_PARKING },
     894             :     { "expected",               SUMO_ATTR_EXPECTED },
     895             :     { "permitted",              SUMO_ATTR_PERMITTED },
     896             :     { "expectedContainers",     SUMO_ATTR_EXPECTED_CONTAINERS },
     897             :     { "index",                  SUMO_ATTR_INDEX },
     898             : 
     899             :     { "entering",               SUMO_ATTR_ENTERING },
     900             :     { "excludeEmpty",           SUMO_ATTR_EXCLUDE_EMPTY },
     901             :     { "withInternal",           SUMO_ATTR_WITH_INTERNAL },
     902             :     { "trackVehicles",          SUMO_ATTR_TRACK_VEHICLES },
     903             :     { "detectPersons",          SUMO_ATTR_DETECT_PERSONS },
     904             :     { "maxTraveltime",          SUMO_ATTR_MAX_TRAVELTIME },
     905             :     { "minSamples",             SUMO_ATTR_MIN_SAMPLES },
     906             :     { "writeAttributes",        SUMO_ATTR_WRITE_ATTRIBUTES },
     907             :     { "edgesFile",              SUMO_ATTR_EDGESFILE },
     908             :     { "aggregate",              SUMO_ATTR_AGGREGATE },
     909             :     { "numEdges",               SUMO_ATTR_NUMEDGES },
     910             : 
     911             :     { "lon",                    SUMO_ATTR_LON },
     912             :     { "lat",                    SUMO_ATTR_LAT },
     913             :     { "action",                 SUMO_ATTR_ACTION },
     914             :     { "geo",                    SUMO_ATTR_GEO },
     915             :     { "geoShape",               SUMO_ATTR_GEOSHAPE },
     916             :     { "k",                      SUMO_ATTR_K },
     917             :     { "v",                      SUMO_ATTR_V },
     918             :     { "ref",                    SUMO_ATTR_REF },
     919             :     { "href",                   SUMO_ATTR_HREF },
     920             :     { "zoom",                   SUMO_ATTR_ZOOM },
     921             :     { "interpolated",           SUMO_ATTR_INTERPOLATED },
     922             :     { "threshold",              SUMO_ATTR_THRESHOLD },
     923             : 
     924             :     { "netOffset",              SUMO_ATTR_NET_OFFSET },
     925             :     { "convBoundary",           SUMO_ATTR_CONV_BOUNDARY },
     926             :     { "origBoundary",           SUMO_ATTR_ORIG_BOUNDARY },
     927             :     { "projParameter",          SUMO_ATTR_ORIG_PROJ },
     928             : 
     929             :     { "tauLast",                SUMO_ATTR_CF_PWAGNER2009_TAULAST },
     930             :     { "apProb",                 SUMO_ATTR_CF_PWAGNER2009_APPROB },
     931             :     { "delta",                  SUMO_ATTR_CF_IDM_DELTA },
     932             :     { "stepping",               SUMO_ATTR_CF_IDM_STEPPING },
     933             :     { "adaptFactor",            SUMO_ATTR_CF_IDMM_ADAPT_FACTOR },
     934             :     { "adaptTime",              SUMO_ATTR_CF_IDMM_ADAPT_TIME },
     935             :     { "phi",                    SUMO_ATTR_CF_KERNER_PHI },
     936             : 
     937             :     { "security",               SUMO_ATTR_CF_WIEDEMANN_SECURITY },
     938             :     { "estimation",             SUMO_ATTR_CF_WIEDEMANN_ESTIMATION },
     939             :     { "cc1",                    SUMO_ATTR_CF_W99_CC1 },
     940             :     { "cc2",                    SUMO_ATTR_CF_W99_CC2 },
     941             :     { "cc3",                    SUMO_ATTR_CF_W99_CC3 },
     942             :     { "cc4",                    SUMO_ATTR_CF_W99_CC4 },
     943             :     { "cc5",                    SUMO_ATTR_CF_W99_CC5 },
     944             :     { "cc6",                    SUMO_ATTR_CF_W99_CC6 },
     945             :     { "cc7",                    SUMO_ATTR_CF_W99_CC7 },
     946             :     { "cc8",                    SUMO_ATTR_CF_W99_CC8 },
     947             :     { "cc9",                    SUMO_ATTR_CF_W99_CC9 },
     948             : 
     949             :     { "ccDecel",                SUMO_ATTR_CF_CC_CCDECEL },
     950             :     { "constSpacing",           SUMO_ATTR_CF_CC_CONSTSPACING },
     951             :     { "kp",                     SUMO_ATTR_CF_CC_KP },
     952             :     { "lambda",                 SUMO_ATTR_CF_CC_LAMBDA },
     953             :     { "c1",                     SUMO_ATTR_CF_CC_C1 },
     954             :     { "xi",                     SUMO_ATTR_CF_CC_XI },
     955             :     { "omegaN",                 SUMO_ATTR_CF_CC_OMEGAN },
     956             :     { "tauEngine",              SUMO_ATTR_CF_CC_TAU },
     957             :     { "lanesCount",             SUMO_ATTR_CF_CC_LANES_COUNT },
     958             :     { "ccAccel",                SUMO_ATTR_CF_CC_CCACCEL },
     959             :     { "ploegKp",                SUMO_ATTR_CF_CC_PLOEG_KP },
     960             :     { "ploegKd",                SUMO_ATTR_CF_CC_PLOEG_KD },
     961             :     { "ploegH",                 SUMO_ATTR_CF_CC_PLOEG_H },
     962             :     { "flatbedKa",              SUMO_ATTR_CF_CC_FLATBED_KA },
     963             :     { "flatbedKv",              SUMO_ATTR_CF_CC_FLATBED_KV },
     964             :     { "flatbedKp",              SUMO_ATTR_CF_CC_FLATBED_KP },
     965             :     { "flatbedD",               SUMO_ATTR_CF_CC_FLATBED_D },
     966             :     { "flatbedH",               SUMO_ATTR_CF_CC_FLATBED_H },
     967             : 
     968             :     { "generateWalks",          SUMO_ATTR_GENERATE_WALKS },
     969             :     { "actType",                SUMO_ATTR_ACTTYPE },
     970             :     { "junctionCornerDetail",   SUMO_ATTR_CORNERDETAIL },
     971             :     { "junctionLinkDetail",     SUMO_ATTR_LINKDETAIL },
     972             :     { "rectangularLaneCut",     SUMO_ATTR_RECTANGULAR_LANE_CUT },
     973             :     { "walkingareas",           SUMO_ATTR_WALKINGAREAS },
     974             :     { "lefthand",               SUMO_ATTR_LEFTHAND },
     975             :     { "limitTurnSpeed",         SUMO_ATTR_LIMIT_TURN_SPEED },
     976             :     { "checkLaneFoesAll",       SUMO_ATTR_CHECKLANEFOES_ALL },
     977             :     { "checkLaneFoesRoundabout", SUMO_ATTR_CHECKLANEFOES_ROUNDABOUT },
     978             :     { "tlsIgnoreInternalJunctionJam", SUMO_ATTR_TLS_IGNORE_INTERNAL_JUNCTION_JAM },
     979             :     { "avoidOverlap",           SUMO_ATTR_AVOID_OVERLAP },
     980             :     { "junctionHigherSpeed",    SUMO_ATTR_HIGHER_SPEED },
     981             :     { "internalJunctionsVehicleWidth", SUMO_ATTR_INTERNAL_JUNCTIONS_VEHICLE_WIDTH },
     982             :     { "junctionsMinimalShape",  SUMO_ATTR_JUNCTIONS_MINIMAL_SHAPE },
     983             :     { "junctionsEndpointShape", SUMO_ATTR_JUNCTIONS_ENDPOINT_SHAPE },
     984             : 
     985             :     { "actorConfig",            SUMO_ATTR_ACTORCONFIG },
     986             :     { "startTime",              SUMO_ATTR_STARTTIME },
     987             :     { "vehicleClass",           SUMO_ATTR_VEHICLECLASS },
     988             :     { "fuel",                   SUMO_ATTR_FUEL },
     989             :     { "origin",                 SUMO_ATTR_ORIGIN },
     990             :     { "destination",            SUMO_ATTR_DESTINATION },
     991             :     { "visible",                SUMO_ATTR_VISIBLE },
     992             :     { "limit",                  SUMO_ATTR_LIMIT },
     993             :     { "active",                 SUMO_ATTR_ACTIVE },
     994             :     { "arrivalTime",            SUMO_ATTR_ARRIVALTIME },
     995             :     { "arrivalTimeBraking",     SUMO_ATTR_ARRIVALTIMEBRAKING },
     996             :     { "arrivalSpeedBraking",    SUMO_ATTR_ARRIVALSPEEDBRAKING },
     997             :     { "optional",               SUMO_ATTR_OPTIONAL },
     998             : 
     999             : #ifndef WIN32
    1000             :     { "commandPosix",   SUMO_ATTR_COMMAND },
    1001             : #else
    1002             :     { "commandWindows", SUMO_ATTR_COMMAND },
    1003             : #endif
    1004             : 
    1005             :     // ActivityGen statistics file
    1006             :     { "inhabitants",            AGEN_ATTR_INHABITANTS },
    1007             :     { "households",             AGEN_ATTR_HOUSEHOLDS },
    1008             :     { "childrenAgeLimit",       AGEN_ATTR_CHILDREN },
    1009             :     { "retirementAgeLimit",     AGEN_ATTR_RETIREMENT },
    1010             :     { "carRate",                AGEN_ATTR_CARS },
    1011             :     { "unemploymentRate",       AGEN_ATTR_UNEMPLOYEMENT },
    1012             :     { "laborDemand",            AGEN_ATTR_LABORDEMAND },
    1013             :     { "footDistanceLimit",      AGEN_ATTR_MAX_FOOT_DIST },
    1014             :     { "incomingTraffic",        AGEN_ATTR_IN_TRAFFIC },
    1015             :     { "incoming",               AGEN_ATTR_INCOMING },
    1016             :     { "outgoingTraffic",        AGEN_ATTR_OUT_TRAFFIC },
    1017             :     { "outgoing",               AGEN_ATTR_OUTGOING },
    1018             :     { "population",             AGEN_ATTR_POPULATION },
    1019             :     { "workPosition",           AGEN_ATTR_OUT_WORKPOSITION },
    1020             :     { "hour",                   AGEN_ATTR_HOUR },
    1021             :     { "proportion",             AGEN_ATTR_PROP },
    1022             :     { "capacity",               AGEN_ATTR_CAPACITY },
    1023             :     { "opening",                AGEN_ATTR_OPENING },
    1024             :     { "closing",                AGEN_ATTR_CLOSING },
    1025             :     { "maxTripDuration",        AGEN_ATTR_MAX_TRIP_DURATION },
    1026             :     { "rate",                   AGEN_ATTR_RATE },
    1027             :     { "beginAge",               AGEN_ATTR_BEGINAGE },
    1028             :     { "endAge",                 AGEN_ATTR_ENDAGE },
    1029             :     { "peopleNbr",              AGEN_ATTR_PEOPLENBR },
    1030             :     { "carPreference",          AGEN_ATTR_CARPREF },
    1031             :     { "meanTimePerKmInCity",    AGEN_ATTR_CITYSPEED },
    1032             :     { "freeTimeActivityRate",   AGEN_ATTR_FREETIMERATE },
    1033             :     { "uniformRandomTraffic",   AGEN_ATTR_UNI_RAND_TRAFFIC },
    1034             :     { "departureVariation",     AGEN_ATTR_DEP_VARIATION },
    1035             : 
    1036             :     // SUMOConfig files
    1037             :     { "config-file",        SUMO_ATTR_CONFIGFILE },
    1038             :     { "net-file",           SUMO_ATTR_NETFILE },
    1039             :     { "additional-files",   SUMO_ATTR_ADDITIONALFILES },
    1040             :     { "route-files",        SUMO_ATTR_ROUTEFILES },
    1041             :     { "data-files",         SUMO_ATTR_DATAFILES },
    1042             :     { "meandata-files",     SUMO_ATTR_MEANDATAFILES },
    1043             : 
    1044             :     // Netedit attributes
    1045             :     { "selected",                           GNE_ATTR_SELECTED },
    1046             :     { "modificationStatusNotForPrinting",   GNE_ATTR_MODIFICATION_STATUS },
    1047             :     { "shapeStart",                         GNE_ATTR_SHAPE_START },
    1048             :     { "shapeEnd",                           GNE_ATTR_SHAPE_END },
    1049             :     { "isBidi",                             GNE_ATTR_BIDIR },
    1050             :     { "closedShape",                        GNE_ATTR_CLOSE_SHAPE },
    1051             :     { "parentItem",                         GNE_ATTR_PARENT },
    1052             :     { "dataSet",                            GNE_ATTR_DATASET },
    1053             :     { "genericParameter",                   GNE_ATTR_PARAMETERS },
    1054             :     { "flowParameter",                      GNE_ATTR_FLOWPARAMETERS },
    1055             :     { "defaultVTypeModified",               GNE_ATTR_DEFAULT_VTYPE_MODIFIED },
    1056             :     { "centerAfterCreation",                GNE_ATTR_CENTER_AFTER_CREATION },
    1057             :     { "opposite",                           GNE_ATTR_OPPOSITE },
    1058             :     { "shiftLaneIndex",                     GNE_ATTR_SHIFTLANEINDEX },
    1059             :     { "stopOffset",                         GNE_ATTR_STOPOFFSET },
    1060             :     { "stopOException",                     GNE_ATTR_STOPOEXCEPTION },
    1061             :     { "routeDist.",                         GNE_ATTR_ROUTE_DISTRIBUTION },
    1062             :     { "typeDist.",                          GNE_ATTR_VTYPE_DISTRIBUTION },
    1063             :     { "poisson",                            GNE_ATTR_POISSON },
    1064             :     { "stopIndex",                          GNE_ATTR_STOPINDEX },
    1065             :     { "pathStopIndex",                      GNE_ATTR_PATHSTOPINDEX },
    1066             :     { "additionalChildren",                 GNE_ATTR_ADDITIONALCHILDREN },
    1067             :     { "planGeometryStartPos",               GNE_ATTR_PLAN_GEOMETRY_STARTPOS },
    1068             :     { "planGeometryEndPos",                 GNE_ATTR_PLAN_GEOMETRY_ENDPOS },
    1069             :     { "fromLaneID",                         GNE_ATTR_FROM_LANEID },
    1070             :     { "toLaneID",                           GNE_ATTR_TO_LANEID },
    1071             :     // mapped to additioanl elements on writing
    1072             :     { "fromBusStop",                        GNE_ATTR_FROM_BUSSTOP },
    1073             :     { "fromTrainStop",                      GNE_ATTR_FROM_TRAINSTOP },
    1074             :     { "fromContainerStop",                  GNE_ATTR_FROM_CONTAINERSTOP },
    1075             : 
    1076             :     { "carriageLength",     SUMO_ATTR_CARRIAGE_LENGTH },
    1077             :     { "locomotiveLength",   SUMO_ATTR_LOCOMOTIVE_LENGTH },
    1078             :     { "carriageGap",        SUMO_ATTR_CARRIAGE_GAP },
    1079             :     { "carriageDoors",      SUMO_ATTR_CARRIAGE_DOORS },
    1080             : 
    1081             :     { "targetLanes",    SUMO_ATTR_TARGETLANE },
    1082             :     { "crossing",       SUMO_ATTR_CROSSING },
    1083             : 
    1084             :     { "xmlns:xsi",                      SUMO_ATTR_XMLNS },
    1085             :     { "xsi:noNamespaceSchemaLocation",  SUMO_ATTR_SCHEMA_LOCATION },
    1086             : 
    1087             :     //@name RNG state saving attributes
    1088             :     // @{
    1089             :     { "routeHandler",      SUMO_ATTR_RNG_ROUTEHANDLER },
    1090             :     { "insertionControl",  SUMO_ATTR_RNG_INSERTIONCONTROL },
    1091             :     { "device",            SUMO_ATTR_RNG_DEVICE },
    1092             :     { "device.btreceiver", SUMO_ATTR_RNG_DEVICE_BT },
    1093             :     { "device.toc",        SUMO_ATTR_RNG_DEVICE_TOC },
    1094             :     { "driverState",       SUMO_ATTR_RNG_DRIVERSTATE },
    1095             :     // @}
    1096             : 
    1097             :     //@name meso edge type attributes
    1098             :     // @{
    1099             :     { "tauff",             SUMO_ATTR_MESO_TAUFF },
    1100             :     { "taufj",             SUMO_ATTR_MESO_TAUFJ },
    1101             :     { "taujf",             SUMO_ATTR_MESO_TAUJF },
    1102             :     { "taujj",             SUMO_ATTR_MESO_TAUJJ },
    1103             :     { "junctionControl",   SUMO_ATTR_MESO_JUNCTION_CONTROL },
    1104             :     { "tlsPenalty",        SUMO_ATTR_MESO_TLS_PENALTY },
    1105             :     { "tlsFlowPenalty",    SUMO_ATTR_MESO_TLS_FLOW_PENALTY },
    1106             :     { "minorPenalty",      SUMO_ATTR_MESO_MINOR_PENALTY },
    1107             :     { "overtaking",        SUMO_ATTR_MESO_OVERTAKING },
    1108             :     // @}
    1109             : 
    1110             :     // Other
    1111             :     { "",                       SUMO_ATTR_NOTHING } //< must be the last one
    1112             : };
    1113             : 
    1114             : 
    1115             : const std::string SUMO_PARAM_ORIGID("origId");
    1116             : 
    1117             : 
    1118             : StringBijection<SumoXMLNodeType>::Entry SUMOXMLDefinitions::sumoNodeTypeValues[] = {
    1119             :     {"traffic_light",               SumoXMLNodeType::TRAFFIC_LIGHT},
    1120             :     {"traffic_light_unregulated",   SumoXMLNodeType::TRAFFIC_LIGHT_NOJUNCTION},
    1121             :     {"traffic_light_right_on_red",  SumoXMLNodeType::TRAFFIC_LIGHT_RIGHT_ON_RED},
    1122             :     {"rail_signal",                 SumoXMLNodeType::RAIL_SIGNAL},
    1123             :     {"rail_crossing",               SumoXMLNodeType::RAIL_CROSSING},
    1124             :     {"priority",                    SumoXMLNodeType::PRIORITY},
    1125             :     {"priority_stop",               SumoXMLNodeType::PRIORITY_STOP},
    1126             :     {"right_before_left",           SumoXMLNodeType::RIGHT_BEFORE_LEFT},
    1127             :     {"left_before_right",           SumoXMLNodeType::LEFT_BEFORE_RIGHT},
    1128             :     {"allway_stop",                 SumoXMLNodeType::ALLWAY_STOP},
    1129             :     {"zipper",                      SumoXMLNodeType::ZIPPER},
    1130             :     {"district",                    SumoXMLNodeType::DISTRICT},
    1131             :     {"unregulated",                 SumoXMLNodeType::NOJUNCTION},
    1132             :     {"internal",                    SumoXMLNodeType::INTERNAL},
    1133             :     {"dead_end",                    SumoXMLNodeType::DEAD_END},
    1134             :     {"DEAD_END",                    SumoXMLNodeType::DEAD_END_DEPRECATED},
    1135             :     {"unknown",                     SumoXMLNodeType::UNKNOWN} //< must be the last one
    1136             : };
    1137             : 
    1138             : 
    1139             : StringBijection<SumoXMLEdgeFunc>::Entry SUMOXMLDefinitions::sumoEdgeFuncValues[] = {
    1140             :     {"unknown",     SumoXMLEdgeFunc::UNKNOWN},
    1141             :     {"normal",      SumoXMLEdgeFunc::NORMAL},
    1142             :     {"connector",   SumoXMLEdgeFunc::CONNECTOR},
    1143             :     {"crossing",    SumoXMLEdgeFunc::CROSSING},
    1144             :     {"walkingarea", SumoXMLEdgeFunc::WALKINGAREA},
    1145             :     {"internal",    SumoXMLEdgeFunc::INTERNAL} //< must be the last one
    1146             : };
    1147             : 
    1148             : 
    1149             : StringBijection<LaneSpreadFunction>::Entry SUMOXMLDefinitions::laneSpreadFunctionValues[] = {
    1150             :     {"right",      LaneSpreadFunction::RIGHT }, // default: geometry is left edge border, lanes flare to the right
    1151             :     {"roadCenter", LaneSpreadFunction::ROADCENTER }, // geometry is center of the bidirectional road
    1152             :     {"center",     LaneSpreadFunction::CENTER } // geometry is center of the edge (must be the last one)
    1153             : };
    1154             : 
    1155             : StringBijection<ParkingType>::Entry SUMOXMLDefinitions::parkingTypeValues[] = {
    1156             :     {"0",              ParkingType::ONROAD },   // default: park on the street
    1157             :     {"1",              ParkingType::OFFROAD },    // parking off the street
    1158             :     {"opportunistic",  ParkingType::OPPORTUNISTIC } // park of the street if there is an opportunity for it
    1159             : };
    1160             : 
    1161             : StringBijection<RightOfWay>::Entry SUMOXMLDefinitions::rightOfWayValuesInitializer[] = {
    1162             :     {"edgePriority",  RightOfWay::EDGEPRIORITY }, // use only edge priority values
    1163             :     {"mixedPriority", RightOfWay::MIXEDPRIORITY }, // use the default behavior but encode this explicitly (only needed for overriding the NEMA fallback behavior)
    1164             :     {"allwayStop",    RightOfWay::ALLWAYSTOP }, // only used for setting the fall-back behavior of TLS-off
    1165             :     {"default",       RightOfWay::DEFAULT } // default (must be the last one)
    1166             : };
    1167             : 
    1168             : StringBijection<FringeType>::Entry SUMOXMLDefinitions::fringeTypeValuesInitializer[] = {
    1169             :     {"outer",   FringeType::OUTER },
    1170             :     {"inner",   FringeType::INNER },
    1171             :     {"default", FringeType::DEFAULT } // default (must be the last one)
    1172             : };
    1173             : 
    1174             : StringBijection<PersonMode>::Entry SUMOXMLDefinitions::personModeValuesInitializer[] = {
    1175             :     {"none",         PersonMode::NONE},
    1176             :     {"walkForward",  PersonMode::WALK_FORWARD},
    1177             :     {"walkBackward", PersonMode::WALK_BACKWARD},
    1178             :     {"walk",         PersonMode::WALK},
    1179             :     {"bicycle",      PersonMode::BICYCLE },
    1180             :     {"car",          PersonMode::CAR },
    1181             :     {"taxi",         PersonMode::TAXI },
    1182             :     {"public",       PersonMode::PUBLIC} // (must be the last one)
    1183             : };
    1184             : 
    1185             : StringBijection<LinkState>::Entry SUMOXMLDefinitions::linkStateValues[] = {
    1186             :     { "G", LINKSTATE_TL_GREEN_MAJOR },
    1187             :     { "g", LINKSTATE_TL_GREEN_MINOR },
    1188             :     { "r", LINKSTATE_TL_RED },
    1189             :     { "u", LINKSTATE_TL_REDYELLOW },
    1190             :     { "Y", LINKSTATE_TL_YELLOW_MAJOR },
    1191             :     { "y", LINKSTATE_TL_YELLOW_MINOR },
    1192             :     { "o", LINKSTATE_TL_OFF_BLINKING },
    1193             :     { "O", LINKSTATE_TL_OFF_NOSIGNAL },
    1194             :     { "M", LINKSTATE_MAJOR },
    1195             :     { "m", LINKSTATE_MINOR },
    1196             :     { "=", LINKSTATE_EQUAL },
    1197             :     { "s", LINKSTATE_STOP },
    1198             :     { "w", LINKSTATE_ALLWAY_STOP },
    1199             :     { "Z", LINKSTATE_ZIPPER },
    1200             :     { "-", LINKSTATE_DEADEND } //< must be the last one
    1201             : };
    1202             : 
    1203             : const char SUMOXMLDefinitions::AllowedTLS_linkStatesInitializer[] = {
    1204             :     LINKSTATE_TL_GREEN_MAJOR,
    1205             :     LINKSTATE_TL_GREEN_MINOR,
    1206             :     LINKSTATE_STOP, // used for SumoXMLNodeType::TRAFFIC_LIGHT_RIGHT_ON_RED
    1207             :     LINKSTATE_TL_RED,
    1208             :     LINKSTATE_TL_REDYELLOW,
    1209             :     LINKSTATE_TL_YELLOW_MAJOR,
    1210             :     LINKSTATE_TL_YELLOW_MINOR,
    1211             :     LINKSTATE_TL_OFF_BLINKING,
    1212             :     LINKSTATE_TL_OFF_NOSIGNAL
    1213             : };
    1214             : const std::string SUMOXMLDefinitions::ALLOWED_TLS_LINKSTATES(AllowedTLS_linkStatesInitializer, 9);
    1215             : 
    1216             : StringBijection<LinkDirection>::Entry SUMOXMLDefinitions::linkDirectionValues[] = {
    1217             :     { "s",      LinkDirection::STRAIGHT },
    1218             :     { "t",      LinkDirection::TURN },
    1219             :     { "T",      LinkDirection::TURN_LEFTHAND },
    1220             :     { "l",      LinkDirection::LEFT },
    1221             :     { "r",      LinkDirection::RIGHT },
    1222             :     { "L",      LinkDirection::PARTLEFT },
    1223             :     { "R",      LinkDirection::PARTRIGHT },
    1224             :     { "invalid", LinkDirection::NODIR } //< must be the last one
    1225             : };
    1226             : 
    1227             : 
    1228             : StringBijection<TrafficLightType>::Entry SUMOXMLDefinitions::trafficLightTypesValues[] = {
    1229             :     { "static",         TrafficLightType::STATIC },
    1230             :     { "railSignal",     TrafficLightType::RAIL_SIGNAL },
    1231             :     { "railCrossing",   TrafficLightType::RAIL_CROSSING },
    1232             :     { "actuated",       TrafficLightType::ACTUATED },
    1233             :     { "NEMA",           TrafficLightType::NEMA },
    1234             :     { "delay_based",    TrafficLightType::DELAYBASED },
    1235             :     { "sotl_phase",     TrafficLightType::SOTL_PHASE },
    1236             :     { "sotl_platoon",   TrafficLightType::SOTL_PLATOON },
    1237             :     { "sotl_request",   TrafficLightType::SOTL_REQUEST },
    1238             :     { "sotl_wave",      TrafficLightType::SOTL_WAVE },
    1239             :     { "sotl_marching",  TrafficLightType::SOTL_MARCHING },
    1240             :     { "swarm",          TrafficLightType::SWARM_BASED },
    1241             :     { "deterministic",  TrafficLightType::HILVL_DETERMINISTIC },
    1242             :     { "off",            TrafficLightType::OFF },
    1243             :     { "<invalid>",      TrafficLightType::INVALID } //< must be the last one
    1244             : };
    1245             : 
    1246             : 
    1247             : StringBijection<TrafficLightLayout>::Entry SUMOXMLDefinitions::trafficLightLayoutValues[] = {
    1248             :     { "opposites",       TrafficLightLayout::OPPOSITES },
    1249             :     { "incoming",        TrafficLightLayout::INCOMING },
    1250             :     { "alternateOneWay", TrafficLightLayout::ALTERNATE_ONEWAY },
    1251             :     { "default",         TrafficLightLayout::DEFAULT } //< must be the last one
    1252             : };
    1253             : 
    1254             : StringBijection<InsertionCheck>::Entry SUMOXMLDefinitions::insertionCheckValues[] = {
    1255             :     { "none",          InsertionCheck::NONE },
    1256             :     { "collision",     InsertionCheck::COLLISION },
    1257             :     { "leaderGap",     InsertionCheck::LEADER_GAP },
    1258             :     { "followerGap",   InsertionCheck::FOLLOWER_GAP },
    1259             :     { "junction",      InsertionCheck::JUNCTION },
    1260             :     { "stop",          InsertionCheck::STOP },
    1261             :     { "arrivalSpeed",  InsertionCheck::ARRIVAL_SPEED },
    1262             :     { "oncomingTrain", InsertionCheck::ONCOMING_TRAIN },
    1263             :     { "speedLimit",    InsertionCheck::SPEED_LIMIT },
    1264             :     { "pedestrian",    InsertionCheck::PEDESTRIAN },
    1265             :     { "bidi",          InsertionCheck::BIDI },
    1266             :     { "laneChange",    InsertionCheck::LANECHANGE },
    1267             :     { "all",           InsertionCheck::ALL } //< must be the last one
    1268             : };
    1269             : 
    1270             : StringBijection<LaneChangeModel>::Entry SUMOXMLDefinitions::laneChangeModelValues[] = {
    1271             :     { "DK2008",     LaneChangeModel::DK2008 },
    1272             :     { "LC2013",     LaneChangeModel::LC2013 },
    1273             :     { "LC2013_CC",  LaneChangeModel::LC2013_CC },
    1274             :     { "SL2015",     LaneChangeModel::SL2015 },
    1275             :     { "default",    LaneChangeModel::DEFAULT } //< must be the last one
    1276             : };
    1277             : 
    1278             : StringBijection<SumoXMLTag>::Entry SUMOXMLDefinitions::carFollowModelValues[] = {
    1279             :     { "IDM",         SUMO_TAG_CF_IDM },
    1280             :     { "IDMM",        SUMO_TAG_CF_IDMM },
    1281             :     { "Krauss",      SUMO_TAG_CF_KRAUSS },
    1282             :     { "KraussPS",    SUMO_TAG_CF_KRAUSS_PLUS_SLOPE },
    1283             :     { "KraussOrig1", SUMO_TAG_CF_KRAUSS_ORIG1 },
    1284             :     { "KraussX",     SUMO_TAG_CF_KRAUSSX }, // experimental extensions to the Krauss model
    1285             :     { "EIDM",        SUMO_TAG_CF_EIDM },
    1286             :     { "SmartSK",     SUMO_TAG_CF_SMART_SK },
    1287             :     { "Daniel1",     SUMO_TAG_CF_DANIEL1 },
    1288             :     { "PWagner2009", SUMO_TAG_CF_PWAGNER2009 },
    1289             :     { "BKerner",     SUMO_TAG_CF_BKERNER },
    1290             :     { "Rail",        SUMO_TAG_CF_RAIL },
    1291             :     { "CC",          SUMO_TAG_CF_CC },
    1292             :     { "ACC",         SUMO_TAG_CF_ACC },
    1293             :     { "CACC",        SUMO_TAG_CF_CACC },
    1294             :     { "W99",         SUMO_TAG_CF_W99 },
    1295             :     { "Wiedemann",   SUMO_TAG_CF_WIEDEMANN } //< must be the last one
    1296             : };
    1297             : 
    1298             : StringBijection<LaneChangeAction>::Entry SUMOXMLDefinitions::laneChangeActionValues[] = {
    1299             :     { "stay",        LCA_STAY },
    1300             :     { "left",        LCA_LEFT },
    1301             :     { "right",       LCA_RIGHT },
    1302             :     { "strategic",   LCA_STRATEGIC },
    1303             :     { "cooperative", LCA_COOPERATIVE },
    1304             :     { "speedGain",   LCA_SPEEDGAIN },
    1305             :     { "keepRight",   LCA_KEEPRIGHT },
    1306             :     { "sublane",     LCA_SUBLANE },
    1307             :     { "traci",       LCA_TRACI },
    1308             :     { "urgent",      LCA_URGENT },
    1309             :     { "overlapping", LCA_OVERLAPPING },
    1310             :     { "blocked",     LCA_BLOCKED },
    1311             :     { "amBL",        LCA_AMBLOCKINGLEADER },
    1312             :     { "amBF",        LCA_AMBLOCKINGFOLLOWER },
    1313             :     { "amBB",        LCA_AMBACKBLOCKER },
    1314             :     { "amBBS",       LCA_AMBACKBLOCKER_STANDING },
    1315             :     { "MR",          LCA_MRIGHT },
    1316             :     { "ML",          LCA_MLEFT },
    1317             : 
    1318             :     { "unknown",     LCA_UNKNOWN } //< must be the last one
    1319             : };
    1320             : 
    1321             : StringBijection<TrainType>::Entry SUMOXMLDefinitions::trainTypeValues[] = {
    1322             :     { "custom",     TrainType::CUSTOM },
    1323             :     { "NGT400",     TrainType::NGT400 },
    1324             :     { "NGT400_16",  TrainType::NGT400_16 },
    1325             :     { "RB425",      TrainType::RB425 },
    1326             :     { "RB628",      TrainType::RB628 },
    1327             :     { "ICE1",       TrainType::ICE1 },
    1328             :     { "REDosto7",   TrainType::REDOSTO7 },
    1329             :     { "Freight",    TrainType::FREIGHT },
    1330             :     { "ICE3",       TrainType::ICE3 },
    1331             :     { "MireoPlusB", TrainType::MIREOPLUSB },
    1332             :     { "MireoPlusH", TrainType::MIREOPLUSH }
    1333             : };
    1334             : 
    1335             : StringBijection<POIIcon>::Entry SUMOXMLDefinitions::POIIconValues[] = {
    1336             :     {"pin",              POIIcon::PIN},
    1337             :     {"tree",             POIIcon::NATURE},
    1338             :     {"hotel",            POIIcon::HOTEL},
    1339             :     {"fuel",             POIIcon::FUEL},
    1340             :     {"charging_station", POIIcon::CHARGING_STATION},
    1341             :     {"",                 POIIcon::NONE} //< must be the last one
    1342             : };
    1343             : 
    1344             : StringBijection<int> SUMOXMLDefinitions::Tags(
    1345             :     SUMOXMLDefinitions::tags, SUMO_TAG_NOTHING);
    1346             : 
    1347             : StringBijection<int> SUMOXMLDefinitions::Attrs(
    1348             :     SUMOXMLDefinitions::attrs, SUMO_ATTR_NOTHING);
    1349             : 
    1350             : StringBijection<SumoXMLNodeType> SUMOXMLDefinitions::NodeTypes(
    1351             :     SUMOXMLDefinitions::sumoNodeTypeValues, SumoXMLNodeType::UNKNOWN);
    1352             : 
    1353             : StringBijection<SumoXMLEdgeFunc> SUMOXMLDefinitions::EdgeFunctions(
    1354             :     SUMOXMLDefinitions::sumoEdgeFuncValues, SumoXMLEdgeFunc::INTERNAL);
    1355             : 
    1356             : StringBijection<LaneSpreadFunction> SUMOXMLDefinitions::LaneSpreadFunctions(
    1357             :     SUMOXMLDefinitions::laneSpreadFunctionValues, LaneSpreadFunction::CENTER);
    1358             : 
    1359             : StringBijection<ParkingType> SUMOXMLDefinitions::ParkingTypes(
    1360             :     SUMOXMLDefinitions::parkingTypeValues, ParkingType::OPPORTUNISTIC);
    1361             : 
    1362             : StringBijection<RightOfWay> SUMOXMLDefinitions::RightOfWayValues(
    1363             :     SUMOXMLDefinitions::rightOfWayValuesInitializer, RightOfWay::DEFAULT);
    1364             : 
    1365             : StringBijection<FringeType> SUMOXMLDefinitions::FringeTypeValues(
    1366             :     SUMOXMLDefinitions::fringeTypeValuesInitializer, FringeType::DEFAULT);
    1367             : 
    1368             : StringBijection<PersonMode> SUMOXMLDefinitions::PersonModeValues(
    1369             :     SUMOXMLDefinitions::personModeValuesInitializer, PersonMode::PUBLIC);
    1370             : 
    1371             : StringBijection<LinkState> SUMOXMLDefinitions::LinkStates(
    1372             :     SUMOXMLDefinitions::linkStateValues, LINKSTATE_DEADEND);
    1373             : 
    1374             : StringBijection<LinkDirection> SUMOXMLDefinitions::LinkDirections(
    1375             :     SUMOXMLDefinitions::linkDirectionValues, LinkDirection::NODIR);
    1376             : 
    1377             : StringBijection<TrafficLightType> SUMOXMLDefinitions::TrafficLightTypes(
    1378             :     SUMOXMLDefinitions::trafficLightTypesValues, TrafficLightType::INVALID);
    1379             : 
    1380             : StringBijection<TrafficLightLayout> SUMOXMLDefinitions::TrafficLightLayouts(
    1381             :     SUMOXMLDefinitions::trafficLightLayoutValues, TrafficLightLayout::DEFAULT);
    1382             : 
    1383             : StringBijection<InsertionCheck> SUMOXMLDefinitions::InsertionChecks(
    1384             :     SUMOXMLDefinitions::insertionCheckValues, InsertionCheck::ALL);
    1385             : 
    1386             : StringBijection<LaneChangeModel> SUMOXMLDefinitions::LaneChangeModels(
    1387             :     SUMOXMLDefinitions::laneChangeModelValues, LaneChangeModel::DEFAULT);
    1388             : 
    1389             : StringBijection<SumoXMLTag> SUMOXMLDefinitions::CarFollowModels(
    1390             :     SUMOXMLDefinitions::carFollowModelValues, SUMO_TAG_CF_WIEDEMANN);
    1391             : 
    1392             : StringBijection<LaneChangeAction> SUMOXMLDefinitions::LaneChangeActions(
    1393             :     SUMOXMLDefinitions::laneChangeActionValues, LCA_UNKNOWN);
    1394             : 
    1395             : StringBijection<TrainType> SUMOXMLDefinitions::TrainTypes(
    1396             :     SUMOXMLDefinitions::trainTypeValues, TrainType::MIREOPLUSH);
    1397             : 
    1398             : StringBijection<POIIcon> SUMOXMLDefinitions::POIIcons(
    1399             :     SUMOXMLDefinitions::POIIconValues, POIIcon::NONE, false);
    1400             : 
    1401             : 
    1402             : std::string
    1403     1044964 : SUMOXMLDefinitions::getJunctionIDFromInternalEdge(const std::string internalEdge) {
    1404             :     assert(internalEdge[0] == ':');
    1405     1044964 :     return internalEdge.substr(1, internalEdge.rfind('_') - 1);
    1406             : }
    1407             : 
    1408             : 
    1409             : std::string
    1410    16950846 : SUMOXMLDefinitions::getEdgeIDFromLane(const std::string laneID) {
    1411    16950846 :     return laneID.substr(0, laneID.rfind('_'));
    1412             : }
    1413             : 
    1414             : int
    1415       17644 : SUMOXMLDefinitions::getIndexFromLane(const std::string laneID) {
    1416       35288 :     return StringUtils::toInt(laneID.substr(laneID.rfind('_') + 1));
    1417             : }
    1418             : 
    1419             : 
    1420             : bool
    1421      242326 : SUMOXMLDefinitions::isValidNetID(const std::string& value) {
    1422      484652 :     return (value.size() > 0) && value.find_first_of(" \t\n\r|\\'\";,<>&") == std::string::npos && value[0] != ':';
    1423             : }
    1424             : 
    1425             : 
    1426             : bool
    1427      790788 : SUMOXMLDefinitions::isValidVehicleID(const std::string& value) {
    1428     1581568 :     return (value.size() > 0) && value.find_first_of(" \t\n\r|\\'\";,<>&") == std::string::npos;
    1429             : }
    1430             : 
    1431             : 
    1432             : bool
    1433       18386 : SUMOXMLDefinitions::isValidTypeID(const std::string& value) {
    1434       36772 :     return (value.size() > 0) && value.find_first_of(" \t\n\r|\\'\";,<>&") == std::string::npos;
    1435             : }
    1436             : 
    1437             : bool
    1438           0 : SUMOXMLDefinitions::isValidAdditionalID(const std::string& value) {
    1439           0 :     return (value.size() > 0) && value.find_first_of(" \t\n\r|\\'\";,<>&") == std::string::npos;
    1440             : }
    1441             : 
    1442             : bool
    1443           0 : SUMOXMLDefinitions::isValidDetectorID(const std::string& value) {
    1444             :     // special case: ' ' allowed
    1445           0 :     return (value.size() > 0) && value.find_first_of("\t\n\r|\\'\";,<>&") == std::string::npos;
    1446             : }
    1447             : 
    1448             : bool
    1449        1428 : SUMOXMLDefinitions::isValidAttribute(const std::string& value) {
    1450        1428 :     return value.find_first_of("\t\n\r&|\\'\"<>") == std::string::npos;
    1451             : }
    1452             : 
    1453             : 
    1454             : bool
    1455           0 : SUMOXMLDefinitions::isValidFilename(const std::string& value) {
    1456           0 :     return (value.find_first_of("\t\n\r@$%^&|{}*'\";<>") == std::string::npos);
    1457             : }
    1458             : 
    1459             : 
    1460             : bool
    1461           0 : SUMOXMLDefinitions::isValidListOfNetIDs(const std::string& value) {
    1462           0 :     const std::vector<std::string>& typeIDs = StringTokenizer(value).getVector();
    1463           0 :     if (typeIDs.empty()) {
    1464             :         return false;
    1465             :     } else {
    1466             :         // check that gives IDs are valid
    1467           0 :         for (auto i : typeIDs) {
    1468           0 :             if (!SUMOXMLDefinitions::isValidNetID(i)) {
    1469             :                 return false;
    1470             :             }
    1471             :         }
    1472           0 :         return true;
    1473             :     }
    1474           0 : }
    1475             : 
    1476             : 
    1477             : bool
    1478           0 : SUMOXMLDefinitions::isValidListOfTypeID(const std::string& value) {
    1479           0 :     return isValidListOfTypeID(StringTokenizer(value).getVector());
    1480             : }
    1481             : 
    1482             : 
    1483             : bool
    1484           0 : SUMOXMLDefinitions::isValidListOfTypeID(const std::vector<std::string>& typeIDs) {
    1485           0 :     if (typeIDs.empty()) {
    1486             :         return false;
    1487             :     } else {
    1488             :         // check that gives IDs are valid
    1489           0 :         for (const auto& typeID : typeIDs) {
    1490           0 :             if (!SUMOXMLDefinitions::isValidTypeID(typeID)) {
    1491             :                 return false;
    1492             :             }
    1493             :         }
    1494             :         return true;
    1495             :     }
    1496             : }
    1497             : 
    1498             : 
    1499             : bool
    1500        1428 : SUMOXMLDefinitions::isValidParameterKey(const std::string& value) {
    1501             :     // Generic parameters keys cannot be empty
    1502        1428 :     if (value.empty()) {
    1503             :         return false;
    1504             :     } else {
    1505        1428 :         return isValidAttribute(value);
    1506             :     }
    1507             : }
    1508             : 
    1509             : /****************************************************************************/

Generated by: LCOV version 1.14