92 NBConnection conn(from, fromLane, to, toLane, linkIndex);
137 (*it).replaceFrom(removed, removedLane, by, byLane);
138 (*it).replaceTo(removed, removedLane, by, byLane);
173 if (it->getFrom() == conn.
getFrom() &&
174 it->getTo() == conn.
getTo() &&
185 const int removed = it->getTLIndex();
202 const std::vector<NBTrafficLightLogic::PhaseDefinition> phases =
myTLLogic->
getPhases();
204 for (std::vector<NBTrafficLightLogic::PhaseDefinition>::const_iterator it = phases.begin(); it != phases.end(); it++) {
205 std::string newState = it->state;
206 newState.erase(newState.begin() + removed);
207 newLogic->
addStep(it->duration, newState);
238 const EdgeVector& incoming = (*i)->getIncomingEdges();
239 copy(incoming.begin(), incoming.end(), back_inserter(
myIncomingEdges));
240 const EdgeVector& outgoing = (*i)->getOutgoingEdges();
241 copy(outgoing.begin(), outgoing.end(), back_inserter(myOutgoing));
248 EdgeVector::iterator k = find(myOutgoing.begin(), myOutgoing.end(), edge);
249 if (k != myOutgoing.end()) {
251 bool controlled =
false;
253 if ((*it).getFrom() == edge) {
262 (*j)->setIsInnerEdge();
292 (*it).shiftLaneIndex(edge, offset);
308 int oldCrossings = 0;
310 std::vector<NBNode::Crossing> crossings;
312 const std::vector<NBNode::Crossing>& c = (*i)->getCrossings();
314 (*i)->setCrossingTLIndices(
getID(), noLinksAll);
315 copy(c.begin(), c.end(), std::back_inserter(crossings));
316 noLinksAll += (int)c.size();
317 oldCrossings += (*i)->numCrossingsFromSumoNet();
319 const int newCrossings = (int)crossings.size() - oldCrossings;
320 if (newCrossings > 0) {
321 const std::vector<NBTrafficLightLogic::PhaseDefinition> phases =
myTLLogic->
getPhases();
322 if (phases.size() > 0) {
323 if ((
int)phases.front().state.size() == noLinksAll - newCrossings) {
329 std::vector<int> fromLanes(size, 0);
331 const std::string crossingDefaultState(newCrossings,
'r');
334 const std::vector<NBTrafficLightLogic::PhaseDefinition> phases =
myTLLogic->
getPhases();
338 for (std::vector<NBTrafficLightLogic::PhaseDefinition>::const_iterator it = phases.begin(); it != phases.end(); it++) {
339 if ((*it).state.find_first_of(
"yY") != std::string::npos) {
340 brakingTime =
MAX2(brakingTime, it->duration);
348 }
else if ((
int)phases.front().state.size() != noLinksAll) {
358 assert(fromEdges.size() > 0);
359 assert(fromEdges.size() == toEdges.size());
360 const int size = (int)fromEdges.size();
367 "' with " +
toString(size) +
" links.");
383 const std::vector<NBTrafficLightLogic::PhaseDefinition> phases =
myTLLogic->
getPhases();
384 for (std::vector<NBTrafficLightLogic::PhaseDefinition>::const_iterator it = phases.begin(); it != phases.end(); it++) {
385 const std::string state = (*it).state;
397 && (state[i2] ==
'G' || state[i2] ==
'g')
403 if (forbidden || rightTurnConflict) {
void removeConnection(const NBConnection &conn, bool reconstruct=true)
removes the given connection from the traffic light if recontruct=true, reconstructs the logic and in...
bool setControllingTLInformation(const NBConnection &c, const std::string &tlID)
Returns if the link could be set as to be controlled.
TrafficLightType myType
The algorithm type for the traffic light.
SUMOTime getOffset() const
Returns the offset of first switch.
virtual void addNode(NBNode *node)
Adds a node to the traffic light logic.
NBLoadedSUMOTLDef(const std::string &id, const std::string &programID, SUMOTime offset, TrafficLightType type)
Constructor.
void collectEdges()
Build the list of participating edges.
void collectAllLinks()
helper method for use in NBOwnTLDef and NBLoadedSUMOTLDef
void setOffset(SUMOTime offset)
Sets the offset of this tls.
int getNumLinks()
Returns the number of participating links.
void closeBuilding()
closes the building process
RightOnRedConflicts myRightOnRedConflicts
A SUMO-compliant built logic for a traffic light.
EdgeVector myIncomingEdges
The list of incoming edges.
The representation of a single edge during network building.
TrafficLightType getType() const
get the algorithm type (static etc..)
class for identifying connections
const std::vector< PhaseDefinition > & getPhases() const
Returns the phases.
const NBConnectionVector & getControlledLinks() const
returns the controlled links (depends on previous call to collectLinks)
The base class for traffic light logic definitions.
void setOffset(SUMOTime offset)
Sets the offset of this tls.
NBEdge * getFrom() const
returns the from-edge (start of the connection)
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
const std::string & getID() const
Returns the id.
SUMOTime myOffset
The offset in the program.
#define UNUSED_PARAMETER(x)
#define WRITE_WARNING(msg)
void replaceRemoved(NBEdge *removed, int removedLane, NBEdge *by, int byLane)
Replaces a removed edge/lane.
static OptionsCont & getOptions()
Retrieves the options.
static bool rightTurnConflict(const NBEdge *from, const NBEdge *to, int fromLane, const NBEdge *prohibitorFrom, const NBEdge *prohibitorTo, int prohibitorFromLane, bool lefthand=false)
return whether the given laneToLane connection is a right turn which must yield to a bicycle crossing...
void setTLIndex(int tlIndex)
SUMOTime getOffset()
Returns the offset.
void setType(TrafficLightType type)
set the algorithm type (static etc..)
void initNeedsContRelation() const
virtual void collectEdges()
Build the list of participating edges.
static const int InvalidTlIndex
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
std::set< std::string > myControlledInnerEdges
Set of inner edges that shall be controlled, though.
void patchIfCrossingsAdded()
repair the plan if controlled nodes received pedestrian crossings
std::set< NBNode * > myOriginalNodes
The original nodes for which the loaded logic is valid.
bool rightOnRedConflict(int index, int foeIndex) const
whether the given index must yield to the foeIndex while turing right on a red light ...
static std::string addPedestrianPhases(NBTrafficLightLogic *logic, SUMOTime greenTime, std::string state, const std::vector< NBNode::Crossing > &crossings, const EdgeVector &fromEdges, const EdgeVector &toEdges)
add 1 or 2 phases depending on the presence of pedestrian crossings
const std::string & getProgramID() const
Returns the ProgramID.
void remapRemoved(NBEdge *removed, const EdgeVector &incoming, const EdgeVector &outgoing)
Replaces occurences of the removed edge in incoming/outgoing edges of all definitions.
void setTLControllingInformation() const
Informs edges about being controlled by a tls.
int getToLane() const
returns the to-lane
NBEdge * getTo() const
returns the to-edge (end of the connection)
std::set< NBEdge * > myShifted
set of edges with shifted lane indices (to avoid shifting twice)
bool myRightOnRedConflictsReady
static void addPedestrianScramble(NBTrafficLightLogic *logic, int noLinksAll, SUMOTime greenTime, SUMOTime yellowTime, const std::vector< NBNode::Crossing > &crossings, const EdgeVector &fromEdges, const EdgeVector &toEdges)
add an additional pedestrian phase if there are crossings that did not get green yet ...
bool forbids(const NBEdge *const possProhibitorFrom, const NBEdge *const possProhibitorTo, const NBEdge *const possProhibitedFrom, const NBEdge *const possProhibitedTo, bool regardNonSignalisedLowerPriority, bool sameNodeOnly=false) const
Returns the information whether "prohibited" flow must let "prohibitor" flow pass.
void addPhase(SUMOTime duration, const std::string &state)
Adds a phase to the logic the new phase is inserted at the end of the list of already added phases...
bool myNeedsContRelationReady
TrafficLightType getType() const
get the algorithm type (static etc..)
std::vector< NBEdge * > EdgeVector
container for (sorted) edges
const std::vector< NBNode * > & getNodes() const
Returns the list of controlled nodes.
void collectLinks()
Collects the links participating in this traffic light (only if not previously loaded) ...
NeedsContRelation myNeedsContRelation
bool isTurningDirectionAt(const NBEdge *const edge) const
Returns whether the given edge is the opposite direction to this edge.
int getFromLane() const
returns the from-lane
NBTrafficLightLogic * myCompute(int brakingTimeSeconds)
Computes the traffic light logic finally in dependence to the type.
~NBLoadedSUMOTLDef()
Destructor.
data structure for caching needsCont information
void setType(TrafficLightType type)
Sets the algorithm type of this tls.
int getTLIndex() const
returns the index within the controlling tls or InvalidTLIndex if this link is unontrolled ...
std::vector< NBNode * > myControlledNodes
The container with participating nodes.
NBNode * getFromNode() const
Returns the origin node of the edge.
void addStep(SUMOTime duration, const std::string &state, int index=-1)
Adds a phase to the logic.
bool foes(const NBEdge *const from1, const NBEdge *const to1, const NBEdge *const from2, const NBEdge *const to2) const
Returns the information whether the given flows cross.
NBConnectionVector myControlledLinks
The list of controlled links.
NBNode * getToNode() const
Returns the destination node of the edge.
EdgeVector myEdgesWithin
The list of edges within the area controlled by the tls.
void shiftTLConnectionLaneIndex(NBEdge *edge, int offset)
patches signal plans by modifying lane indices
NBTrafficLightLogic * myTLLogic
phases are added directly to myTLLogic which is then returned in myCompute()
void addConnection(NBEdge *from, NBEdge *to, int fromLane, int toLane, int linkIndex)
Adds a connection and immediately informs the edges.
void collectEdgeVectors(EdgeVector &fromEdges, EdgeVector &toEdges, std::vector< int > &fromLanes) const
Collects the edges for each tlIndex.