47 #ifdef CHECK_MEMORY_LEAKS
49 #endif // CHECK_MEMORY_LEAKS
60 const std::vector<NBNode*> &junctions,
61 const std::string& programID)
62 :
Named(id), myControlledNodes(junctions), mySubID(programID) {
75 for (std::vector<NBNode*>::const_iterator i = junctions.begin(); i != junctions.end(); i++) {
76 (*i)->addTrafficLight(
this);
83 const std::string& programID)
84 :
Named(id), mySubID(programID) {
91 :
Named(id), mySubID(programID) {}
103 for (std::vector<NBNode*>::iterator it = nodes.begin(); it != nodes.end(); it++) {
104 (*it)->removeTrafficLight(
this);
106 WRITE_WARNING(
"The traffic light '" +
getID() +
"' does not control any links; it will not be build.");
113 if (oc.
isSet(
"tls.yellow.time")) {
114 brakingTime = oc.
getInt(
"tls.yellow.time");
129 return (
unsigned int)(vmax / minDecel);
147 const EdgeVector& incoming = (*i)->getIncomingEdges();
148 copy(incoming.begin(), incoming.end(), back_inserter(
myIncomingEdges));
149 const EdgeVector& outgoing = (*i)->getOutgoingEdges();
150 copy(outgoing.begin(), outgoing.end(), back_inserter(myOutgoing));
158 EdgeVector::iterator k = find(myOutgoing.begin(), myOutgoing.end(), edge);
159 if (k != myOutgoing.end()) {
162 (*j)->setIsInnerEdge();
179 std::vector<NBNode*>::const_iterator i =
190 std::vector<NBNode*>::const_iterator i =
195 if (!node->hasOutgoing(to)) {
204 const NBEdge*
const possProhibitedTo,
205 const NBEdge*
const possProhibitorFrom,
206 const NBEdge*
const possProhibitorTo,
207 bool regardNonSignalisedLowerPriority)
const {
208 return forbids(possProhibitorFrom, possProhibitorTo,
209 possProhibitedFrom, possProhibitedTo,
210 regardNonSignalisedLowerPriority);
217 bool regardNonSignalisedLowerPriority)
const {
220 regardNonSignalisedLowerPriority);
226 const NBEdge*
const possProhibitorTo,
227 const NBEdge*
const possProhibitedFrom,
228 const NBEdge*
const possProhibitedTo,
229 bool regardNonSignalisedLowerPriority)
const {
230 if (possProhibitorFrom == 0 || possProhibitorTo == 0 || possProhibitedFrom == 0 || possProhibitedTo == 0) {
234 std::vector<NBNode*>::const_iterator incoming =
236 std::vector<NBNode*>::const_iterator outgoing =
239 NBNode* incnode = *incoming;
240 NBNode* outnode = *outgoing;
241 EdgeVector::const_iterator i;
242 if (incnode != outnode) {
247 for (i = ev1.begin(); i != ev1.end(); ++i) {
248 std::vector<NBNode*>::const_iterator outgoing2 =
253 NBNode* outnode2 = *outgoing2;
254 if (incnode != outnode2) {
257 bool ret1 = incnode->
foes(possProhibitorTo, *i,
258 possProhibitedFrom, possProhibitedTo);
259 bool ret2 = incnode->forbids(possProhibitorFrom, possProhibitorTo,
260 possProhibitedTo, *i,
261 regardNonSignalisedLowerPriority);
262 bool ret = ret1 || ret2;
271 for (i = ev2.begin(); i != ev2.end(); ++i) {
272 std::vector<NBNode*>::const_iterator incoming2 =
277 NBNode* incnode2 = *incoming2;
278 if (incnode2 != outnode) {
281 bool ret1 = incnode2->
foes(possProhibitorTo, *i,
282 possProhibitedFrom, possProhibitedTo);
283 bool ret2 = incnode2->
forbids(possProhibitorTo, *i,
284 possProhibitedFrom, possProhibitedTo,
285 regardNonSignalisedLowerPriority);
286 bool ret = ret1 || ret2;
295 return incnode->forbids(possProhibitorFrom, possProhibitorTo,
296 possProhibitedFrom, possProhibitedTo,
297 regardNonSignalisedLowerPriority);
303 const NBEdge*
const from2,
const NBEdge*
const to2)
const {
304 if (to1 == 0 || to2 == 0) {
308 std::vector<NBNode*>::const_iterator incoming =
311 std::vector<NBNode*>::const_iterator outgoing =
315 NBNode* incnode = *incoming;
316 NBNode* outnode = *outgoing;
317 if (incnode != outnode) {
320 return incnode->
foes(from1, to1, from2, to2);