SUMO - Simulation of Urban MObility
MSLink Class Reference

#include <MSLink.h>

Collaboration diagram for MSLink:
Collaboration graph

Data Structures

struct  ApproachingVehicleInformation
 A structure holding the information about vehicles approaching a link. More...
 
struct  LinkLeader
 

Public Types

typedef std::vector< LinkLeaderLinkLeaders
 

Public Member Functions

void addBlockedLink (MSLink *link)
 
bool blockedAtTime (SUMOTime arrivalTime, SUMOTime leaveTime, SUMOReal arrivalSpeed, SUMOReal leaveSpeed, bool sameTargetLane, SUMOReal impatience, SUMOReal decel, SUMOTime waitingTime, std::vector< const SUMOVehicle * > *collectFoes=0) const
 Returns the information whether this link is blocked Valid after the vehicles have set their requests. More...
 
bool fromInternalLane () const
 return whether the fromLane of this link is an internal lane More...
 
ApproachingVehicleInformation getApproaching (const SUMOVehicle *veh) const
 
const std::map< const SUMOVehicle *, ApproachingVehicleInformation > & getApproaching () const
 return all approaching vehicles More...
 
MSLanegetApproachingLane () const
 Returns the lane leading to this link. More...
 
LinkDirection getDirection () const
 Returns the direction the vehicle passing this link take. More...
 
int getIndex () const
 Returns the respond index (for visualization) More...
 
const MSLanegetInternalLaneBefore () const
 return myInternalLaneBefore (always 0 when compiled without internal lanes) More...
 
MSLanegetLane () const
 Returns the connected lane. More...
 
SUMOTime getLastStateChange () const
 
SUMOTime getLeaveTime (const SUMOTime arrivalTime, const SUMOReal arrivalSpeed, const SUMOReal leaveSpeed, const SUMOReal vehicleLength) const
 return the expected time at which the given vehicle will clear the link More...
 
SUMOReal getLength () const
 Returns the length of this link. More...
 
SUMOTime getMesoTLSPenalty () const
 Returns the time penalty for passing a tls-controlled link (meso) More...
 
LinkState getState () const
 Returns the current state of the link. More...
 
MSLanegetViaLaneOrLane () const
 return the via lane if it exists and the lane otherwise More...
 
SUMOReal getZipperSpeed (const MSVehicle *ego, const SUMOReal dist, SUMOReal vSafe, SUMOTime arrivalTime, std::vector< const SUMOVehicle * > *collectFoes) const
 return the speed at which ego vehicle must approach the zipper link More...
 
bool hasApproachingFoe (SUMOTime arrivalTime, SUMOTime leaveTime, SUMOReal speed, SUMOReal decel) const
 Returns the information whether a vehicle is approaching on one of the link's foe streams. More...
 
bool hasFoes () const
 Returns whether this link belongs to a junction where more than one edge is incoming. More...
 
bool havePriority () const
 Returns whether this link is a major link. More...
 
bool haveRed () const
 Returns whether this link is blocked by a red (or redyellow) traffic light. More...
 
bool isBlockingAnyone () const
 
bool isCont () const
 
bool isExitLink () const
 return whether the fromLane of this link is an internal lane and toLane is a normal lane More...
 
bool isInternalJunctionLink () const
 return whether the fromLane and the toLane of this link are internal lanes More...
 
bool isLeader (const MSVehicle *ego, const MSVehicle *foe)
 
bool isTLSControlled () const
 
bool keepClear () const
 whether the junction after this link must be kept clear More...
 
bool lastWasContMajor () const
 whether this is a link past an internal junction which currently has priority More...
 
 MSLink (MSLane *succLane, LinkDirection dir, LinkState state, SUMOReal length, bool keepClear)
 Constructor for simulation not using internal lanes. More...
 
bool opened (SUMOTime arrivalTime, SUMOReal arrivalSpeed, SUMOReal leaveSpeed, SUMOReal vehicleLength, SUMOReal impatience, SUMOReal decel, SUMOTime waitingTime, std::vector< const SUMOVehicle * > *collectFoes=0) const
 Returns the information whether the link may be passed. More...
 
void passedJunction (const MSVehicle *vehicle)
 erase vehicle from myLinkLeaders of this links junction More...
 
void removeApproaching (const SUMOVehicle *veh)
 removes the vehicle from myApproachingVehicles More...
 
void setApproaching (const SUMOVehicle *approaching, const SUMOTime arrivalTime, const SUMOReal arrivalSpeed, const SUMOReal leaveSpeed, const bool setRequest, const SUMOTime arrivalTimeBraking, const SUMOReal arrivalSpeedBraking, const SUMOTime waitingTime, SUMOReal dist)
 Sets the information about an approaching vehicle. More...
 
void setMesoTLSPenalty (const SUMOTime penalty)
 Sets the time penalty for passing a tls-controlled link (meso) More...
 
void setRequestInformation (int index, bool hasFoes, bool isCont, const std::vector< MSLink * > &foeLinks, const std::vector< MSLane * > &foeLanes, MSLane *internalLaneBefore=0)
 Sets the request information. More...
 
void setTLState (LinkState state, SUMOTime t)
 Sets the current tl-state. More...
 
bool willHaveBlockedFoe () const
 
void writeApproaching (OutputDevice &od, const std::string fromLaneID) const
 write information about all approaching vehicles to the given output device More...
 
 ~MSLink ()
 Destructor. More...
 

Static Public Attributes

static const SUMOReal ZIPPER_ADAPT_DIST
 

Private Member Functions

 MSLink (const MSLink &s)
 invalidated copy constructor More...
 
MSLinkoperator= (const MSLink &s)
 invalidated assignment operator More...
 

Static Private Member Functions

static bool couldBrakeForLeader (SUMOReal followDist, SUMOReal leaderDist, const MSVehicle *follow, const MSVehicle *leader)
 whether fllower could stay behind leader (possibly by braking) More...
 
static bool maybeOccupied (MSLane *lane)
 returns whether the given lane may still be occupied by a vehicle currently on it More...
 
static bool unsafeMergeSpeeds (SUMOReal leaderSpeed, SUMOReal followerSpeed, SUMOReal leaderDecel, SUMOReal followerDecel)
 return whether the given vehicles may NOT merge safely More...
 

Private Attributes

bool myAmCont
 
std::map< const SUMOVehicle *, ApproachingVehicleInformationmyApproachingVehicles
 
std::set< MSLink * > myBlockedFoeLinks
 
LinkDirection myDirection
 An abstract (hopefully human readable) definition of the link's direction. More...
 
std::vector< const MSLane * > myFoeLanes
 
std::vector< MSLink * > myFoeLinks
 
bool myHasFoes
 Whether any foe links exist. More...
 
int myIndex
 The position within this respond. More...
 
MSJunctionmyJunction
 the junction to which this link belongs More...
 
bool myKeepClear
 
MSLanemyLane
 The lane (but the internal one) approached by this link. More...
 
SUMOTime myLastStateChange
 The time of the last state change. More...
 
SUMOReal myLength
 The length of the link. More...
 
SUMOTime myMesoTLSPenalty
 penalty time for mesoscopic simulation More...
 
LinkState myState
 The state of the link. More...
 

Static Private Attributes

static const SUMOTime myLookaheadTime = TIME2STEPS(1)
 
static const SUMOTime myLookaheadTimeZipper = TIME2STEPS(4)
 

Detailed Description

Definition at line 76 of file MSLink.h.

Member Typedef Documentation

typedef std::vector<LinkLeader> MSLink::LinkLeaders

Definition at line 91 of file MSLink.h.

Constructor & Destructor Documentation

MSLink::MSLink ( MSLane succLane,
LinkDirection  dir,
LinkState  state,
SUMOReal  length,
bool  keepClear 
)

Constructor for simulation not using internal lanes.

Parameters
[in]succLaneThe lane approached by this link
[in]dirThe direction of this link
[in]stateThe state of this link
[in]lengthThe length of this link
[in]keepClearWhether the junction after this link must be kept clear

Definition at line 69 of file MSLink.cpp.

MSLink::~MSLink ( )

Destructor.

Definition at line 100 of file MSLink.cpp.

MSLink::MSLink ( const MSLink s)
private

invalidated copy constructor

Member Function Documentation

void MSLink::addBlockedLink ( MSLink link)

Definition at line 253 of file MSLink.cpp.

References myBlockedFoeLinks.

bool MSLink::blockedAtTime ( SUMOTime  arrivalTime,
SUMOTime  leaveTime,
SUMOReal  arrivalSpeed,
SUMOReal  leaveSpeed,
bool  sameTargetLane,
SUMOReal  impatience,
SUMOReal  decel,
SUMOTime  waitingTime,
std::vector< const SUMOVehicle * > *  collectFoes = 0 
) const

Returns the information whether this link is blocked Valid after the vehicles have set their requests.

Parameters
[in]arrivalTimeThe arrivalTime of the vehicle who checks for an approaching foe
[in]leaveTimeThe leaveTime of the vehicle who checks for an approaching foe
[in]arrivalSpeedThe speed with which the checking vehicle plans to arrive at the link
[in]leaveSpeedThe speed with which the checking vehicle plans to leave the link
[in]sameTargetLaneWhether the link that calls this method has the same target lane as this link
[in]impatienceThe impatience of the checking vehicle
[in]decelThe maximum deceleration of the checking vehicle
[in]waitingTimeThe waiting time of the checking vehicle
[in]collectFoesIf a vector is passed the return value is always False, instead all blocking foes are collected and inserted into this vector
Returns
Whether this link is blocked
Note
Since this needs to be called without a SUMOVehicle (TraCI), we cannot simply pass the checking vehicle itself

Definition at line 331 of file MSLink.cpp.

References LINKSTATE_ALLWAY_STOP, LINKSTATE_ZIPPER, myApproachingVehicles, myLookaheadTime, myLookaheadTimeZipper, myState, and unsafeMergeSpeeds().

Referenced by getApproaching().

bool MSLink::couldBrakeForLeader ( SUMOReal  followDist,
SUMOReal  leaderDist,
const MSVehicle follow,
const MSVehicle leader 
)
staticprivate

whether fllower could stay behind leader (possibly by braking)

Definition at line 757 of file MSLink.cpp.

References MSVehicle::getCarFollowModel(), MSCFModel::getMaxDecel(), and MSVehicle::getSpeed().

Referenced by getZipperSpeed(), and unsafeMergeSpeeds().

bool MSLink::fromInternalLane ( ) const

return whether the fromLane of this link is an internal lane

Referenced by keepClear(), and writeApproaching().

MSLink::ApproachingVehicleInformation MSLink::getApproaching ( const SUMOVehicle veh) const

Definition at line 277 of file MSLink.cpp.

References myApproachingVehicles.

Referenced by getZipperSpeed().

const std::map<const SUMOVehicle*, ApproachingVehicleInformation>& MSLink::getApproaching ( ) const
inline

return all approaching vehicles

Definition at line 204 of file MSLink.h.

References blockedAtTime(), myApproachingVehicles, opened(), and SUMOReal.

MSLane * MSLink::getApproachingLane ( ) const

Returns the lane leading to this link.

Returns
The lane leading to this link

Definition at line 442 of file MSLink.cpp.

References MSLane::getIncomingLanes(), getIndex(), MSLane::getLinkCont(), myLane, toString(), and WRITE_WARNING.

Referenced by getLastStateChange(), and MSRailSignal::init().

LinkDirection MSLink::getDirection ( ) const

Returns the direction the vehicle passing this link take.

Returns
The direction of this link

Definition at line 422 of file MSLink.cpp.

References myDirection.

Referenced by MSVehicle::executeMove(), getLastStateChange(), and TraCIServerAPI_Lane::processGet().

int MSLink::getIndex ( ) const
inline

Returns the respond index (for visualization)

Returns
The respond index for this link

Definition at line 306 of file MSLink.h.

References myIndex.

Referenced by GUILane::drawLinkNo(), and getApproachingLane().

const MSLane * MSLink::getInternalLaneBefore ( ) const

return myInternalLaneBefore (always 0 when compiled without internal lanes)

Definition at line 674 of file MSLink.cpp.

References SUMOReal.

Referenced by keepClear().

SUMOTime MSLink::getLastStateChange ( ) const
inline

Definition at line 268 of file MSLink.h.

References getApproachingLane(), getDirection(), getLane(), myLastStateChange, and setTLState().

SUMOTime MSLink::getLeaveTime ( const SUMOTime  arrivalTime,
const SUMOReal  arrivalSpeed,
const SUMOReal  leaveSpeed,
const SUMOReal  vehicleLength 
) const

return the expected time at which the given vehicle will clear the link

Definition at line 288 of file MSLink.cpp.

References getLength(), MAX2(), NUMERICAL_EPS, SUMOReal, and TIME2STEPS.

Referenced by keepClear(), opened(), and setApproaching().

SUMOReal MSLink::getLength ( ) const
inline

Returns the length of this link.

Returns
The length of this link

Definition at line 333 of file MSLink.h.

References myLength.

Referenced by MEVehicle::estimateLeaveSpeed(), MSVehicle::estimateLeaveSpeed(), getLeaveTime(), and TraCIServerAPI_Lane::processGet().

SUMOTime MSLink::getMesoTLSPenalty ( ) const
inline

Returns the time penalty for passing a tls-controlled link (meso)

Definition at line 411 of file MSLink.h.

References myMesoTLSPenalty.

Referenced by MESegment::getTLSPenalty().

LinkState MSLink::getState ( ) const
inline

Returns the current state of the link.

Returns
The current state of this link

Definition at line 262 of file MSLink.h.

References myState.

Referenced by MSEdge::changeLanes(), GUILane::drawLinkRule(), Command_SaveTLCoupledLaneDet::execute(), MSVehicle::executeMove(), MSLane::getIncomingLinkState(), TraCIServerAPI_Lane::processGet(), and MELoop::setApproaching().

bool MSLink::hasApproachingFoe ( SUMOTime  arrivalTime,
SUMOTime  leaveTime,
SUMOReal  speed,
SUMOReal  decel 
) const

Returns the information whether a vehicle is approaching on one of the link's foe streams.

Valid after the vehicles have set their requests

Parameters
[in]arrivalTimeThe arrivalTime of the vehicle who checks for an approaching foe
[in]leaveTimeThe leaveTime of the vehicle who checks for an approaching foe
[in]speedThe speed with which the checking vehicle plans to leave the link
[in]decelThe maximum deceleration of the checking vehicle
Returns
Whether a foe of this link is approaching

Definition at line 406 of file MSLink.cpp.

References myFoeLanes, myFoeLinks, and myLane.

Referenced by isBlockingAnyone(), and TraCIServerAPI_Lane::processGet().

bool MSLink::hasFoes ( ) const
inline

Returns whether this link belongs to a junction where more than one edge is incoming.

Returns
Whether any foe links exist

Definition at line 341 of file MSLink.h.

References myHasFoes.

Referenced by MSVehicle::checkRewindLinkLanes(), and setRequestInformation().

bool MSLink::havePriority ( ) const
inline

Returns whether this link is a major link.

Returns
Whether the link has a large priority

Definition at line 314 of file MSLink.h.

References myState.

Referenced by MSVehicle::checkRewindLinkLanes(), GUILane::drawGL(), MSVehicle::executeMove(), MESegment::isOpen(), lastWasContMajor(), MSVehicle::nextLinkPriority(), opened(), and TraCIServerAPI_Lane::processGet().

bool MSLink::haveRed ( ) const
inline

Returns whether this link is blocked by a red (or redyellow) traffic light.

Returns
Whether the link has a red light

Definition at line 321 of file MSLink.h.

References LINKSTATE_TL_RED, LINKSTATE_TL_REDYELLOW, and myState.

Referenced by opened().

bool MSLink::isBlockingAnyone ( ) const
inline

Definition at line 238 of file MSLink.h.

References hasApproachingFoe(), myApproachingVehicles, SUMOReal, and willHaveBlockedFoe().

bool MSLink::isCont ( ) const
inline

Definition at line 346 of file MSLink.h.

References myAmCont.

Referenced by MSVehicle::checkRewindLinkLanes(), MSVehicle::executeMove(), and setRequestInformation().

bool MSLink::isExitLink ( ) const

return whether the fromLane of this link is an internal lane and toLane is a normal lane

Referenced by keepClear(), and writeApproaching().

bool MSLink::isInternalJunctionLink ( ) const

return whether the fromLane and the toLane of this link are internal lanes

Referenced by keepClear(), and writeApproaching().

bool MSLink::isLeader ( const MSVehicle ego,
const MSVehicle foe 
)

Definition at line 664 of file MSLink.cpp.

References MSJunction::isLeader(), and myJunction.

Referenced by keepClear(), and GUIVehicle::selectBlockingFoes().

bool MSLink::isTLSControlled ( ) const
inline

Definition at line 325 of file MSLink.h.

References myLastStateChange, and SUMOTime_MIN.

Referenced by MESegment::getTLSPenalty().

bool MSLink::keepClear ( ) const
inline
bool MSLink::lastWasContMajor ( ) const

whether this is a link past an internal junction which currently has priority

Definition at line 470 of file MSLink.cpp.

References MSEdge::EDGEFUNCTION_INTERNAL, MSLinkContHelper::getConnectingLink(), MSLane::getEdge(), MSLane::getLogicalPredecessorLane(), MSEdge::getPurpose(), havePriority(), and myAmCont.

Referenced by MSVehicle::executeMove(), and keepClear().

bool MSLink::maybeOccupied ( MSLane lane)
staticprivate
bool MSLink::opened ( SUMOTime  arrivalTime,
SUMOReal  arrivalSpeed,
SUMOReal  leaveSpeed,
SUMOReal  vehicleLength,
SUMOReal  impatience,
SUMOReal  decel,
SUMOTime  waitingTime,
std::vector< const SUMOVehicle * > *  collectFoes = 0 
) const

Returns the information whether the link may be passed.

Valid after the junctions have set their reponds

Parameters
[in]collectFoesIf a vector is passed, all blocking foes are collected and inserted into this vector
Returns
Whether this link may be passed.

Definition at line 295 of file MSLink.cpp.

References getLeaveTime(), MSGlobals::gUseMesoSim, MSGlobals::gUsingInternalLanes, havePriority(), haveRed(), LINKSTATE_ALLWAY_STOP, LINKSTATE_STOP, LINKSTATE_ZIPPER, myAmCont, myFoeLinks, myLane, and myState.

Referenced by MSVehicle::checkRewindLinkLanes(), MSVehicle::executeMove(), getApproaching(), MESegment::isOpen(), MSPModel_Striping::moveInDirectionOnLane(), TraCIServerAPI_Lane::processGet(), and GUIVehicle::selectBlockingFoes().

MSLink& MSLink::operator= ( const MSLink s)
private

invalidated assignment operator

void MSLink::passedJunction ( const MSVehicle vehicle)

erase vehicle from myLinkLeaders of this links junction

Definition at line 656 of file MSLink.cpp.

References myJunction, and MSJunction::passedJunction().

Referenced by MSVehicle::executeMove(), and keepClear().

void MSLink::removeApproaching ( const SUMOVehicle veh)

removes the vehicle from myApproachingVehicles

Definition at line 271 of file MSLink.cpp.

References myApproachingVehicles.

Referenced by MSVehicle::executeMove(), and MEVehicle::replaceRoute().

void MSLink::setApproaching ( const SUMOVehicle approaching,
const SUMOTime  arrivalTime,
const SUMOReal  arrivalSpeed,
const SUMOReal  leaveSpeed,
const bool  setRequest,
const SUMOTime  arrivalTimeBraking,
const SUMOReal  arrivalSpeedBraking,
const SUMOTime  waitingTime,
SUMOReal  dist 
)

Sets the information about an approaching vehicle.

The information is stored in myApproachingVehicles.

Definition at line 243 of file MSLink.cpp.

References getLeaveTime(), MSVehicleType::getLength(), SUMOVehicle::getVehicleType(), and myApproachingVehicles.

Referenced by MELoop::setApproaching().

void MSLink::setMesoTLSPenalty ( const SUMOTime  penalty)
inline

Sets the time penalty for passing a tls-controlled link (meso)

Definition at line 416 of file MSLink.h.

References myMesoTLSPenalty.

void MSLink::setRequestInformation ( int  index,
bool  hasFoes,
bool  isCont,
const std::vector< MSLink * > &  foeLinks,
const std::vector< MSLane * > &  foeLanes,
MSLane internalLaneBefore = 0 
)
void MSLink::setTLState ( LinkState  state,
SUMOTime  t 
)

Sets the current tl-state.

Parameters
[in]stateThe current state of the link
[in]tThe time of the state change

Definition at line 428 of file MSLink.cpp.

References myLastStateChange, and myState.

Referenced by MSTrafficLightLogic::addLink(), and getLastStateChange().

static bool MSLink::unsafeMergeSpeeds ( SUMOReal  leaderSpeed,
SUMOReal  followerSpeed,
SUMOReal  leaderDecel,
SUMOReal  followerDecel 
)
inlinestaticprivate

return whether the given vehicles may NOT merge safely

Definition at line 422 of file MSLink.h.

References couldBrakeForLeader(), maybeOccupied(), and SUMOReal.

Referenced by blockedAtTime().

bool MSLink::willHaveBlockedFoe ( ) const

Definition at line 260 of file MSLink.cpp.

References myBlockedFoeLinks.

Referenced by isBlockingAnyone().

Field Documentation

bool MSLink::myAmCont
private

Definition at line 458 of file MSLink.h.

Referenced by isCont(), lastWasContMajor(), opened(), and setRequestInformation().

std::map<const SUMOVehicle*, ApproachingVehicleInformation> MSLink::myApproachingVehicles
private
std::set<MSLink*> MSLink::myBlockedFoeLinks
private

Definition at line 438 of file MSLink.h.

Referenced by addBlockedLink(), and willHaveBlockedFoe().

LinkDirection MSLink::myDirection
private

An abstract (hopefully human readable) definition of the link's direction.

Definition at line 450 of file MSLink.h.

Referenced by getDirection().

std::vector<const MSLane*> MSLink::myFoeLanes
private

Definition at line 484 of file MSLink.h.

Referenced by hasApproachingFoe(), setRequestInformation(), and writeApproaching().

std::vector<MSLink*> MSLink::myFoeLinks
private

Definition at line 483 of file MSLink.h.

Referenced by getZipperSpeed(), hasApproachingFoe(), opened(), and setRequestInformation().

bool MSLink::myHasFoes
private

Whether any foe links exist.

Definition at line 456 of file MSLink.h.

Referenced by hasFoes(), and setRequestInformation().

int MSLink::myIndex
private

The position within this respond.

Definition at line 441 of file MSLink.h.

Referenced by getIndex(), and setRequestInformation().

MSJunction* MSLink::myJunction
private

the junction to which this link belongs

Definition at line 481 of file MSLink.h.

Referenced by getZipperSpeed(), isLeader(), passedJunction(), and setRequestInformation().

bool MSLink::myKeepClear
private

Definition at line 460 of file MSLink.h.

Referenced by keepClear().

MSLane* MSLink::myLane
private

The lane (but the internal one) approached by this link.

Definition at line 435 of file MSLink.h.

Referenced by getApproachingLane(), getLane(), getViaLaneOrLane(), hasApproachingFoe(), opened(), setRequestInformation(), and writeApproaching().

SUMOTime MSLink::myLastStateChange
private

The time of the last state change.

Definition at line 447 of file MSLink.h.

Referenced by getLastStateChange(), isTLSControlled(), and setTLState().

SUMOReal MSLink::myLength
private

The length of the link.

Definition at line 453 of file MSLink.h.

Referenced by getLength().

const SUMOTime MSLink::myLookaheadTime = TIME2STEPS(1)
staticprivate

Definition at line 486 of file MSLink.h.

Referenced by blockedAtTime().

const SUMOTime MSLink::myLookaheadTimeZipper = TIME2STEPS(4)
staticprivate

Definition at line 487 of file MSLink.h.

Referenced by blockedAtTime().

SUMOTime MSLink::myMesoTLSPenalty
private

penalty time for mesoscopic simulation

Definition at line 463 of file MSLink.h.

Referenced by getMesoTLSPenalty(), and setMesoTLSPenalty().

LinkState MSLink::myState
private

The state of the link.

Definition at line 444 of file MSLink.h.

Referenced by blockedAtTime(), getState(), havePriority(), haveRed(), opened(), and setTLState().

const SUMOReal MSLink::ZIPPER_ADAPT_DIST
static

Definition at line 80 of file MSLink.h.

Referenced by getZipperSpeed(), and MSVehicle::unsafeLinkAhead().


The documentation for this class was generated from the following files: