48 #ifdef CHECK_MEMORY_LEAKS
50 #endif // CHECK_MEMORY_LEAKS
65 :
MSTransportable::
Stage(destination, toStop, arrivalPos, DRIVING), myLines(lines.begin(), lines.end()),
77 myWaitingEdge = previous->
getEdge();
83 myVehicle = availableVehicle;
84 myWaitingEdge->removeContainer(container);
91 myWaitingEdge->addContainer(container);
98 return myVehicle->getEdge();
100 return myWaitingEdge;
106 return myWaitingEdge;
112 if (myVehicle != 0) {
121 if (myVehicle != 0) {
123 return myVehicle->getEdge()->getLanes()[0]->getShape().positionAtOffset(myVehicle->getPositionOnLane());
130 if (myVehicle != 0) {
138 return getEdgeAngle(myWaitingEdge, myWaitingPos) +
M_PI / 2.;
143 return myLines.count(line) > 0;
148 return myVehicle == 0;
158 return myVehicle == 0 ? 0 : myVehicle->getSpeed();
168 return myDepartContainerStop;
201 myWaitingDuration(duration),
202 myWaitingUntil(until),
210 return &myDestination;
215 return &myDestination;
225 return myWaitingUntil;
235 return getEdgeAngle(&myDestination, myArrivalPos) +
M_PI;
240 return now - myWaitingStart;
250 return myCurrentContainerStop;
256 myWaitingStart = now;
257 const SUMOTime until =
MAX3(now, now + myWaitingDuration, myWaitingUntil);
269 if (myWaitingDuration >= 0) {
272 if (myWaitingUntil >= 0) {
299 mySpeed(speed), myContainerState(0), myCurrentInternalEdge(0) {
310 myRouteStep = myRoute.end() - 1;
314 (*myRouteStep)->addContainer(container);
319 if (myCurrentInternalEdge != 0) {
320 return myCurrentInternalEdge;
328 return myRoute.front();
333 return myRoute.back();
338 return myContainerState->getEdgePos(*
this, now);
343 return myContainerState->getPosition(*
this, now);
348 return myContainerState->getAngle(*
this, now);
358 return myContainerState->getSpeed(*
this);
363 return myDepartContainerStop;
383 .
writeAttr(
"agent", c.
getID()).writeAttr(
"link", myRoute.front()->getID()).closeTag();
390 .
writeAttr(
"agent", c.
getID()).writeAttr(
"link", myRoute.back()->getID()).closeTag();
396 if (myRouteStep == myRoute.end() - 1) {
398 if (myDestinationStop != 0) {
399 myDestinationStop->addTransportable(container);
406 if (nextInternal == 0) {
408 myCurrentInternalEdge = 0;
410 myCurrentInternalEdge = nextInternal;
433 (*myStep)->proceed(net,
this, time, prior);
444 MSTransportablePlan::const_iterator i =
myPlan->begin();
448 for (; i !=
myPlan->end(); ++i) {
449 (*i)->routeOutput(os);
virtual ~MSContainer()
destructor
SUMOReal getEdgePos(SUMOTime now) const
Returns the offset from the start of the current edge measured in its natural direction.
SUMOReal myDepartPos
the depart position
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
void setArrived(SUMOTime now)
logs end of the step
MSEdge & getEdge() const
Returns the lane's edge.
virtual void beginEventOutput(const MSTransportable &c, SUMOTime t, OutputDevice &os) const
Called for writing the events output.
Representation of a vehicle in the micro simulation.
SUMOReal getAngle(SUMOTime now) const
the angle of the edge minus 90deg
A lane area vehicles can halt at.
virtual void proceed(MSNet *net, MSTransportable *container, SUMOTime now, Stage *previous)
proceeds to the next step
virtual void proceed(MSNet *net, MSTransportable *container, SUMOTime now, Stage *previous)
proceeds to the next step
bool isWaiting4Vehicle() const
Whether the transportable waits for a vehicle.
The departure is container triggered.
bool isWaitingFor(const std::string &line) const
Whether the container waits for a vehicle of the line specified.
MSContainerStage_Tranship(const std::vector< const MSEdge * > &route, MSStoppingPlace *toStop, SUMOReal speed, SUMOReal departPos, SUMOReal arrivalPos)
constructor
SUMOTime getWaitingTime(SUMOTime now) const
time spent waiting for a ride
virtual void tripInfoOutput(OutputDevice &os) const
Called on writing tripinfo output.
virtual void addContainer(MSTransportable *container) const
Add a container to myContainers.
virtual const MSEdge * getEdge() const =0
Returns the current edge.
const MSStoppingPlace * getDestinationStop() const
returns the destination stop (if any)
virtual void tripInfoOutput(OutputDevice &os) const
Called on writing tripinfo output.
~MSContainerStage_Tranship()
destructor
virtual SUMOReal getEdgePos(SUMOTime now) const =0
std::string time2string(SUMOTime t)
SUMOTime getWaitingTime(SUMOTime now) const
the time this transportable spent waiting
const MSEdge * getEdge() const
Returns the current edge.
MSContainerStage_Driving(const MSEdge &destination, MSStoppingPlace *toStop, const SUMOReal arrivalPos, const std::vector< std::string > &lines)
constructor
SUMOReal getSpeed() const
Returns the speed of the container which is always zero in that stage.
MSContainerStage_Waiting(const MSEdge &destination, SUMOTime duration, SUMOTime until, SUMOReal pos, const std::string &actType)
constructor
void addWaiting(const MSEdge *edge, MSTransportable *container)
adds a container to the list of containers waiting for a vehicle on the specified edge ...
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
const std::string & getID() const
returns the id of the transportable
SUMOVehicle * getWaitingVehicle(const MSEdge *const edge, const std::set< std::string > &lines, const SUMOReal position, const std::string ridingID)
void removeWaiting(const MSEdge *const edge, SUMOVehicle *vehicle)
Removes a vehicle from the list of waiting vehicles to a given edge.
virtual bool proceed(MSNet *net, SUMOTime time)=0
SUMOReal getEdgePos(SUMOTime now) const
MSTransportablePlan::iterator myStep
the iterator over the route
virtual void beginEventOutput(const MSTransportable &container, SUMOTime t, OutputDevice &os) const
Called for writing the events output.
virtual void removeContainer(MSTransportable *container) const
Remove container from myContainers.
The simulated network and simulation perfomer.
~MSContainerStage_Driving()
destructor
The car-following model and parameter.
SUMOTime getDesiredDepart() const
Returns the desired departure time.
CState * add(MSTransportable *container, MSContainer::MSContainerStage_Tranship *stage, SUMOTime now)
register the given container as a transhiped container
void unregisterOneWaitingForContainer()
decreases the count of vehicles waiting for a container to allow recogniztion of container related de...
const MSEdge * getEdge() const
Returns the current edge.
static SUMOReal interpretEdgePos(SUMOReal pos, SUMOReal maximumValue, SumoXMLAttr attr, const std::string &id)
Interprets negative edge positions and fits them onto a given edge.
std::vector< const MSEdge * > myRoute
The route of the container.
virtual void addContainer(MSTransportable *container)=0
Adds a container to this vehicle.
virtual void beginEventOutput(const MSTransportable &container, SUMOTime t, OutputDevice &os) const
Called for writing the events output.
const std::string & getID() const
Returns the id.
A road/street connecting two junctions.
std::vector< MSTransportable::Stage * > MSTransportablePlan
the structure holding the plan of a transportable
const MSEdge * getEdge() const
Returns the current edge.
SUMOReal getLength() const
return the length of the edge
~MSContainerStage_Waiting()
destructor
void setWaitEnd(SUMOTime time, MSTransportable *container)
sets the arrival time for a waiting container
const MSLane & getLane() const
Returns the lane this stop is located at.
SUMOTime getUntil() const
Returns time until the container waits.
const MSEdge * getEdge() const
Returns the current edge.
virtual void routeOutput(OutputDevice &os) const
Called on writing vehroute output.
Representation of a vehicle.
virtual void routeOutput(OutputDevice &os) const
Called on writing vehroute output.
A point in 2D or 3D with translation and scaling methods.
virtual MSContainerControl & getContainerControl()
Returns the container control.
SUMOReal getSpeed() const
the speed of the container
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
Position getPosition(SUMOTime now) const
Returns the position of the container.
void setTranship(MSTransportable *c)
adds a container to myTranship
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
SUMOReal getSpeed() const
Returns the speed of the container.
static const SUMOReal ROADSIDE_OFFSET
the offset for computing container positions when standing at an edge
Position getPosition(SUMOTime now) const
returns the position of the transportable
virtual void routeOutput(OutputDevice &os) const
Called on writing vehroute output.
virtual void endEventOutput(const MSTransportable &c, SUMOTime t, OutputDevice &os) const
Called for writing the events output (end of an action)
const MSEdge * getFromEdge() const
Returns first edge of the containers route.
bool moveToNextEdge(MSTransportable *container, SUMOTime currentTime, MSEdge *nextInternal=0)
move forward and return whether the container arrived
const MSEdge & getDestination() const
Returns the current destination.
virtual void proceed(MSNet *net, MSTransportable *container, SUMOTime now, Stage *previous)
proceeds to the next step
Position getPosition(SUMOTime now) const
returns the position of the transportable
const MSEdge * getFromEdge() const
Returns the current edge.
std::string getStageDescription() const
returns the stage description as a string
const MSEdge * getFromEdge() const
Returns the departure edge.
Structure representing possible vehicle parameter.
MSInsertionControl & getInsertionControl()
Returns the insertion control.
virtual const SUMOVehicleParameter & getParameter() const =0
Returns the vehicle's parameter (including departure definition)
bool proceed(MSNet *net, SUMOTime time)
SUMOReal getAngle(SUMOTime now) const
the angle of the vehicle or the angle of the edge + 90deg
void unsetTranship(MSTransportable *c)
removes a container from myTranship
virtual void tripInfoOutput(OutputDevice &os) const
Called on writing tripinfo output.
MSStoppingPlace * getDepartContainerStop() const
const MSEdge * getFromEdge() const
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=OUTPUT_ACCURACY)
Static storage of an output device and its base (abstract) implementation.
SUMOTime getWaitingTime(SUMOTime now) const
Returns the time the container spent waiting.
bool closeTag()
Closes the most recently opened tag.
MSStoppingPlace * getDepartContainerStop() const
returns the container stop from which the container departs
MSTransportablePlan * myPlan
the plan of the transportable
MSContainer(const SUMOVehicleParameter *pars, const MSVehicleType *vtype, MSTransportablePlan *plan)
constructor
const MSEdge * getToEdge() const
Returns last edge of the containers route.
SUMOReal getAngle(SUMOTime now) const
Returns the angle of the container.
bool isWaiting4Vehicle() const
Whether the container waits for a vehicle.
MSStoppingPlace * getDepartContainerStop() const
returns the container stop from which the container departs
void add(SUMOVehicle *veh)
Adds a single vehicle for departure.
virtual void endEventOutput(const MSTransportable &container, SUMOTime t, OutputDevice &os) const
Called for writing the events output (end of an action)
virtual void erase(MSTransportable *container)
removes a single container
virtual void endEventOutput(const MSTransportable &container, SUMOTime t, OutputDevice &os) const
Called for writing the events output (end of an action)
static MSCModel_NonInteracting * getModel()
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
void routeOutput(OutputDevice &os) const
Called on writing vehroute output.
SUMOReal getEdgePos(SUMOTime now) const
SUMOReal getAngle() const
Returns the vehicle's direction in degrees.