/*public*/ vector<Edge*>* DirectedEdge::toEdges(vector<DirectedEdge*>& dirEdges) { vector<Edge*> *edges=new vector<Edge*>(); toEdges(dirEdges, *edges); return edges; }
void NBLoadedSUMOTLDef::patchIfCrossingsAdded() { // XXX what to do if crossings are removed during network building? const unsigned int size = myTLLogic->getNumLinks(); unsigned int noLinksAll = 0; for (NBConnectionVector::const_iterator it = myControlledLinks.begin(); it != myControlledLinks.end(); it++) { const NBConnection& c = *it; if (c.getTLIndex() != NBConnection::InvalidTlIndex) { noLinksAll = MAX2(noLinksAll, (unsigned int)c.getTLIndex() + 1); } } int oldCrossings = 0; // collect crossings std::vector<NBNode::Crossing> crossings; for (std::vector<NBNode*>::iterator i = myControlledNodes.begin(); i != myControlledNodes.end(); i++) { const std::vector<NBNode::Crossing>& c = (*i)->getCrossings(); // set tl indices for crossings (*i)->setCrossingTLIndices(noLinksAll); copy(c.begin(), c.end(), std::back_inserter(crossings)); noLinksAll += (unsigned int)c.size(); oldCrossings += (*i)->numCrossingsFromSumoNet(); } const int newCrossings = (int)crossings.size() - oldCrossings; if (newCrossings > 0) { const std::vector<NBTrafficLightLogic::PhaseDefinition> phases = myTLLogic->getPhases(); if (phases.size() > 0) { if (phases.front().state.size() == noLinksAll - newCrossings) { // patch states for the newly added crossings // collect edges EdgeVector fromEdges(size, 0); EdgeVector toEdges(size, 0); std::vector<int> fromLanes(size, 0); collectEdgeVectors(fromEdges, toEdges, fromLanes); const std::string crossingDefaultState(newCrossings, 'r'); // rebuild the logic (see NBOwnTLDef.cpp::myCompute) const std::vector<NBTrafficLightLogic::PhaseDefinition> phases = myTLLogic->getPhases(); NBTrafficLightLogic* newLogic = new NBTrafficLightLogic(getID(), getProgramID(), 0, myOffset, myType); SUMOTime brakingTime = TIME2STEPS(3); //std::cout << "patchIfCrossingsAdded for " << getID() << " numPhases=" << phases.size() << "\n"; for (std::vector<NBTrafficLightLogic::PhaseDefinition>::const_iterator it = phases.begin(); it != phases.end(); it++) { if ((*it).state.find_first_of("yY") != std::string::npos) { brakingTime = MAX2(brakingTime, it->duration); } NBOwnTLDef::addPedestrianPhases(newLogic, it->duration, it->state + crossingDefaultState, crossings, fromEdges, toEdges); } NBOwnTLDef::addPedestrianScramble(newLogic, noLinksAll, TIME2STEPS(10), brakingTime, crossings, fromEdges, toEdges); delete myTLLogic; myTLLogic = newLogic; } else if (phases.front().state.size() != noLinksAll) { WRITE_WARNING("Could not patch tlLogic " + getID() + "for new crossings"); } } } }
void NBLoadedSUMOTLDef::patchIfCrossingsAdded() { // XXX what to do if crossings are removed during network building? const unsigned int size = myTLLogic->getNumLinks(); unsigned int noLinksAll = size; // collect crossings std::vector<NBNode::Crossing> crossings; for (std::vector<NBNode*>::iterator i = myControlledNodes.begin(); i != myControlledNodes.end(); i++) { const std::vector<NBNode::Crossing>& c = (*i)->getCrossings(); // set tl indices for crossings (*i)->setCrossingTLIndices(noLinksAll); copy(c.begin(), c.end(), std::back_inserter(crossings)); noLinksAll += (unsigned int)c.size(); } if (crossings.size() > 0) { // collect edges assert(size > 0); EdgeVector fromEdges(size, 0); EdgeVector toEdges(size, 0); for (NBConnectionVector::const_iterator it = myControlledLinks.begin(); it != myControlledLinks.end(); it++) { const NBConnection& c = *it; if (c.getTLIndex() != NBConnection::InvalidTlIndex) { assert(c.getTLIndex() < (int)size); fromEdges[c.getTLIndex()] = c.getFrom(); toEdges[c.getTLIndex()] = c.getTo(); } } /// XXX handle the case where some crossings are already loaded const std::string crossingDefaultState(crossings.size(), 'r'); // rebuild the logic (see NBOwnTLDef.cpp::myCompute) const std::vector<NBTrafficLightLogic::PhaseDefinition> phases = myTLLogic->getPhases(); NBTrafficLightLogic* newLogic = new NBTrafficLightLogic(getID(), getProgramID(), 0, myOffset, myType); //std::cout << "patchIfCrossingsAdded for " << getID() << " numPhases=" << phases.size() << "\n"; for (std::vector<NBTrafficLightLogic::PhaseDefinition>::const_iterator it = phases.begin(); it != phases.end(); it++) { NBOwnTLDef::addPedestrianPhases(newLogic, it->duration, it->state + crossingDefaultState, crossings, fromEdges, toEdges); } delete myTLLogic; myTLLogic = newLogic; } }