SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
NLTriggerBuilder.cpp
Go to the documentation of this file.
1 /****************************************************************************/
12 // Builds trigger objects for microsim
13 /****************************************************************************/
14 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
15 // Copyright (C) 2001-2015 DLR (http://www.dlr.de/) and contributors
16 /****************************************************************************/
17 //
18 // This file is part of SUMO.
19 // SUMO is free software: you can redistribute it and/or modify
20 // it under the terms of the GNU General Public License as published by
21 // the Free Software Foundation, either version 3 of the License, or
22 // (at your option) any later version.
23 //
24 /****************************************************************************/
25 
26 
27 // ===========================================================================
28 // included modules
29 // ===========================================================================
30 #ifdef _MSC_VER
31 #include <windows_config.h>
32 #else
33 #include <config.h>
34 #endif
35 
36 #include <string>
38 #include <microsim/MSLane.h>
39 #include <microsim/MSEdge.h>
40 #include <microsim/MSGlobals.h>
52 #include "NLHandler.h"
53 #include "NLTriggerBuilder.h"
55 #include <utils/xml/XMLSubSys.h>
56 
57 
58 #ifdef HAVE_INTERNAL
59 #include <mesosim/MELoop.h>
60 #include <mesosim/METriggeredCalibrator.h>
61 #endif
62 
63 #ifdef CHECK_MEMORY_LEAKS
64 #include <foreign/nvwa/debug_new.h>
65 #endif // CHECK_MEMORY_LEAKS
66 
67 
68 // ===========================================================================
69 // method definitions
70 // ===========================================================================
72  : myHandler(0) {}
73 
74 
76 
77 void
79  myHandler = handler;
80 }
81 
82 
83 void
85  bool ok = true;
86  // get the id, throw if not given or empty...
87  std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
88  if (!ok) {
89  return;
90  }
91  MSEdge* e = MSEdge::dictionary(id);
92  if (e == 0) {
93  WRITE_ERROR("Unknown edge ('" + id + "') referenced in a vaporizer.");
94  return;
95  }
96  SUMOTime begin = attrs.getSUMOTimeReporting(SUMO_ATTR_BEGIN, 0, ok);
97  SUMOTime end = attrs.getSUMOTimeReporting(SUMO_ATTR_END, 0, ok);
98  if (!ok) {
99  return;
100  }
101  if (begin < 0) {
102  WRITE_ERROR("A vaporization begin time is negative (edge id='" + id + "').");
103  return;
104  }
105  if (begin >= end) {
106  WRITE_ERROR("A vaporization ends before it starts (edge id='" + id + "').");
107  return;
108  }
109  if (end >= string2time(OptionsCont::getOptions().getString("begin"))) {
114  }
115 }
116 
117 
118 
119 void
121  const std::string& base) {
122  // get the id, throw if not given or empty...
123  bool ok = true;
124  // get the id, throw if not given or empty...
125  std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
126  if (!ok) {
127  return;
128  }
129  // get the file name to read further definitions from
130  std::string file = getFileName(attrs, base, true);
131  std::string objectid = attrs.get<std::string>(SUMO_ATTR_LANES, id.c_str(), ok);
132  if (!ok) {
133  throw InvalidArgument("The lanes to use within MSLaneSpeedTrigger '" + id + "' are not known.");
134  }
135  std::vector<MSLane*> lanes;
136  std::vector<std::string> laneIDs;
137  SUMOSAXAttributes::parseStringVector(objectid, laneIDs);
138  for (std::vector<std::string>::iterator i = laneIDs.begin(); i != laneIDs.end(); ++i) {
139  MSLane* lane = MSLane::dictionary(*i);
140  if (lane == 0) {
141  throw InvalidArgument("The lane to use within MSLaneSpeedTrigger '" + id + "' is not known.");
142  }
143  lanes.push_back(lane);
144  }
145  if (lanes.size() == 0) {
146  throw InvalidArgument("No lane defined for MSLaneSpeedTrigger '" + id + "'.");
147  }
148  try {
149  MSLaneSpeedTrigger* trigger = buildLaneSpeedTrigger(net, id, lanes, file);
150  if (file == "") {
152  }
153  } catch (ProcessError& e) {
154  throw InvalidArgument(e.what());
155  }
156 }
157 
158 void
160  bool ok = true;
161 
162  // get the id, throw if not given or empty...
163  std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
164 
165  if (!ok) {
166  throw ProcessError();
167  }
168 
169  // get the lane
170  MSLane* lane = getLane(attrs, "chargingStation", id);
171 
172  // get the positions
173  SUMOReal frompos = attrs.getOpt<SUMOReal>(SUMO_ATTR_STARTPOS, id.c_str(), ok, 0);
174  SUMOReal topos = attrs.getOpt<SUMOReal>(SUMO_ATTR_ENDPOS, id.c_str(), ok, lane->getLength());
175  SUMOReal chrgpower = attrs.getOpt<SUMOReal>(SUMO_ATTR_CHRGPOWER, id.c_str(), ok, 0);
176  SUMOReal efficiency = attrs.getOpt<SUMOReal>(SUMO_ATTR_EFFICIENCY, id.c_str(), ok, 0);
177  SUMOReal chargeInTransit = attrs.getOpt<SUMOReal>(SUMO_ATTR_CHRGINTRANSIT, id.c_str(), ok, 0);
178  SUMOReal ChargeDelay = attrs.getOpt<SUMOReal>(SUMO_ATTR_CHRGDELAY, id.c_str(), ok, 0);
179 
180  const bool friendlyPos = attrs.getOpt<bool>(SUMO_ATTR_FRIENDLY_POS, id.c_str(), ok, false);
181 
182  if (!ok || !myHandler->checkStopPos(frompos, topos, lane->getLength(), POSITION_EPS, friendlyPos)) {
183  throw InvalidArgument("Invalid position for Charging Station '" + id + "'.");
184  }
185 
186  // get the lines
187  std::vector<std::string> lines;
188  SUMOSAXAttributes::parseStringVector(attrs.getOpt<std::string>(SUMO_ATTR_LINES, id.c_str(), ok, "", false), lines);
189 
190  // build the Charging Station
191  buildChrgStn(net, id, lines, lane, frompos, topos, chrgpower, efficiency, chargeInTransit, ChargeDelay);
192 }
193 
194 void
196  bool ok = true;
197  // get the id, throw if not given or empty...
198  std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
199  if (!ok) {
200  throw ProcessError();
201  }
202  // get the lane
203  MSLane* lane = getLane(attrs, "busStop", id);
204  // get the positions
205  SUMOReal frompos = attrs.getOpt<SUMOReal>(SUMO_ATTR_STARTPOS, id.c_str(), ok, 0);
206  SUMOReal topos = attrs.getOpt<SUMOReal>(SUMO_ATTR_ENDPOS, id.c_str(), ok, lane->getLength());
207  const bool friendlyPos = attrs.getOpt<bool>(SUMO_ATTR_FRIENDLY_POS, id.c_str(), ok, false);
208  if (!ok || !myHandler->checkStopPos(frompos, topos, lane->getLength(), POSITION_EPS, friendlyPos)) {
209  throw InvalidArgument("Invalid position for bus stop '" + id + "'.");
210  }
211  // get the lines
212  std::vector<std::string> lines;
213  SUMOSAXAttributes::parseStringVector(attrs.getOpt<std::string>(SUMO_ATTR_LINES, id.c_str(), ok, "", false), lines);
214  // build the bus stop
215  buildBusStop(net, id, lines, lane, frompos, topos);
216 }
217 
218 void
220  bool ok = true;
221  // get the id, throw if not given or empty...
222  std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
223  if (!ok) {
224  throw ProcessError();
225  }
226  // get the lane
227  MSLane* lane = getLane(attrs, "containerStop", id);
228  // get the positions
229  SUMOReal frompos = attrs.getOpt<SUMOReal>(SUMO_ATTR_STARTPOS, id.c_str(), ok, 0);
230  SUMOReal topos = attrs.getOpt<SUMOReal>(SUMO_ATTR_ENDPOS, id.c_str(), ok, lane->getLength());
231  const bool friendlyPos = attrs.getOpt<bool>(SUMO_ATTR_FRIENDLY_POS, id.c_str(), ok, false);
232  if (!ok || !myHandler->checkStopPos(frompos, topos, lane->getLength(), POSITION_EPS, friendlyPos)) {
233  throw InvalidArgument("Invalid position for container stop '" + id + "'.");
234  }
235  // get the lines
236  std::vector<std::string> lines;
237  SUMOSAXAttributes::parseStringVector(attrs.getOpt<std::string>(SUMO_ATTR_LINES, id.c_str(), ok, "", false), lines);
238  // build the container stop
239  buildContainerStop(net, id, lines, lane, frompos, topos);
240 }
241 
242 void
244  const std::string& base) {
245  bool ok = true;
246  // get the id, throw if not given or empty...
247  std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
248  if (!ok) {
249  throw ProcessError();
250  }
251  // get the file name to read further definitions from
252  MSLane* lane = getLane(attrs, "calibrator", id);
253  const SUMOReal pos = getPosition(attrs, lane, "calibrator", id);
254  const SUMOTime freq = attrs.getOptSUMOTimeReporting(SUMO_ATTR_FREQUENCY, id.c_str(), ok, DELTA_T); // !!! no error handling
255  std::string file = getFileName(attrs, base, true);
256  std::string outfile = attrs.getOpt<std::string>(SUMO_ATTR_OUTPUT, id.c_str(), ok, "");
257  std::string routeProbe = attrs.getOpt<std::string>(SUMO_ATTR_ROUTEPROBE, id.c_str(), ok, "");
258  MSRouteProbe* probe = 0;
259  if (routeProbe != "") {
260  probe = dynamic_cast<MSRouteProbe*>(net.getDetectorControl().getTypedDetectors(SUMO_TAG_ROUTEPROBE).get(routeProbe));
261  }
263 #ifdef HAVE_INTERNAL
264  METriggeredCalibrator* trigger = buildMECalibrator(net, id, &lane->getEdge(), pos, file, outfile, freq, probe);
265  if (file == "") {
266  trigger->registerParent(SUMO_TAG_CALIBRATOR, myHandler);
267  }
268 #endif
269  } else {
270  MSCalibrator* trigger = buildCalibrator(net, id, &lane->getEdge(), pos, file, outfile, freq, probe);
271  if (file == "") {
273  }
274  }
275 }
276 
277 
278 void
280  const std::string& base) {
281  bool ok = true;
282  // get the id, throw if not given or empty...
283  std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
284  if (!ok) {
285  throw ProcessError();
286  }
287  // get the file name to read further definitions from
288  std::string file = getFileName(attrs, base, true);
289  std::string objectid = attrs.get<std::string>(SUMO_ATTR_EDGES, id.c_str(), ok);
290  if (!ok) {
291  throw InvalidArgument("The edge to use within MSTriggeredRerouter '" + id + "' is not known.");
292  }
293  MSEdgeVector edges;
294  std::vector<std::string> edgeIDs;
295  SUMOSAXAttributes::parseStringVector(objectid, edgeIDs);
296  for (std::vector<std::string>::iterator i = edgeIDs.begin(); i != edgeIDs.end(); ++i) {
297  MSEdge* edge = MSEdge::dictionary(*i);
298  if (edge == 0) {
299  throw InvalidArgument("The edge to use within MSTriggeredRerouter '" + id + "' is not known.");
300  }
301  edges.push_back(edge);
302  }
303  if (edges.size() == 0) {
304  throw InvalidArgument("No edges found for MSTriggeredRerouter '" + id + "'.");
305  }
306  SUMOReal prob = attrs.getOpt<SUMOReal>(SUMO_ATTR_PROB, id.c_str(), ok, 1);
307  bool off = attrs.getOpt<bool>(SUMO_ATTR_OFF, id.c_str(), ok, false);
308  if (!ok) {
309  throw InvalidArgument("Could not parse MSTriggeredRerouter '" + id + "'.");
310  }
311  MSTriggeredRerouter* trigger = buildRerouter(net, id, edges, prob, file, off);
312  // read in the trigger description
313  if (file == "") {
315  } else if (!XMLSubSys::runParser(*trigger, file)) {
316  throw ProcessError();
317  }
318 }
319 
320 
321 // -------------------------
322 
323 
325 NLTriggerBuilder::buildLaneSpeedTrigger(MSNet& /*net*/, const std::string& id,
326  const std::vector<MSLane*>& destLanes,
327  const std::string& file) {
328  return new MSLaneSpeedTrigger(id, destLanes, file);
329 }
330 
331 
332 #ifdef HAVE_INTERNAL
333 METriggeredCalibrator*
334 NLTriggerBuilder::buildMECalibrator(MSNet& /*net*/, const std::string& id,
335  const MSEdge* edge, SUMOReal pos,
336  const std::string& file,
337  const std::string& outfile,
338  const SUMOTime freq, MSRouteProbe* probe) {
339  return new METriggeredCalibrator(id, edge, pos, file, outfile, freq, MSGlobals::gMesoNet->getSegmentForEdge(*edge, pos)->getLength(), probe);
340 }
341 #endif
342 
343 
345 NLTriggerBuilder::buildCalibrator(MSNet& /*net*/, const std::string& id,
346  MSEdge* edge, SUMOReal pos,
347  const std::string& file,
348  const std::string& outfile,
349  const SUMOTime freq, const MSRouteProbe* probe) {
350  return new MSCalibrator(id, edge, pos, file, outfile, freq, edge->getLength(), probe);
351 }
352 
353 
355 NLTriggerBuilder::buildRerouter(MSNet&, const std::string& id,
356  MSEdgeVector& edges,
357  SUMOReal prob, const std::string& file, bool off) {
358  return new MSTriggeredRerouter(id, edges, prob, file, off);
359 }
360 
361 
362 void
363 NLTriggerBuilder::buildBusStop(MSNet& net, const std::string& id,
364  const std::vector<std::string>& lines,
365  MSLane* lane, SUMOReal frompos, SUMOReal topos) {
366  MSStoppingPlace* stop = new MSStoppingPlace(id, lines, *lane, frompos, topos);
367  if (!net.addBusStop(stop)) {
368  delete stop;
369  throw InvalidArgument("Could not build bus stop '" + id + "'; probably declared twice.");
370  }
371 }
372 
373 
374 void
375 NLTriggerBuilder::buildContainerStop(MSNet& net, const std::string& id,
376  const std::vector<std::string>& lines,
377  MSLane* lane, SUMOReal frompos, SUMOReal topos) {
378  MSStoppingPlace* stop = new MSStoppingPlace(id, lines, *lane, frompos, topos);
379  if (!net.addContainerStop(stop)) {
380  delete stop;
381  throw InvalidArgument("Could not build container stop '" + id + "'; probably declared twice.");
382  }
383 }
384 
385 void
386 NLTriggerBuilder::buildChrgStn(MSNet& net, const std::string& id,
387  const std::vector<std::string>& lines,
388  MSLane* lane, SUMOReal frompos, SUMOReal topos, SUMOReal chrgpower, SUMOReal efficiency, SUMOReal chargeInTransit, SUMOReal ChargeDelay) {
389 
390  MSChrgStn* chrgStn = new MSChrgStn(id, lines, *lane, frompos, topos, chrgpower, efficiency, chargeInTransit, ChargeDelay);
391 
392  if (!net.addChrgStn(chrgStn)) {
393  delete chrgStn;
394  throw InvalidArgument("Could not build Charging Station '" + id + "'; probably declared twice.");
395  }
396 }
397 
398 std::string
400  const std::string& base,
401  const bool allowEmpty) {
402  // get the file name to read further definitions from
403  bool ok = true;
404  std::string file = attrs.getOpt<std::string>(SUMO_ATTR_FILE, 0, ok, "");
405  if (file == "") {
406  if (allowEmpty) {
407  return file;
408  }
409  throw InvalidArgument("No filename given.");
410  }
411  // check whether absolute or relative filenames are given
412  if (!FileHelpers::isAbsolute(file)) {
413  return FileHelpers::getConfigurationRelative(base, file);
414  }
415  return file;
416 }
417 
418 
419 MSLane*
421  const std::string& tt,
422  const std::string& tid) {
423  bool ok = true;
424  std::string objectid = attrs.get<std::string>(SUMO_ATTR_LANE, tid.c_str(), ok);
425  MSLane* lane = MSLane::dictionary(objectid);
426  if (lane == 0) {
427  throw InvalidArgument("The lane " + objectid + " to use within the " + tt + " '" + tid + "' is not known.");
428  }
429  return lane;
430 }
431 
432 
433 SUMOReal
435  MSLane* lane,
436  const std::string& tt, const std::string& tid) {
437  bool ok = true;
438  SUMOReal pos = attrs.get<SUMOReal>(SUMO_ATTR_POSITION, 0, ok);
439  const bool friendlyPos = attrs.getOpt<bool>(SUMO_ATTR_FRIENDLY_POS, 0, ok, false);
440  if (!ok) {
441  throw InvalidArgument("Error on parsing a position information.");
442  }
443  if (pos < 0) {
444  pos = lane->getLength() + pos;
445  }
446  if (pos > lane->getLength()) {
447  if (friendlyPos) {
448  pos = lane->getLength() - (SUMOReal) 0.1;
449  } else {
450  throw InvalidArgument("The position of " + tt + " '" + tid + "' lies beyond the lane's '" + lane->getID() + "' length.");
451  }
452  }
453  return pos;
454 }
455 
456 
457 
458 /****************************************************************************/
void setHandler(NLHandler *handler)
Sets the parent handler to use for nested parsing.
void parseAndBuildCalibrator(MSNet &net, const SUMOSAXAttributes &attrs, const std::string &base)
Parses his values and builds a mesoscopic or microscopic calibrator.
virtual void buildBusStop(MSNet &net, const std::string &id, const std::vector< std::string > &lines, MSLane *lane, SUMOReal frompos, SUMOReal topos)
Builds a bus stop.
bool addChrgStn(MSChrgStn *chrgStn)
Adds a chargingg station.
Definition: MSNet.cpp:817
MSEdge & getEdge() const
Returns the lane&#39;s edge.
Definition: MSLane.h:461
virtual MSCalibrator * buildCalibrator(MSNet &net, const std::string &id, MSEdge *edge, SUMOReal pos, const std::string &file, const std::string &outfile, const SUMOTime freq, const MSRouteProbe *probe)
builds a microscopic calibrator
long long int SUMOTime
Definition: SUMOTime.h:43
static std::string getConfigurationRelative(const std::string &configPath, const std::string &path)
Returns the second path as a relative path to the first file.
Definition: FileHelpers.cpp:86
A lane area vehicles can halt at.
Writes routes of vehicles passing a certain edge.
Definition: MSRouteProbe.h:68
SUMOReal getLength() const
Returns the lane&#39;s length.
Definition: MSLane.h:376
void parseAndBuildRerouter(MSNet &net, const SUMOSAXAttributes &attrs, const std::string &base)
Parses his values and builds a rerouter.
static bool checkStopPos(SUMOReal &startPos, SUMOReal &endPos, const SUMOReal laneLength, const SUMOReal minLength, const bool friendlyPos)
check start and end position of a stop
bool addBusStop(MSStoppingPlace *busStop)
Adds a bus stop.
Definition: MSNet.cpp:769
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition: MSNet.cpp:162
static bool dictionary(const std::string &id, MSEdge *edge)
Inserts edge into the static dictionary Returns true if the key id isn&#39;t already in the dictionary...
Definition: MSEdge.cpp:553
SUMOTime incVaporization(SUMOTime t)
Enables vaporization.
Definition: MSEdge.cpp:300
void parseAndBuildBusStop(MSNet &net, const SUMOSAXAttributes &attrs)
Parses his values and builds a bus stop.
NLTriggerBuilder()
Constructor.
Base (microsim) event class.
Definition: Command.h:61
static bool runParser(GenericSAXHandler &handler, const std::string &file, const bool isNet=false)
Runs the given handler on the given file; returns if everything&#39;s ok.
Definition: XMLSubSys.cpp:114
virtual ~NLTriggerBuilder()
Destructor.
SUMOTime decVaporization(SUMOTime t)
Disables vaporization.
Definition: MSEdge.cpp:307
The simulated network and simulation perfomer.
Definition: MSNet.h:94
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:69
SUMOTime getOptSUMOTimeReporting(int attr, const char *objectid, bool &ok, SUMOTime defaultValue, bool report=true) const
Tries to read given attribute assuming it is a SUMOTime.
Changes the speed allowed on a set of lanes.
T get(const std::string &id) const
Retrieves an item.
const std::string & getID() const
Returns the id.
Definition: Named.h:60
A road/street connecting two junctions.
Definition: MSEdge.h:81
const NamedObjectCont< MSDetectorFileOutput * > & getTypedDetectors(SumoXMLTag type) const
Returns the list of detectors of the given type.
static void parseStringVector(const std::string &def, std::vector< std::string > &into)
Splits the given string.
SUMOReal getLength() const
return the length of the edge
Definition: MSEdge.h:535
SUMOReal getPosition(const SUMOSAXAttributes &attrs, MSLane *lane, const std::string &tt, const std::string &tid)
returns the position on the lane checking it
the edges of a route
Encapsulated SAX-Attributes.
NLHandler * myHandler
The parent handler to set for subhandlers.
static bool isAbsolute(const std::string &path)
Returns the information whether the given path is absolute.
void parseAndBuildContainerStop(MSNet &net, const SUMOSAXAttributes &attrs)
Parses his values and builds a container stop.
MSEventControl * getBeginOfTimestepEvents()
Returns the event control for events executed at the begin of a time step.
Definition: MSNet.h:385
A wrapper for a Command function.
void parseAndBuildLaneSpeedTrigger(MSNet &net, const SUMOSAXAttributes &attrs, const std::string &base)
Parses his values and builds a lane speed trigger.
virtual void buildContainerStop(MSNet &net, const std::string &id, const std::vector< std::string > &lines, MSLane *lane, SUMOReal frompos, SUMOReal topos)
Builds a container stop.
void registerParent(const int tag, GenericSAXHandler *handler)
Assigning a parent handler which is enabled when the specified tag is closed.
SUMOTime string2time(const std::string &r)
Definition: SUMOTime.cpp:48
#define POSITION_EPS
Definition: config.h:189
SUMOTime getSUMOTimeReporting(int attr, const char *objectid, bool &ok, bool report=true) const
Tries to read given attribute assuming it is a SUMOTime.
MSDetectorControl & getDetectorControl()
Returns the detector control.
Definition: MSNet.h:355
std::string getFileName(const SUMOSAXAttributes &attrs, const std::string &base, const bool allowEmpty=false)
Helper method to obtain the filename.
virtual SUMOTime addEvent(Command *operation, SUMOTime execTimeStep, AdaptType type)
Adds an Event.
void parseAndBuildChrgStn(MSNet &net, const SUMOSAXAttributes &attrs)
Parses his values and builds a charging station.
The XML-Handler for network loading.
Definition: NLHandler.h:93
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:205
Reroutes vehicles passing an edge.
static bool dictionary(const std::string &id, MSLane *lane)
Static (sic!) container methods {.
Definition: MSLane.cpp:890
virtual void buildChrgStn(MSNet &net, const std::string &id, const std::vector< std::string > &lines, MSLane *lane, SUMOReal frompos, SUMOReal topos, SUMOReal chrgpower, SUMOReal efficiency, SUMOReal chargeInTransit, SUMOReal ChargeDelay)
Builds a charging Station.
bool addContainerStop(MSStoppingPlace *containerStop)
Adds a container stop.
Definition: MSNet.cpp:794
Calibrates the flow on a segment to a specified one.
Definition: MSCalibrator.h:57
A variable speed sign.
Patch the time in a way that it is at least as high as the simulation begin time. ...
#define SUMOReal
Definition: config.h:215
static const bool gUseMesoSim
Definition: MSGlobals.h:102
#define DELTA_T
Definition: SUMOTime.h:50
virtual MSTriggeredRerouter * buildRerouter(MSNet &net, const std::string &id, MSEdgeVector &edges, SUMOReal prob, const std::string &file, bool off)
builds an rerouter
T getOpt(int attr, const char *objectid, bool &ok, T defaultValue, bool report=true) const
Tries to read given attribute assuming it is an int.
virtual MSLaneSpeedTrigger * buildLaneSpeedTrigger(MSNet &net, const std::string &id, const std::vector< MSLane * > &destLanes, const std::string &file)
Builds a lane speed trigger.
std::vector< MSEdge * > MSEdgeVector
Definition: MSEdge.h:78
T get(int attr, const char *objectid, bool &ok, bool report=true) const
Tries to read given attribute assuming it is an int.
Representation of a lane in the micro simulation.
Definition: MSLane.h:77
void buildVaporizer(const SUMOSAXAttributes &attrs)
Builds a vaporization.
MSLane * getLane(const SUMOSAXAttributes &attrs, const std::string &tt, const std::string &tid)
Returns the lane defined by attribute &quot;lane&quot;.