46 #ifdef CHECK_MEMORY_LEAKS
48 #endif // CHECK_MEMORY_LEAKS
59 const std::vector<NBNode*>& junctions,
const std::string& programID,
SUMOTime offset)
60 :
Named(id), myControlledNodes(junctions), mySubID(programID), myOffset(offset) {
73 for (std::vector<NBNode*>::const_iterator i = junctions.begin(); i != junctions.end(); i++) {
74 (*i)->addTrafficLight(
this);
81 :
Named(id), mySubID(programID), myOffset(offset) {
88 :
Named(id), mySubID(programID), myOffset(offset) {}
100 for (std::vector<NBNode*>::iterator it = nodes.begin(); it != nodes.end(); it++) {
101 (*it)->removeTrafficLight(
this);
103 WRITE_WARNING(
"The traffic light '" +
getID() +
"' does not control any links; it will not be build.");
110 if (oc.
isSet(
"tls.yellow.time")) {
111 brakingTime = oc.
getInt(
"tls.yellow.time");
126 return (
unsigned int)(vmax / minDecel);
144 const EdgeVector& incoming = (*i)->getIncomingEdges();
145 copy(incoming.begin(), incoming.end(), back_inserter(
myIncomingEdges));
146 const EdgeVector& outgoing = (*i)->getOutgoingEdges();
147 copy(outgoing.begin(), outgoing.end(), back_inserter(myOutgoing));
155 EdgeVector::iterator k = find(myOutgoing.begin(), myOutgoing.end(), edge);
156 if (k != myOutgoing.end()) {
159 (*j)->setIsInnerEdge();
176 std::vector<NBNode*>::const_iterator i =
187 std::vector<NBNode*>::const_iterator i =
192 if (!node->hasOutgoing(to)) {
201 const NBEdge*
const possProhibitedTo,
202 const NBEdge*
const possProhibitorFrom,
203 const NBEdge*
const possProhibitorTo,
204 bool regardNonSignalisedLowerPriority)
const {
205 return forbids(possProhibitorFrom, possProhibitorTo,
206 possProhibitedFrom, possProhibitedTo,
207 regardNonSignalisedLowerPriority);
214 bool regardNonSignalisedLowerPriority)
const {
217 regardNonSignalisedLowerPriority);
223 const NBEdge*
const possProhibitorTo,
224 const NBEdge*
const possProhibitedFrom,
225 const NBEdge*
const possProhibitedTo,
226 bool regardNonSignalisedLowerPriority)
const {
227 if (possProhibitorFrom == 0 || possProhibitorTo == 0 || possProhibitedFrom == 0 || possProhibitedTo == 0) {
231 std::vector<NBNode*>::const_iterator incoming =
233 std::vector<NBNode*>::const_iterator outgoing =
236 NBNode* incnode = *incoming;
237 NBNode* outnode = *outgoing;
238 EdgeVector::const_iterator i;
239 if (incnode != outnode) {
244 for (i = ev1.begin(); i != ev1.end(); ++i) {
245 std::vector<NBNode*>::const_iterator outgoing2 =
250 NBNode* outnode2 = *outgoing2;
251 if (incnode != outnode2) {
254 bool ret1 = incnode->
foes(possProhibitorTo, *i,
255 possProhibitedFrom, possProhibitedTo);
256 bool ret2 = incnode->forbids(possProhibitorFrom, possProhibitorTo,
257 possProhibitedTo, *i,
258 regardNonSignalisedLowerPriority);
259 bool ret = ret1 || ret2;
268 for (i = ev2.begin(); i != ev2.end(); ++i) {
269 std::vector<NBNode*>::const_iterator incoming2 =
274 NBNode* incnode2 = *incoming2;
275 if (incnode2 != outnode) {
278 bool ret1 = incnode2->
foes(possProhibitorTo, *i,
279 possProhibitedFrom, possProhibitedTo);
280 bool ret2 = incnode2->
forbids(possProhibitorTo, *i,
281 possProhibitedFrom, possProhibitedTo,
282 regardNonSignalisedLowerPriority);
283 bool ret = ret1 || ret2;
292 return incnode->forbids(possProhibitorFrom, possProhibitorTo,
293 possProhibitedFrom, possProhibitedTo,
294 regardNonSignalisedLowerPriority);
300 const NBEdge*
const from2,
const NBEdge*
const to2)
const {
301 if (to1 == 0 || to2 == 0) {
305 std::vector<NBNode*>::const_iterator incoming =
308 std::vector<NBNode*>::const_iterator outgoing =
312 NBNode* incnode = *incoming;
313 NBNode* outnode = *outgoing;
314 if (incnode != outnode) {
317 return incnode->
foes(from1, to1, from2, to2);