100 const double _arrivalSpeed,
const double _leaveSpeed,
101 const bool _willPass,
103 const double _arrivalSpeedBraking,
107 arrivalTime(_arrivalTime), leavingTime(_leavingTime),
108 arrivalSpeed(_arrivalSpeed), leaveSpeed(_leaveSpeed),
110 arrivalTimeBraking(_arrivalTimeBraking),
111 arrivalSpeedBraking(_arrivalSpeedBraking),
112 waitingTime(_waitingTime),
165 const std::vector<MSLink*>& foeLinks,
const std::vector<MSLane*>& foeLanes,
166 MSLane* internalLaneBefore = 0);
191 const double arrivalSpeed,
const double leaveSpeed,
const bool setRequest,
192 const SUMOTime arrivalTimeBraking,
const double arrivalSpeedBraking,
193 const SUMOTime waitingTime,
double dist);
209 const std::map<const SUMOVehicle*, const ApproachingVehicleInformation, ComparatorNumericalIdLess>&
getApproaching()
const {
220 bool opened(
SUMOTime arrivalTime,
double arrivalSpeed,
double leaveSpeed,
double vehicleLength,
221 double impatience,
double decel,
SUMOTime waitingTime,
223 std::vector<const SUMOVehicle*>* collectFoes = 0,
224 bool ignoreRed =
false,
242 bool sameTargetLane,
double impatience,
double decel,
SUMOTime waitingTime,
243 std::vector<const SUMOVehicle*>* collectFoes = 0,
const SUMOVehicle* ego = 0)
const;
436 LinkLeaders
getLeaderInfo(
const MSVehicle* ego,
double dist, std::vector<const MSPerson*>* collectBlockers = 0,
bool isShadowLink =
false)
const;
444 std::vector<const SUMOVehicle*>* collectFoes)
const;
456 SUMOTime getLeaveTime(
const SUMOTime arrivalTime,
const double arrivalSpeed,
const double leaveSpeed,
const double vehicleLength)
const;
530 static inline bool unsafeMergeSpeeds(
double leaderSpeed,
double followerSpeed,
double leaderDecel,
double followerDecel) {
532 return (leaderSpeed * leaderSpeed / leaderDecel) <= (followerSpeed * followerSpeed / followerDecel);
544 SUMOTime arrivalTime,
SUMOTime leaveTime,
double arrivalSpeed,
double leaveSpeed,
545 bool sameTargetLane,
double impatience,
double decel,
SUMOTime waitingTime,
bool contIntersect(const MSLane *lane, const MSLane *foe)
check if the lane intersects with a foe cont-lane
int myIndex
The position within this respond.
Representation of a vehicle in the micro simulation.
bool blockedAtTime(SUMOTime arrivalTime, SUMOTime leaveTime, double arrivalSpeed, double leaveSpeed, bool sameTargetLane, double impatience, double decel, SUMOTime waitingTime, std::vector< const SUMOVehicle *> *collectFoes=0, const SUMOVehicle *ego=0) const
Returns the information whether this link is blocked Valid after the vehicles have set their requests...
MSLane * myLane
The lane behind the junction approached by this link.
bool keepClear() const
whether the junction after this link must be kept clear
void addBlockedLink(MSLink *link)
SUMOTime myMesoTLSPenalty
penalty time at tls for mesoscopic simulation
LinkState myState
The state of the link.
const LinkState myOffState
The state of the link when switching of traffic light control.
LinkDirection getDirection() const
Returns the direction the vehicle passing this link take.
MSLane * getLane() const
Returns the connected lane.
SUMOTime getMesoTLSPenalty() const
Returns the time penalty for passing a tls-controlled link (meso)
bool myHavePedestrianCrossingFoe
whether on of myFoeLanes is a crossing
double getLengthBeforeCrossing(const MSLane *foeLane) const
Returns the internal length from the beginning of the link's internal lane before to the crossing wit...
const int myTLIndex
the traffic light index
bool myHasFoes
Whether any foe links exist.
SUMOTime getLastStateChange() const
The base class for an intersection.
std::vector< MSLink * > mySublaneFoeLinks
const MSLane * getLaneBefore() const
return the internalLaneBefore if it exists and the laneBefore otherwise
std::map< const SUMOVehicle *, const ApproachingVehicleInformation, ComparatorNumericalIdLess > myApproachingVehicles
SUMOTime myLastStateChange
The time of the last state change.
std::vector< MSLink * > myFoeLinks
MSLink * getCorrespondingExitLink() const
returns the corresponding exit link for entryLinks to a junction.
void setTLState(LinkState state, SUMOTime t)
Sets the current tl-state.
int getTLIndex() const
Returns the TLS index.
LinkDirection myDirection
An abstract (hopefully human readable) definition of the link's direction.
void setMesoTLSPenalty(const SUMOTime penalty)
Sets the time penalty for passing a tls-controlled link (meso)
double getZipperSpeed(const MSVehicle *ego, const double dist, double vSafe, SUMOTime arrivalTime, std::vector< const SUMOVehicle *> *collectFoes) const
return the speed at which ego vehicle must approach the zipper link
static const double ZIPPER_ADAPT_DIST
void addWalkingAreaFoeExit(const MSLane *lane)
add walkingarea as foe (when leaving the junction)
static const SUMOTime myLookaheadTime
double myLateralShift
lateral shift to be applied when passing this link
std::vector< std::pair< double, double > > myLengthsBehindCrossing
LinkState getOffState() const
Returns the off-state for the link.
bool hasFoes() const
Returns whether this link belongs to a junction where more than one edge is incoming.
bool checkContOff() const
figure out whether the cont status remains in effect when switching off the tls
const MSLane * myWalkingAreaFoeExit
walkingArea that must be checked when leaving the intersection
std::string getDescription() const
get string description for this link
double getInternalLengthsBefore() const
Returns the cumulative length of all internal lanes before this link.
double getInternalLengthsAfter() const
Returns the cumulative length of all internal lanes after this link.
std::vector< MSLane * > mySublaneFoeLanes
double getLateralShift()
return lateral shift that must be applied when passing this link
double myGreenFraction
green fraction at tls for mesoscopic simulation
void setApproaching(const SUMOVehicle *approaching, const SUMOTime arrivalTime, const double arrivalSpeed, const double leaveSpeed, const bool setRequest, const SUMOTime arrivalTimeBraking, const double arrivalSpeedBraking, const SUMOTime waitingTime, double dist)
Sets the information about an approaching vehicle.
bool isInternalJunctionLink() const
return whether the fromLane and the toLane of this link are internal lanes
MSLink * computeParallelLink(int direction)
MSLink * getParallelLink(int direction) const
return the link that is parallel to this lane or 0
void setGreenFraction(const double fraction)
Sets the green fraction for passing a tls-controlled link (meso)
LinkState getState() const
Returns the current state of the link.
bool willHaveBlockedFoe() const
LinkDirection
The different directions a link between two lanes may take (or a stream between two edges)...
bool isTLSControlled() const
bool fromInternalLane() const
return whether the fromLane of this link is an internal lane
const MSLane * myInternalLaneBefore
bool lastWasContMajor() const
whether this is a link past an internal junction which currently has priority
MSLink & operator=(const MSLink &s)
invalidated assignment operator
SUMOTime getLeaveTime(const SUMOTime arrivalTime, const double arrivalSpeed, const double leaveSpeed, const double vehicleLength) const
return the expected time at which the given vehicle will clear the link
MSLane * getViaLane() const
Returns the following inner lane.
double getFoeVisibilityDistance() const
Returns the distance on the approaching lane from which an approaching vehicle is able to see all rel...
bool isExitLink() const
return whether the fromLane of this link is an internal lane and toLane is a normal lane ...
Representation of a vehicle.
bool opened(SUMOTime arrivalTime, double arrivalSpeed, double leaveSpeed, double vehicleLength, double impatience, double decel, SUMOTime waitingTime, double posLat=0, std::vector< const SUMOVehicle *> *collectFoes=0, bool ignoreRed=false, const SUMOVehicle *ego=0) const
Returns the information whether the link may be passed.
std::vector< MSLink * > mySublaneFoeLinks2
const MSTrafficLightLogic * getTLLogic() const
Returns the TLS index.
static bool unsafeMergeSpeeds(double leaderSpeed, double followerSpeed, double leaderDecel, double followerDecel)
return whether the given vehicles may NOT merge safely
const std::vector< const MSLane * > & getFoeLanes() const
static const SUMOTime myLookaheadTimeZipper
static bool couldBrakeForLeader(double followDist, double leaderDist, const MSVehicle *follow, const MSVehicle *leader)
whether fllower could stay behind leader (possibly by braking)
double myLength
The length of the link.
void writeApproaching(OutputDevice &od, const std::string fromLaneID) const
write information about all approaching vehicles to the given output device
double myFoeVisibilityDistance
distance from which an approaching vehicle is able to see all relevant foes and may accelerate if the...
std::set< MSLink * > myBlockedFoeLinks
bool isConflictEntryLink() const
return whether this link enters the conflict area (not a continuation link)
void checkWalkingAreaFoe(const MSVehicle *ego, const MSLane *foeLane, std::vector< const MSPerson *> *collectBlockers, LinkLeaders &result) const
check for persons on walkingarea in the path of ego vehicle
bool havePriority() const
Returns whether this link is a major link.
LinkLeader(MSVehicle *_veh, double _gap, double _distToCrossing, bool _fromLeft=true)
LinkState
The right-of-way state of a link between two lanes used when constructing a NBTrafficLightLogic, in MSLink and GNEInternalLane.
const MSLane * getInternalLaneBefore() const
return myInternalLaneBefore (always 0 when compiled without internal lanes)
double getLengthsBeforeCrossing(const MSLane *foeLane) const
Returns the sum of the lengths along internal lanes following this link to the crossing with the give...
std::vector< LinkLeader > LinkLeaders
std::pair< MSVehicle *, double > vehAndGap
bool isEntryLink() const
return whether the toLane of this link is an internal lane and fromLane is a normal lane ...
void initParallelLinks()
initialize parallel links (to be called after all links are loaded)
const std::map< const SUMOVehicle *, const ApproachingVehicleInformation, ComparatorNumericalIdLess > & getApproaching() const
return all approaching vehicles
double getLength() const
Returns the length of this link.
const MSLane * getWalkingAreaFoeExit()
bool isBlockingAnyone() const
bool isExitLinkAfterInternalJunction() const
return whether the fromLane of this link is an internal lane and its incoming lane is also an interna...
const std::vector< std::pair< double, double > > & getLengthsBehindCrossing() const
MSLink(MSLane *predLane, MSLane *succLane, MSLane *via, LinkDirection dir, LinkState state, double length, double foeVisibilityDistance, bool keepClear, MSTrafficLightLogic *logic, int tlLinkIdx)
Constructor for simulation which uses internal lanes.
static bool maybeOccupied(MSLane *lane)
returns whether the given lane may still be occupied by a vehicle currently on it ...
const std::vector< MSLink * > & getFoeLinks() const
double getGreenFraction() const
Returns the average proportion of green time to cycle time.
const MSLane * myWalkingAreaFoe
walkingArea that must be checked when entering the intersection
const MSLane * getWalkingAreaFoe()
get walkingarea as foes
const MSTrafficLightLogic * myLogic
the controlling logic or 0
The link has yellow light, may pass.
MSLane * myLaneBefore
The lane approaching this link.
The link has red light (must brake)
MSJunction * getJunction() const
MSJunction * myJunction
the junction to which this link belongs
MSLane * getViaLaneOrLane() const
return the via lane if it exists and the lane otherwise
LinkLeaders getLeaderInfo(const MSVehicle *ego, double dist, std::vector< const MSPerson *> *collectBlockers=0, bool isShadowLink=false) const
Returns all potential link leaders (vehicles on foeLanes) Valid during the planMove() phase...
int getIndex() const
Returns the respond index (for visualization)
The parent class for traffic light logics.
Static storage of an output device and its base (abstract) implementation.
MSLane *const myInternalLane
The following junction-internal lane if used.
void removeApproaching(const SUMOVehicle *veh)
removes the vehicle from myApproachingVehicles
The link has yellow light, has to brake anyway.
Representation of a lane in the micro simulation.
bool blockedByFoe(const SUMOVehicle *veh, const ApproachingVehicleInformation &avi, SUMOTime arrivalTime, SUMOTime leaveTime, double arrivalSpeed, double leaveSpeed, bool sameTargetLane, double impatience, double decel, SUMOTime waitingTime, const SUMOVehicle *ego) const
The link has red light (must brake) but indicates upcoming green.
bool haveRed() const
Returns whether this link is blocked by a red (or redyellow) traffic light.
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.
std::vector< const MSLane * > myFoeLanes
bool hasApproachingFoe(SUMOTime arrivalTime, SUMOTime leaveTime, double speed, double decel) const
Returns the information whether a vehicle is approaching on one of the link's foe streams...
void addWalkingAreaFoe(const MSLane *lane)
add walkingarea as foe (when entering the junction)