std::set<NBEdge*> NBTrafficLightDefinition::collectReachable(EdgeVector outer, const EdgeVector& within, bool checkControlled) { std::set<NBEdge*> reachable; while (outer.size() > 0) { NBEdge* from = outer.back(); outer.pop_back(); std::vector<NBEdge::Connection>& cons = from->getConnections(); for (std::vector<NBEdge::Connection>::iterator k = cons.begin(); k != cons.end(); k++) { NBEdge* to = (*k).toEdge; if (reachable.count(to) == 0 && (find(within.begin(), within.end(), to) != within.end()) && (!checkControlled || from->mayBeTLSControlled((*k).fromLane, to, (*k).toLane))) { reachable.insert(to); outer.push_back(to); } } } return reachable; }