Eclipse SUMO - Simulation of Urban MObility
SUMOVehicleParameter.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2001-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 /****************************************************************************/
20 // Structure representing possible vehicle parameter
21 /****************************************************************************/
22 #include <config.h>
26 #include <utils/common/ToString.h>
30 
31 #include "SUMOVehicleParameter.h"
32 
33 // ===========================================================================
34 // member method definitions
35 // ===========================================================================
36 
38  : tag(SUMO_TAG_NOTHING), vtypeid(DEFAULT_VTYPE_ID), color(RGBColor::DEFAULT_COLOR),
39  depart(-1), departProcedure(DepartDefinition::GIVEN),
40  departLane(0), departLaneProcedure(DepartLaneDefinition::DEFAULT),
41  departPos(0), departPosProcedure(DepartPosDefinition::DEFAULT),
42  departPosLat(0), departPosLatProcedure(DepartPosLatDefinition::DEFAULT),
43  departSpeed(-1), departSpeedProcedure(DepartSpeedDefinition::DEFAULT),
44  departEdge(0), departEdgeProcedure(RouteIndexDefinition::DEFAULT),
45  arrivalLane(0), arrivalLaneProcedure(ArrivalLaneDefinition::DEFAULT),
46  arrivalPos(0), arrivalPosProcedure(ArrivalPosDefinition::DEFAULT),
47  arrivalPosLat(0), arrivalPosLatProcedure(ArrivalPosLatDefinition::DEFAULT),
48  arrivalSpeed(-1), arrivalSpeedProcedure(ArrivalSpeedDefinition::DEFAULT),
49  arrivalEdge(-1), arrivalEdgeProcedure(RouteIndexDefinition::DEFAULT),
50  repetitionNumber(-1),
51  repetitionsDone(-1),
52  repetitionOffset(-1),
53  repetitionTotalOffset(0),
54  repetitionProbability(-1),
55  poissonRate(0),
56  repetitionEnd(-1),
57  line(), fromTaz(), toTaz(), personNumber(0), containerNumber(0),
58  speedFactor(-1),
59  calibratorSpeed(-1),
60  insertionChecks((int)InsertionCheck::ALL),
61  parametersSet(0)
62 { }
63 
64 
66 }
67 
68 
69 bool
70 SUMOVehicleParameter::defaultOptionOverrides(const OptionsCont& oc, const std::string& optionName) const {
71  return oc.exists(optionName) && oc.isSet(optionName) && oc.getBool("defaults-override");
72 }
73 
74 
75 void
76 SUMOVehicleParameter::write(OutputDevice& dev, const OptionsCont& oc, const SumoXMLTag altTag, const std::string& typeID) const {
77  if (!id.empty()) {
78  // only used by calibrator flows
79  dev.openTag(altTag).writeAttr(SUMO_ATTR_ID, id);
80  }
81  if (typeID == "") {
84  }
85  } else {
86  dev.writeAttr(SUMO_ATTR_TYPE, typeID);
87  }
88  // write depart depending of tag
89  if (altTag == SUMO_TAG_FLOW
90  || altTag == SUMO_TAG_PERSONFLOW
91  || altTag == SUMO_TAG_CONTAINERFLOW
92  || altTag == GNE_TAG_FLOW_ROUTE
93  || altTag == GNE_TAG_FLOW_WITHROUTE
94  || altTag == SUMO_TAG_FLOWSTATE) {
96  } else {
98  }
99  // optional parameter
100  // departlane
101  if (wasSet(VEHPARS_DEPARTLANE_SET) && !defaultOptionOverrides(oc, "departlane")) {
103  } else if (oc.exists("departlane") && oc.isSet("departlane")) {
104  dev.writeNonEmptyAttr(SUMO_ATTR_DEPARTLANE, oc.getString("departlane"));
105  }
106  // departpos
107  if (wasSet(VEHPARS_DEPARTPOS_SET) && !defaultOptionOverrides(oc, "departpos")) {
109  } else if (oc.exists("departpos") && oc.isSet("departpos")) {
110  dev.writeNonEmptyAttr(SUMO_ATTR_DEPARTPOS, oc.getString("departpos"));
111  }
112  // departPosLat
115  }
116  // departspeed
117  if (wasSet(VEHPARS_DEPARTSPEED_SET) && !defaultOptionOverrides(oc, "departspeed")) {
119  } else if (oc.exists("departspeed") && oc.isSet("departspeed")) {
120  dev.writeNonEmptyAttr(SUMO_ATTR_DEPARTSPEED, oc.getString("departspeed"));
121  }
122  // departedge
123  if (wasSet(VEHPARS_DEPARTEDGE_SET) && !defaultOptionOverrides(oc, "departedge")) {
125  } else if (oc.exists("departedge") && oc.isSet("departedge")) {
126  dev.writeNonEmptyAttr(SUMO_ATTR_DEPARTEDGE, oc.getString("departedge"));
127  }
128  // arrivallane
129  if (wasSet(VEHPARS_ARRIVALLANE_SET) && !defaultOptionOverrides(oc, "arrivallane")) {
131  } else if (oc.exists("arrivallane") && oc.isSet("arrivallane")) {
132  dev.writeNonEmptyAttr(SUMO_ATTR_ARRIVALLANE, oc.getString("arrivallane"));
133  }
134  // arrivalpos
135  if (wasSet(VEHPARS_ARRIVALPOS_SET) && !defaultOptionOverrides(oc, "arrivalpos")) {
137  } else if (oc.exists("arrivalpos") && oc.isSet("arrivalpos")) {
138  dev.writeNonEmptyAttr(SUMO_ATTR_ARRIVALPOS, oc.getString("arrivalpos"));
139  }
140  // arrivalPosLat
143  }
144  // arrivalspeed
145  if (wasSet(VEHPARS_ARRIVALSPEED_SET) && !defaultOptionOverrides(oc, "arrivalspeed")) {
147  } else if (oc.exists("arrivalspeed") && oc.isSet("arrivalspeed")) {
148  dev.writeNonEmptyAttr(SUMO_ATTR_ARRIVALSPEED, oc.getString("arrivalspeed"));
149  }
150  // arrivalEdge
151  if (wasSet(VEHPARS_ARRIVALEDGE_SET) && !defaultOptionOverrides(oc, "arrivaledge") && arrivalEdge >= 0) {
153  } else if (oc.exists("arrivaledge") && oc.isSet("arrivaledge")) {
154  dev.writeNonEmptyAttr(SUMO_ATTR_ARRIVALEDGE, oc.getString("arrivaledge"));
155  }
156  // color
157  if (wasSet(VEHPARS_COLOR_SET)) {
159  }
160  // line
161  if (wasSet(VEHPARS_LINE_SET)) {
163  }
164  // from TAZ
167  }
168  // to TAZ
169  if (wasSet(VEHPARS_TO_TAZ_SET)) {
171  }
172  // person number
175  }
176  // container number
179  }
180  // individual speedFactor
182  // might be saving state with custom precision
183  const int precision = dev.precision();
184  dev.setPrecision(MAX2(gPrecisionRandom, precision));
186  dev.setPrecision(precision);
187  }
188  // speed (only used by calibrators)
191  }
192  // speed (only used by calibrators)
193  if (insertionChecks != (int)InsertionCheck::ALL) {
194  std::vector<std::string> checks;
196  checks.push_back(toString(InsertionCheck::NONE));
197  } else {
198  for (auto it : SUMOXMLDefinitions::InsertionChecks.getValues()) {
199  if (((int)it & insertionChecks) != 0) {
200  checks.push_back(toString(it));
201  }
202  }
203  }
205  }
206  // parking access rights
209  }
210 }
211 
212 
213 void
214 SUMOVehicleParameter::Stop::write(OutputDevice& dev, const bool close, const bool writeTagAndParents) const {
215  if (writeTagAndParents) {
216  dev.openTag(SUMO_TAG_STOP);
217  if (busstop != "") {
219  }
220  if (containerstop != "") {
222  }
223  if (chargingStation != "") {
225  }
226  if (parkingarea != "") {
228  }
229  if ((busstop == "") && (containerstop == "") && (parkingarea == "") && (chargingStation == "")) {
230  if (lane != "") {
232  } else {
234  }
235  if ((parametersSet & STOP_START_SET) != 0) {
237  }
238  if ((parametersSet & STOP_END_SET) != 0) {
240  }
241  }
242  }
243  if (index > 0) {
245  }
246  if ((parametersSet & STOP_POSLAT_SET) != 0 && posLat != INVALID_DOUBLE) {
248  }
249  if ((parametersSet & STOP_ARRIVAL_SET) && (arrival >= 0)) {
251  }
252  if ((parametersSet & STOP_DURATION_SET) && (duration >= 0)) {
254  }
255  if ((parametersSet & STOP_UNTIL_SET) && (until >= 0)) {
257  }
258  if ((parametersSet & STOP_STARTED_SET) && (started >= 0)) {
260  }
261  if ((parametersSet & STOP_ENDED_SET) && (ended >= 0)) {
263  }
264  if ((parametersSet & STOP_EXTENSION_SET) && (extension >= 0)) {
266  }
267  if ((parametersSet & STOP_TRIGGER_SET) != 0) {
268  const std::vector<std::string> triggers = getTriggers();
269  if (triggers.size() > 0) {
270  dev.writeAttr(SUMO_ATTR_TRIGGERED, triggers);
271  }
272  }
273  if ((parametersSet & STOP_PARKING_SET) != 0) {
275  }
276  if ((parametersSet & STOP_EXPECTED_SET) != 0 && awaitedPersons.size() > 0) {
278  }
279  if ((parametersSet & STOP_PERMITTED_SET) != 0 && permitted.size() > 0) {
281  }
282  if ((parametersSet & STOP_EXPECTED_CONTAINERS_SET) != 0 && awaitedContainers.size() > 0) {
284  }
285  if ((parametersSet & STOP_TRIP_ID_SET) != 0) {
287  }
288  if ((parametersSet & STOP_LINE_SET) != 0) {
290  }
291  if ((parametersSet & STOP_SPLIT_SET) != 0) {
293  }
294  if ((parametersSet & STOP_JOIN_SET) != 0) {
296  }
297  if ((parametersSet & STOP_SPEED_SET) != 0) {
299  }
300  if ((parametersSet & STOP_ONDEMAND_SET) != 0) {
302  }
303  if ((parametersSet & STOP_JUMP_SET) != 0 && jump >= 0) {
305  }
306  if (collision) {
308  }
309  // only write friendly position if is true
310  if (friendlyPos) {
312  }
313  // only write act type if isn't empty
314  if (!actType.empty()) {
316  }
317  if (close) {
318  // the user is closing the stop it is responsible for writing params
319  writeParams(dev);
320  dev.closeTag();
321  }
322 }
323 
324 std::vector<std::string>
326  std::vector<std::string> result;
327  if (busstop != "") {
328  result.push_back(busstop);
329  }
330  if (containerstop != "") {
331  result.push_back(containerstop);
332  }
333  if (chargingStation != "") {
334  result.push_back(chargingStation);
335  }
336  if (parkingarea != "") {
337  result.push_back(parkingarea);
338  }
339  return result;
340 }
341 
342 bool
343 SUMOVehicleParameter::parseDepart(const std::string& val, const std::string& element, const std::string& id,
344  SUMOTime& depart, DepartDefinition& dd, std::string& error, const std::string& attr) {
345  if (val == "triggered") {
347  } else if (val == "containerTriggered") {
349  } else if (val == "now") {
350  // only used via TraCI. depart must be set by the calling code
352  } else if (val == "split") {
354  } else if (val == "begin") {
356  } else {
357  try {
358  depart = string2time(val);
360  if (depart < 0) {
361  error = "Negative " + attr + " time in the definition of " + element + " '" + id + "'.";
362  return false;
363  }
364  } catch (...) {
365  if (id.empty()) {
366  error = "Invalid " + attr + " time for " + element + ". Must be one of (\"triggered\", \"containerTriggered\", \"now\", or a float >= 0)";
367  } else {
368  error = "Invalid " + attr + " time for " + element + " '" + id + "';\n must be one of (\"triggered\", \"containerTriggered\", \"now\", or a float >= 0)";
369  }
370  return false;
371  }
372  }
373  return true;
374 }
375 
376 
377 bool
378 SUMOVehicleParameter::parseDepartLane(const std::string& val, const std::string& element, const std::string& id,
379  int& lane, DepartLaneDefinition& dld, std::string& error) {
380  bool ok = true;
381  lane = 0;
383  if (val == "random") {
385  } else if (val == "free") {
387  } else if (val == "allowed") {
389  } else if (val == "best") {
391  } else if (val == "first") {
393  } else {
394  try {
395  lane = StringUtils::toInt(val);
396  if (lane < 0) {
397  ok = false;
398  }
399  } catch (...) {
400  ok = false;
401  }
402  }
403  if (!ok) {
404  if (id.empty()) {
405  error = "Invalid departLane definition for " + element + ". Must be one of (\"random\", \"free\", \"allowed\", \"best\", \"first\", or an int>=0)";
406  } else {
407  error = "Invalid departLane definition for " + element + " '" + id + "';\n must be one of (\"random\", \"free\", \"allowed\", \"best\", \"first\", or an int>=0)";
408  }
409  }
410  return ok;
411 }
412 
413 
414 bool
415 SUMOVehicleParameter::parseDepartPos(const std::string& val, const std::string& element, const std::string& id,
416  double& pos, DepartPosDefinition& dpd, std::string& error) {
417  bool ok = true;
418  pos = 0.;
420  if (val == "random") {
422  } else if (val == "random_free") {
424  } else if (val == "random_location") {
426  } else if (val == "free") {
428  } else if (val == "base") {
430  } else if (val == "last") {
432  } else if (val == "splitFront") {
434  } else if (val == "stop") {
436  } else {
437  try {
438  pos = StringUtils::toDouble(val);
439  } catch (...) {
440  ok = false;
441  }
442  }
443  if (!ok) {
444  if (id.empty()) {
445  error = "Invalid departPos definition for " + element + ". Must be one of (\"random\", \"random_free\", \"free\", \"base\", \"last\" or a float)";
446  } else {
447  error = "Invalid departPos definition for " + element + " '" + id + "';\n must be one of (\"random\", \"random_free\", \"free\", \"base\", \"last\" or a float)";
448  }
449  }
450  return ok;
451 }
452 
453 
454 bool
455 SUMOVehicleParameter::parseDepartPosLat(const std::string& val, const std::string& element, const std::string& id,
456  double& pos, DepartPosLatDefinition& dpd, std::string& error) {
457  bool ok = true;
458  pos = 0.;
460  if (val == "random") {
462  } else if (val == "random_free") {
464  } else if (val == "free") {
466  } else if (val == "right") {
468  } else if (val == "center") {
470  } else if (val == "left") {
472  } else {
473  try {
474  pos = StringUtils::toDouble(val);
475  } catch (...) {
476  ok = false;
477  }
478  }
479  if (!ok) {
480  if (id.empty()) {
481  error = "Invalid departPosLat definition for " + element + ". Must be one of (\"random\", \"random_free\", \"free\", \"right\", \"center\", \"left\", or a float)";
482  } else {
483  error = "Invalid departPosLat definition for " + element + " '" + id + "';\n must be one of (\"random\", \"random_free\", \"free\", \"right\", \"center\", \"left\", or a float)";
484  }
485  }
486  return ok;
487 }
488 
489 
490 bool
491 SUMOVehicleParameter::parseDepartSpeed(const std::string& val, const std::string& element, const std::string& id,
492  double& speed, DepartSpeedDefinition& dsd, std::string& error) {
493  bool ok = true;
494  speed = -1.;
496  if (val == "random") {
498  } else if (val == "max") {
500  } else if (val == "desired") {
502  } else if (val == "speedLimit") {
504  } else if (val == "last") {
506  } else if (val == "avg") {
508  } else {
509  try {
510  speed = StringUtils::toDouble(val);
511  if (speed < 0) {
512  ok = false;
513  }
514  } catch (...) {
515  ok = false;
516  }
517  }
518  if (!ok) {
519  if (id.empty()) {
520  error = "Invalid departSpeed definition for " + element + ". Must be one of (\"random\", \"max\", or a float>=0)";
521  } else {
522  error = "Invalid departSpeed definition for " + element + " '" + id + "';\n must be one of (\"random\", \"max\", or a float>=0)";
523  }
524  }
525  return ok;
526 }
527 
528 
529 bool
530 SUMOVehicleParameter::parseRouteIndex(const std::string& val, const std::string& element, const std::string& id,
531  const SumoXMLAttr attr, int& edgeIndex, RouteIndexDefinition& rid, std::string& error) {
532  bool ok = true;
533  edgeIndex = -1;
535  if (val == "random") {
537  } else {
538  try {
539  edgeIndex = StringUtils::toInt(val);
540  if (edgeIndex < 0) {
541  ok = false;
542  }
543  } catch (...) {
544  ok = false;
545  }
546  }
547  if (!ok) {
548  if (id.empty()) {
549  error = "Invalid " + toString(attr) + " definition for " + element + ". Must be one of (\"random\", \"free\", or an int>=0)";
550  } else {
551  error = "Invalid " + toString(attr) + " definition for " + element + " '" + id + "';\n must be one of (\"random\", \"free\", or an int>=0)";
552  }
553  }
554  return ok;
555 }
556 
557 
558 bool
559 SUMOVehicleParameter::parseArrivalLane(const std::string& val, const std::string& element, const std::string& id,
560  int& lane, ArrivalLaneDefinition& ald, std::string& error) {
561  bool ok = true;
562  lane = 0;
564  if (val == "current") {
566  } else if (val == "random") {
568  } else if (val == "first") {
570  } else {
571  try {
572  lane = StringUtils::toInt(val);
573  if (lane < 0) {
574  ok = false;
575  }
576  } catch (...) {
577  ok = false;
578  }
579  }
580  if (!ok) {
581  if (id.empty()) {
582  error = "Invalid arrivalLane definition for " + element + ". Must be one of (\"current\", or an int>=0)";
583  } else {
584  error = "Invalid arrivalLane definition for " + element + " '" + id + "';\n must be one of (\"current\", or an int>=0)";
585  }
586  }
587  return ok;
588 }
589 
590 
591 bool
592 SUMOVehicleParameter::parseArrivalPos(const std::string& val, const std::string& element, const std::string& id,
593  double& pos, ArrivalPosDefinition& apd, std::string& error) {
594  bool ok = true;
595  pos = 0.;
597  if (val == "random") {
599  } else if (val == "center") {
601  } else if (val == "max") {
603  } else {
604  try {
605  pos = StringUtils::toDouble(val);
606  } catch (...) {
607  ok = false;
608  }
609  }
610  if (!ok) {
611  if (id.empty()) {
612  error = "Invalid arrivalPos definition for " + element + ". Must be one of (\"random\", \"max\", or a float)";
613  } else {
614  error = "Invalid arrivalPos definition for " + element + " '" + id + "';\n must be one of (\"random\", \"max\", or a float)";
615  }
616  }
617  return ok;
618 }
619 
620 
621 bool
622 SUMOVehicleParameter::parseArrivalPosLat(const std::string& val, const std::string& element, const std::string& id,
623  double& pos, ArrivalPosLatDefinition& apd, std::string& error) {
624  bool ok = true;
625  pos = 0.;
627  if (val == "right") {
629  } else if (val == "center") {
631  } else if (val == "left") {
633  } else {
634  try {
635  pos = StringUtils::toDouble(val);
636  } catch (...) {
637  ok = false;
638  }
639  }
640  if (!ok) {
641  if (id.empty()) {
642  error = "Invalid arrivalPosLat definition for " + element + ". Must be one of (\"right\", \"center\", \"left\", or a float)";
643  } else {
644  error = "Invalid arrivalPosLat definition for " + element + " '" + id + "';\n must be one of (\"right\", \"center\", \"left\", or a float)";
645  }
646  }
647  return ok;
648 }
649 
650 
651 bool
652 SUMOVehicleParameter::parseArrivalSpeed(const std::string& val, const std::string& element, const std::string& id,
653  double& speed, ArrivalSpeedDefinition& asd, std::string& error) {
654  bool ok = true;
655  speed = -1.;
657  if (val == "current") {
659  } else {
660  try {
661  speed = StringUtils::toDouble(val);
662  if (speed < 0) {
663  ok = false;
664  }
665  } catch (...) {
666  ok = false;
667  }
668  }
669  if (!ok) {
670  if (id.empty()) {
671  error = "Invalid arrivalSpeed definition for " + element + ". Must be one of (\"current\", or a float>=0)";
672  } else {
673  error = "Invalid arrivalSpeed definition for " + element + " '" + id + "';\n must be one of (\"current\", or a float>=0)";
674  }
675  }
676  return ok;
677 }
678 
679 
680 double
681 SUMOVehicleParameter::interpretEdgePos(double pos, double maximumValue, SumoXMLAttr attr, const std::string& id, bool silent) {
682  if (pos < 0) {
683  pos = maximumValue + pos;
684  }
685  if (pos > maximumValue && pos != std::numeric_limits<double>::infinity()) {
686  if (!silent) {
687  WRITE_WARNINGF(TL("Invalid % % given for %. Using edge end instead."), toString(attr), toString(pos), id);
688  }
689  pos = maximumValue;
690  }
691  return pos;
692 }
693 
694 
695 bool
696 SUMOVehicleParameter::parsePersonModes(const std::string& modes, const std::string& element, const std::string& id, SVCPermissions& modeSet, std::string& error) {
697  // separte modes in different strings, and check if modes are valid
698  for (StringTokenizer st(modes); st.hasNext();) {
699  const std::string mode = st.next();
700  if (mode == "car") {
701  modeSet |= SVC_PASSENGER;
702  } else if (mode == "taxi") {
703  modeSet |= SVC_TAXI;
704  } else if (mode == "bicycle") {
705  modeSet |= SVC_BICYCLE;
706  } else if (mode == "public") {
707  modeSet |= SVC_BUS;
708  } else {
709  if (id.empty()) {
710  error = "Unknown person mode '" + mode + "'. Must be a combination of (\"car\", \"taxi\", \"bicycle\" or \"public\")";
711  } else {
712  error = "Unknown person mode '" + mode + "' for " + element + " '" + id + "';\n must be a combination of (\"car\", \"taxi\", \"bicycle\" or \"public\")";
713  }
714  return false;
715  }
716  }
717  return true;
718 }
719 
720 
721 void
722 SUMOVehicleParameter::parseStopTriggers(const std::vector<std::string>& triggers, bool expectTrigger, Stop& stop) {
723  if (triggers.size() == 0 && expectTrigger) {
724  stop.triggered = true;
725  }
726  for (std::string val : triggers) {
727  if (val == toString(SUMO_TAG_PERSON)) {
728  stop.triggered = true;
729  } else if (val == toString(SUMO_TAG_CONTAINER)) {
730  stop.containerTriggered = true;
731  } else if (val == toString(SUMO_ATTR_JOIN)) {
732  stop.joinTriggered = true;
733  } else {
734  try {
735  stop.triggered = StringUtils::toBool(val);
736  } catch (BoolFormatException&) {
737  WRITE_ERROR(TL("Value of stop attribute 'trigger' must be 'person', 'container', 'join' or a boolean"));
738  }
739  }
740  }
741 }
742 
743 
745 SUMOVehicleParameter::parseParkingType(const std::string& value) {
746  if (value == toString(ParkingType::OPPORTUNISTIC)) {
748  } else {
750  }
751 }
752 
753 
754 std::vector<std::string>
756  std::vector<std::string> triggers;
757  if (triggered) {
758  triggers.push_back(toString(SUMO_TAG_PERSON));
759  }
760  if (containerTriggered) {
761  triggers.push_back(toString(SUMO_TAG_CONTAINER));
762  }
763  if (joinTriggered) {
764  triggers.push_back(toString(SUMO_ATTR_JOIN));
765  }
766  return triggers;
767 }
768 
769 int
771  return (((parking == ParkingType::OFFROAD) ? 1 : 0) +
772  (triggered ? 2 : 0) +
773  (containerTriggered ? 4 : 0) +
774  (busstop != "" ? 8 : 0) +
775  (containerstop != "" ? 16 : 0) +
776  (chargingStation != "" ? 32 : 0) +
777  (parkingarea != "" ? 64 : 0) +
778  (overheadWireSegment != "" ? 128 : 0));
779 }
780 
781 
782 std::string
785  return "triggered";
787  return "containerTriggered";
788 // } else if (departProcedure == DepartDefinition::NOW) { // TODO check whether this is useful in XML input (currently TraCI only)
789 // return "now";
791  return "split";
793  return "begin";
794  } else {
795  return time2string(depart);
796  }
797 }
798 
799 
800 std::string
802  std::string val;
803  switch (departLaneProcedure) {
805  val = toString(departLane);
806  break;
808  val = "random";
809  break;
811  val = "free";
812  break;
814  val = "allowed";
815  break;
817  val = "best";
818  break;
820  val = "first";
821  break;
823  default:
824  break;
825  }
826  return val;
827 }
828 
829 
830 std::string
832  std::string val;
833  switch (departPosProcedure) {
835  val = toString(departPos);
836  break;
839  break;
841  val = "random";
842  break;
844  val = "random_free";
845  break;
847  val = "random_location";
848  break;
850  val = "free";
851  break;
853  val = "last";
854  break;
856  val = "base";
857  break;
859  val = "splitFront";
860  break;
862  val = "stop";
863  break;
865  default:
866  break;
867  }
868  return val;
869 }
870 
871 
872 std::string
874  std::string val;
875  switch (departPosLatProcedure) {
877  val = toString(departPosLat);
878  break;
881  break;
883  val = "random";
884  break;
886  val = "random_free";
887  break;
889  val = "free";
890  break;
892  val = "right";
893  break;
895  val = "center";
896  break;
898  val = "left";
899  break;
901  default:
902  break;
903  }
904  return val;
905 }
906 
907 
908 std::string
910  std::string val;
911  switch (departSpeedProcedure) {
913  val = toString(departSpeed);
914  break;
917  break;
919  val = "random";
920  break;
922  val = "max";
923  break;
925  val = "desired";
926  break;
928  val = "speedLimit";
929  break;
931  val = "last";
932  break;
934  val = "avg";
935  break;
937  default:
938  break;
939  }
940  return val;
941 }
942 
943 
944 std::string
946  std::string val;
947  switch (departEdgeProcedure) {
949  val = toString(departEdge);
950  break;
952  val = "random";
953  break;
955  default:
956  break;
957  }
958  return val;
959 }
960 
961 std::string
963  std::string val;
964  switch (arrivalEdgeProcedure) {
966  val = toString(arrivalEdge);
967  break;
969  val = "random";
970  break;
972  default:
973  break;
974  }
975  return val;
976 }
977 
978 
979 
980 
981 std::string
983  std::string val;
984  switch (arrivalLaneProcedure) {
986  val = toString(arrivalLane);
987  break;
989  val = "current";
990  break;
992  val = "random";
993  break;
995  val = "first";
996  break;
998  default:
999  break;
1000  }
1001  return val;
1002 }
1003 
1004 
1005 std::string
1007  std::string val;
1008  switch (arrivalPosProcedure) {
1010  val = toString(arrivalPos);
1011  break;
1013  val = "random";
1014  break;
1016  val = "center";
1017  break;
1019  val = "max";
1020  break;
1022  default:
1023  break;
1024  }
1025  return val;
1026 }
1027 
1028 
1029 std::string
1031  std::string val;
1032  switch (arrivalPosLatProcedure) {
1034  val = toString(arrivalPosLat);
1035  break;
1037  val = "right";
1038  break;
1040  val = "center";
1041  break;
1043  val = "left";
1044  break;
1046  default:
1047  break;
1048  }
1049  return val;
1050 }
1051 
1052 
1053 std::string
1055  std::string val;
1056  switch (arrivalSpeedProcedure) {
1058  val = toString(arrivalSpeed);
1059  break;
1061  val = "current";
1062  break;
1064  default:
1065  break;
1066  }
1067  return val;
1068 }
1069 
1070 
1071 void
1073  repetitionsDone++;
1074  // equidistant or exponential offset (for poisson distributed arrivals)
1075  if (repetitionProbability < 0) {
1076  if (repetitionOffset >= 0) {
1077  repetitionTotalOffset += (SUMOTime)((double)repetitionOffset / scale);
1078  } else {
1079  assert(poissonRate > 0);
1080  // we need to cache this do avoid double generation of the rng in the TIME2STEPS macro
1081  const double r = RandHelper::randExp(poissonRate, rng);
1082  repetitionTotalOffset += TIME2STEPS(r / scale);
1083  }
1084  }
1085 }
1086 
1087 
1088 std::string
1090  if ((insertionChecks == 0) || (insertionChecks == (int)InsertionCheck::ALL)) {
1092  } else {
1093  std::vector<std::string> insertionChecksStrs;
1094  const auto insertionCheckValues = SUMOXMLDefinitions::InsertionChecks.getValues();
1095  // iterate over values
1096  for (const auto insertionCheckValue : insertionCheckValues) {
1097  if ((insertionCheckValue != InsertionCheck::ALL) && (insertionChecks & (int)insertionCheckValue) != 0) {
1098  insertionChecksStrs.push_back(SUMOXMLDefinitions::InsertionChecks.getString(insertionCheckValue));
1099  }
1100  }
1101  return toString(insertionChecksStrs);
1102  }
1103 }
1104 
1105 
1106 bool
1107 SUMOVehicleParameter::areInsertionChecksValid(const std::string& value) const {
1108  if (value.empty()) {
1109  return true;
1110  } else {
1111  // split value in substrinsg
1112  StringTokenizer valueStrs(value, " ");
1113  // iterate over values
1114  while (valueStrs.hasNext()) {
1115  if (!SUMOXMLDefinitions::InsertionChecks.hasString(valueStrs.next())) {
1116  return false;
1117  }
1118  }
1119  return true;
1120  }
1121 }
1122 
1123 
1124 void
1126  // first reset insertionChecks
1127  insertionChecks = 0;
1128  if (value.empty()) {
1130  } else {
1131  // split value in substrinsg
1132  StringTokenizer insertionCheckStrs(value, " ");
1133  while (insertionCheckStrs.hasNext()) {
1134  insertionChecks |= (int)SUMOXMLDefinitions::InsertionChecks.get(insertionCheckStrs.next());
1135  }
1136  }
1137 }
1138 
1139 /****************************************************************************/
long long int SUMOTime
Definition: GUI.h:35
@ DEFAULT
default cursor
#define WRITE_WARNINGF(...)
Definition: MsgHandler.h:296
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:304
#define TL(string)
Definition: MsgHandler.h:315
SUMOTime string2time(const std::string &r)
convert string to SUMOTime
Definition: SUMOTime.cpp:46
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
Definition: SUMOTime.cpp:69
#define TIME2STEPS(x)
Definition: SUMOTime.h:57
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
const std::string DEFAULT_VTYPE_ID
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
@ SVC_BICYCLE
vehicle is a bicycle
@ SVC_TAXI
vehicle is a taxi
@ SVC_BUS
vehicle is a bus
const int VEHPARS_DEPARTEDGE_SET
const int VEHPARS_ARRIVALEDGE_SET
const int VEHPARS_PARKING_BADGES_SET
RouteIndexDefinition
Possible ways to choose the departure and arrival edge.
@ RANDOM
The edge is chosen randomly.
@ GIVEN
The edge index is given.
@ DEFAULT
No information given; use default.
const int STOP_ARRIVAL_SET
const int STOP_DURATION_SET
const int VEHPARS_COLOR_SET
const int STOP_POSLAT_SET
const int STOP_EXPECTED_SET
DepartLaneDefinition
Possible ways to choose a lane on depart.
@ RANDOM
The lane is chosen randomly.
@ BEST_FREE
The least occupied lane from best lanes.
@ GIVEN
The lane is given.
@ ALLOWED_FREE
The least occupied lane from lanes which allow the continuation.
@ DEFAULT
No information given; use default.
@ FIRST_ALLOWED
The rightmost lane the vehicle may use.
@ FREE
The least occupied lane is used.
const int VEHPARS_TO_TAZ_SET
ArrivalSpeedDefinition
Possible ways to choose the arrival speed.
@ GIVEN
The speed is given.
@ DEFAULT
No information given; use default.
@ CURRENT
The current speed is used.
DepartPosLatDefinition
Possible ways to choose the lateral departure position.
@ RANDOM
The lateral position is chosen randomly.
@ RIGHT
At the rightmost side of the lane.
@ GIVEN
The position is given.
@ GIVEN_VEHROUTE
The position is set by the vehroute device.
@ DEFAULT
No information given; use default.
@ LEFT
At the leftmost side of the lane.
@ FREE
A free lateral position is chosen.
@ CENTER
At the center of the lane.
@ RANDOM_FREE
If a fixed number of random choices fails, a free lateral position is chosen.
DepartPosDefinition
Possible ways to choose the departure position.
@ RANDOM
A random position is chosen.
@ GIVEN
The position is given.
@ GIVEN_VEHROUTE
The position is set by the vehroute device.
@ DEFAULT
No information given; use default.
@ STOP
depart position is endPos of first stop
@ FREE
A free position is chosen.
@ SPLIT_FRONT
depart position for a split vehicle is in front of the continuing vehicle
@ RANDOM_LOCATION
The position may be chosen freely in a polygon defined by a taz.
@ BASE
Back-at-zero position.
@ LAST
Insert behind the last vehicle as close as possible to still allow the specified departSpeed....
@ RANDOM_FREE
If a fixed number of random choices fails, a free position is chosen.
const int STOP_SPEED_SET
const int STOP_UNTIL_SET
const int VEHPARS_SPEEDFACTOR_SET
const int STOP_LINE_SET
const int STOP_PARKING_SET
const int STOP_TRIP_ID_SET
ArrivalLaneDefinition
Possible ways to choose the arrival lane.
@ RANDOM
The lane is chosen randomly.
@ GIVEN
The arrival lane is given.
@ DEFAULT
No information given; use default.
@ FIRST_ALLOWED
The rightmost lane the vehicle may use.
@ CURRENT
The current lane shall be used.
const int VEHPARS_DEPARTPOS_SET
const int VEHPARS_CONTAINER_NUMBER_SET
const int STOP_PERMITTED_SET
const int VEHPARS_ARRIVALLANE_SET
DepartSpeedDefinition
Possible ways to choose the departure speed.
@ RANDOM
The speed is chosen randomly.
@ MAX
The maximum safe speed is used.
@ GIVEN
The speed is given.
@ GIVEN_VEHROUTE
The speed is set by the vehroute device.
@ LIMIT
The maximum lane speed is used (speedLimit)
@ DEFAULT
No information given; use default.
@ DESIRED
The maximum lane speed is used (speedLimit * speedFactor)
@ LAST
The speed of the last vehicle. Fallback to DepartSpeedDefinition::DESIRED if there is no vehicle on t...
@ AVG
The average speed on the lane. Fallback to DepartSpeedDefinition::DESIRED if there is no vehicle on t...
const int VEHPARS_DEPARTLANE_SET
const int STOP_SPLIT_SET
const int VEHPARS_ARRIVALPOSLAT_SET
const int STOP_START_SET
const int VEHPARS_FROM_TAZ_SET
const int STOP_JOIN_SET
const int VEHPARS_ARRIVALSPEED_SET
const int VEHPARS_CALIBRATORSPEED_SET
const int STOP_EXTENSION_SET
const int STOP_ENDED_SET
const int STOP_TRIGGER_SET
ArrivalPosDefinition
Possible ways to choose the arrival position.
@ RANDOM
The arrival position is chosen randomly.
@ MAX
The maximum arrival position is used.
@ GIVEN
The arrival position is given.
@ DEFAULT
No information given; use default.
@ CENTER
Half the road length.
const int STOP_JUMP_SET
const int STOP_ONDEMAND_SET
const int STOP_END_SET
const int VEHPARS_LINE_SET
const int STOP_STARTED_SET
const int VEHPARS_PERSON_NUMBER_SET
const int STOP_EXPECTED_CONTAINERS_SET
const int VEHPARS_DEPARTSPEED_SET
ArrivalPosLatDefinition
Possible ways to choose the lateral arrival position.
@ RIGHT
At the rightmost side of the lane.
@ GIVEN
The position is given.
@ DEFAULT
No information given; use default.
@ LEFT
At the leftmost side of the lane.
@ CENTER
At the center of the lane.
const int VEHPARS_VTYPE_SET
const int VEHPARS_ARRIVALPOS_SET
DepartDefinition
Possible ways to depart.
@ BEGIN
The departure is at simulation start.
@ GIVEN
The time is given.
@ NOW
The vehicle is discarded if emission fails (not fully implemented yet)
@ SPLIT
The departure is triggered by a train split.
@ CONTAINER_TRIGGERED
The departure is container triggered.
@ TRIGGERED
The departure is person triggered.
const int VEHPARS_DEPARTPOSLAT_SET
InsertionCheck
different checking levels for vehicle insertion
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_NOTHING
invalid tag, must be the last one
@ SUMO_TAG_CONTAINERFLOW
@ SUMO_TAG_FLOWSTATE
a flow state definition (used when saving and loading simulatino state)
@ SUMO_TAG_STOP
stop for vehicles
@ GNE_TAG_FLOW_ROUTE
a flow definition using a route instead of a from-to edges route
@ GNE_TAG_FLOW_WITHROUTE
description of a vehicle with an embedded route
@ SUMO_TAG_FLOW
a flow definition using from and to edges or a route
@ SUMO_TAG_CONTAINER
@ SUMO_TAG_PERSON
@ SUMO_TAG_PERSONFLOW
ParkingType
Numbers representing special SUMO-XML-attribute values Information on whether a car is parking on the...
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ SUMO_ATTR_STARTPOS
@ SUMO_ATTR_PARKING
@ SUMO_ATTR_EXTENSION
@ SUMO_ATTR_ARRIVALSPEED
@ SUMO_ATTR_LANE
@ SUMO_ATTR_ARRIVALLANE
@ SUMO_ATTR_DEPART
@ SUMO_ATTR_DEPARTEDGE
@ SUMO_ATTR_COLLISION
@ SUMO_ATTR_ARRIVALEDGE
@ SUMO_ATTR_SPEED
@ SUMO_ATTR_STARTED
@ SUMO_ATTR_CONTAINER_STOP
@ SUMO_ATTR_PARKING_AREA
@ SUMO_ATTR_EDGE
@ SUMO_ATTR_DEPARTPOS_LAT
@ SUMO_ATTR_PARKING_BADGES
@ SUMO_ATTR_BUS_STOP
@ SUMO_ATTR_ENDPOS
@ SUMO_ATTR_ARRIVALPOS
@ SUMO_ATTR_SPLIT
@ SUMO_ATTR_ACTTYPE
@ SUMO_ATTR_BEGIN
weights: time range begin
@ SUMO_ATTR_POSITION_LAT
@ SUMO_ATTR_CONTAINER_NUMBER
@ SUMO_ATTR_EXPECTED
@ SUMO_ATTR_LINE
@ SUMO_ATTR_CHARGING_STATION
@ SUMO_ATTR_DEPARTPOS
@ SUMO_ATTR_ENDED
@ SUMO_ATTR_ONDEMAND
@ SUMO_ATTR_INDEX
@ SUMO_ATTR_ARRIVAL
@ SUMO_ATTR_TO_TAZ
@ SUMO_ATTR_DEPARTSPEED
@ SUMO_ATTR_TRIP_ID
@ SUMO_ATTR_PERMITTED
@ SUMO_ATTR_FROM_TAZ
@ SUMO_ATTR_DEPARTLANE
@ SUMO_ATTR_JOIN
@ SUMO_ATTR_JUMP
@ SUMO_ATTR_FRIENDLY_POS
@ SUMO_ATTR_SPEEDFACTOR
@ SUMO_ATTR_EXPECTED_CONTAINERS
@ SUMO_ATTR_TYPE
@ SUMO_ATTR_PERSON_NUMBER
@ SUMO_ATTR_COLOR
A color information.
@ SUMO_ATTR_ID
@ SUMO_ATTR_UNTIL
@ SUMO_ATTR_ARRIVALPOS_LAT
@ SUMO_ATTR_INSERTIONCHECKS
@ SUMO_ATTR_TRIGGERED
@ SUMO_ATTR_DURATION
int gPrecision
the precision for floating point outputs
Definition: StdDefs.cpp:26
int gPrecisionRandom
Definition: StdDefs.cpp:28
const double INVALID_DOUBLE
invalid double
Definition: StdDefs.h:64
T MAX2(T a, T b)
Definition: StdDefs.h:82
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=gPrecision)
Definition: ToString.h:283
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:46
A storage for options typed value containers)
Definition: OptionsCont.h:89
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
bool exists(const std::string &name) const
Returns the information whether the named option is known.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:61
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
OutputDevice & writeNonEmptyAttr(const SumoXMLAttr attr, const std::string &val)
writes a string attribute only if it is not the empty string and not the string "default"
Definition: OutputDevice.h:306
int precision()
return precision set on the device
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
Definition: OutputDevice.h:254
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
void setPrecision(int precision=gPrecision)
Sets the precision or resets it to default.
void writeParams(OutputDevice &device) const
write Params in the given outputdevice
static double randExp(double rate, SumoRNG *rng=nullptr)
Access to a random number from an exponential distribution.
Definition: RandHelper.cpp:150
Definition of vehicle stop (position and duration)
int getFlags() const
return flags as per Vehicle::getStops
SUMOTime started
the time at which this stop was reached
std::string edge
The edge to stop at.
ParkingType parking
whether the vehicle is removed from the net while stopping
std::string lane
The lane to stop at.
SUMOTime extension
The maximum time extension for boarding / loading.
bool friendlyPos
enable or disable friendly position (used by netedit)
double speed
the speed at which this stop counts as reached (waypoint mode)
std::string parkingarea
(Optional) parking area if one is assigned to the stop
std::string split
the id of the vehicle (train portion) that splits of upon reaching this stop
double startPos
The stopping position start.
std::string line
the new line id of the trip within a cyclical public transport route
double posLat
the lateral offset when stopping
bool onDemand
whether the stop may be skipped
std::string chargingStation
(Optional) charging station if one is assigned to the stop
std::vector< std::string > getTriggers() const
write trigger attribute
std::set< std::string > permitted
IDs of persons or containers that may board/load at this stop.
int parametersSet
Information for the output which parameter were set.
int index
at which position in the stops list
SUMOTime jump
transfer time if there shall be a jump from this stop to the next route edge
std::string join
the id of the vehicle (train portion) to which this vehicle shall be joined
SUMOTime until
The time at which the vehicle may continue its journey.
std::string actType
act Type (only used by Persons) (used by netedit)
bool triggered
whether an arriving person lets the vehicle continue
void write(OutputDevice &dev, const bool close=true, const bool writeTagAndParents=true) const
Writes the stop as XML.
SUMOTime ended
the time at which this stop was ended
double endPos
The stopping position end.
std::vector< std::string > getStoppingPlaceIDs() const
return list of stopping place ids
std::set< std::string > awaitedPersons
IDs of persons the vehicle has to wait for until departing.
std::set< std::string > awaitedContainers
IDs of containers the vehicle has to wait for until departing.
std::string busstop
(Optional) bus stop if one is assigned to the stop
bool joinTriggered
whether an joined vehicle lets this vehicle continue
std::string tripId
id of the trip within a cyclical public transport route
std::string containerstop
(Optional) container stop if one is assigned to the stop
bool containerTriggered
whether an arriving container lets the vehicle continue
bool collision
Whether this stop was triggered by a collision.
SUMOTime arrival
The (expected) time at which the vehicle reaches the stop.
SUMOTime duration
The stopping duration.
double departPosLat
(optional) The lateral position the vehicle shall depart from
double arrivalPosLat
(optional) The lateral position the vehicle shall arrive on
virtual ~SUMOVehicleParameter()
Destructor.
std::string getArrivalSpeed() const
obtain arrival speed parameter in string format
double repetitionProbability
The probability for emitting a vehicle per second.
int departLane
(optional) The lane the vehicle shall depart from (index in edge)
ArrivalSpeedDefinition arrivalSpeedProcedure
Information how the vehicle's end speed shall be chosen.
double departSpeed
(optional) The initial speed of the vehicle
void incrementFlow(double scale, SumoRNG *rng=nullptr)
increment flow
std::string vtypeid
The vehicle's type id.
std::string getDepartLane() const
obtain depart lane parameter in string format
SUMOTime repetitionOffset
The time offset between vehicle reinsertions.
double speedFactor
individual speedFactor (overriding distribution from vType)
void parseInsertionChecks(const std::string &value)
parses insertion checks
SUMOVehicleParameter()
Constructor.
static bool parseArrivalLane(const std::string &val, const std::string &element, const std::string &id, int &lane, ArrivalLaneDefinition &ald, std::string &error)
Validates a given arrivalLane value.
int repetitionsDone
The number of times the vehicle was already inserted.
static bool parseArrivalPosLat(const std::string &val, const std::string &element, const std::string &id, double &pos, ArrivalPosLatDefinition &apd, std::string &error)
Validates a given arrivalPosLat value.
ArrivalLaneDefinition arrivalLaneProcedure
Information how the vehicle shall choose the lane to arrive on.
SUMOTime repetitionTotalOffset
The offset between depart and the time for the next vehicle insertions.
void write(OutputDevice &dev, const OptionsCont &oc, const SumoXMLTag altTag=SUMO_TAG_VEHICLE, const std::string &typeID="") const
Writes the parameters as a beginning element.
DepartLaneDefinition departLaneProcedure
Information how the vehicle shall choose the lane to depart from.
std::string getArrivalLane() const
obtain arrival lane parameter in string format
static bool parseDepartSpeed(const std::string &val, const std::string &element, const std::string &id, double &speed, DepartSpeedDefinition &dsd, std::string &error)
Validates a given departSpeed value.
static bool parseArrivalPos(const std::string &val, const std::string &element, const std::string &id, double &pos, ArrivalPosDefinition &apd, std::string &error)
Validates a given arrivalPos value.
int personNumber
The static number of persons in the vehicle when it departs (not including boarding persons)
static bool parseArrivalSpeed(const std::string &val, const std::string &element, const std::string &id, double &speed, ArrivalSpeedDefinition &asd, std::string &error)
Validates a given arrivalSpeed value.
double poissonRate
The rate for emitting vehicles with a poisson distribution.
RouteIndexDefinition arrivalEdgeProcedure
Information how the vehicle's final edge shall be chosen.
DepartPosLatDefinition departPosLatProcedure
Information how the vehicle shall choose the lateral departure position.
SVCPermissions modes
The modes a person or container can use.
std::string getDepartSpeed() const
obtain depart speed parameter in string format
std::string getArrivalPos() const
obtain arrival pos parameter in string format
std::string getDepart() const
obtain depart parameter in string format
double departPos
(optional) The position the vehicle shall depart from
std::string getDepartEdge() const
obtain depart edge parameter in string format
DepartSpeedDefinition departSpeedProcedure
Information how the vehicle's initial speed shall be chosen.
RGBColor color
The vehicle's color, TraCI may change this.
bool areInsertionChecksValid(const std::string &value) const
check if given insertion checks are valid
double arrivalPos
(optional) The position the vehicle shall arrive on
double calibratorSpeed
speed (used by calibrator flows
static bool parseDepartLane(const std::string &val, const std::string &element, const std::string &id, int &lane, DepartLaneDefinition &dld, std::string &error)
Validates a given departLane value.
std::string getInsertionChecks() const
get insertion checks in string format
std::string getArrivalEdge() const
obtain arrival edge parameter in string format
std::vector< std::string > parkingBadges
The parking access rights.
int departEdge
(optional) The initial edge within the route of the vehicle
static bool parseDepart(const std::string &val, const std::string &element, const std::string &id, SUMOTime &depart, DepartDefinition &dd, std::string &error, const std::string &attr="departure")
Validates a given depart value.
static bool parsePersonModes(const std::string &modes, const std::string &element, const std::string &id, SVCPermissions &modeSet, std::string &error)
Validates a given person modes value.
bool wasSet(int what) const
Returns whether the given parameter was set.
ArrivalPosDefinition arrivalPosProcedure
Information how the vehicle shall choose the arrival position.
static bool parseRouteIndex(const std::string &val, const std::string &element, const std::string &id, const SumoXMLAttr attr, int &edgeIndex, RouteIndexDefinition &rid, std::string &error)
Validates a given departEdge or arrivalEdge value.
static bool parseDepartPosLat(const std::string &val, const std::string &element, const std::string &id, double &pos, DepartPosLatDefinition &dpd, std::string &error)
Validates a given departPosLat value.
std::string getDepartPosLat() const
obtain depart pos lat parameter in string format
std::string getArrivalPosLat() const
obtain arrival pos lat parameter in string format
std::string getDepartPos() const
obtain depart pos parameter in string format
std::string toTaz
The vehicle's destination zone (district)
double arrivalSpeed
(optional) The final speed of the vehicle (not used yet)
static double interpretEdgePos(double pos, double maximumValue, SumoXMLAttr attr, const std::string &id, bool silent=false)
Interprets negative edge positions and fits them onto a given edge.
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
static bool parseDepartPos(const std::string &val, const std::string &element, const std::string &id, double &pos, DepartPosDefinition &dpd, std::string &error)
Validates a given departPos value.
int insertionChecks
bitset of InsertionCheck
bool defaultOptionOverrides(const OptionsCont &oc, const std::string &optionName) const
Returns whether the defaults shall be used.
int arrivalEdge
(optional) The final edge within the route of the vehicle
std::string fromTaz
The vehicle's origin zone (district)
DepartPosDefinition departPosProcedure
Information how the vehicle shall choose the departure position.
std::string line
The vehicle's line (mainly for public transport)
int containerNumber
The static number of containers in the vehicle when it departs.
static ParkingType parseParkingType(const std::string &value)
parses parking type value
static void parseStopTriggers(const std::vector< std::string > &triggers, bool expectTrigger, Stop &stop)
parses stop trigger values
RouteIndexDefinition departEdgeProcedure
Information how the vehicle's initial edge shall be chosen.
ArrivalPosLatDefinition arrivalPosLatProcedure
Information how the vehicle shall choose the lateral arrival position.
static StringBijection< InsertionCheck > InsertionChecks
traffic light layouts
const std::string & getString(const T key) const
std::vector< T > getValues() const
bool hasNext()
returns the information whether further substrings exist
std::string next()
returns the next substring when it exists. Otherwise the behaviour is undefined
static std::string pruneZeros(const std::string &str, int max)
Removes trailing zeros (at most 'max')
Definition: StringUtils.cpp:69
static double toDouble(const std::string &sData)
converts a string into the double value described by it by calling the char-type converter
static int toInt(const std::string &sData)
converts a string into the integer value described by it by calling the char-type converter,...
static bool toBool(const std::string &sData)
converts a string into the bool value described by it by calling the char-type converter
auto get(const nlohmann::detail::iteration_proxy_value< IteratorType > &i) -> decltype(i.key())
Definition: json.hpp:4451