59std::vector<std::string>
60TrafficLight::getIDList() {
66TrafficLight::getIDCount() {
67 return (
int)getIDList().size();
77std::vector<TraCILogic>
79 std::vector<TraCILogic> result;
82 TraCILogic l(logic->getProgramID(), (
int)logic->getLogicType(), logic->getCurrentPhaseIndex());
83 l.subParameter = logic->getParametersMap();
85 l.phases.emplace_back(
new TraCIPhase(
STEPS2TIME(phase->duration), phase->getState(),
87 phase->getNextPhases(), phase->getName()));
89 result.emplace_back(l);
95std::vector<std::string>
97 std::set<std::string> junctionIDs;
100 for (
const MSLink* l : llinks) {
101 junctionIDs.insert(l->getJunction()->getID());
104 return std::vector<std::string>(junctionIDs.begin(), junctionIDs.end());
108std::vector<std::string>
110 std::vector<std::string> laneIDs;
113 for (
const MSLane* l : llanes) {
114 laneIDs.push_back(l->getID());
121std::vector<std::vector<TraCILink> >
123 std::vector<std::vector<TraCILink> > result;
126 for (
int i = 0; i < (int)lanes.size(); ++i) {
127 std::vector<TraCILink> subList;
131 for (
int j = 0; j < (int)llanes.size(); ++j) {
137 subList.emplace_back(TraCILink(llanes[j]->getID(), via, to));
139 result.emplace_back(subList);
183 if (index < 0 || active->getPhaseNumber() <= index) {
184 throw TraCIException(
"The phase index " +
toString(index) +
" is not in the allowed range [0,"
190 const std::string& state = active->
getPhases()[index]->getState();
191 for (
int i = 0; i < (int)state.size(); i++) {
194 if (link->getLane()->getEdge().isCrossing()) {
208 }
else if (link->getLaneBefore()->getEdge().isCrossing()) {
211 if (
static_cast<MSPerson*
>(person)->getNextEdge() == link->getLaneBefore()->
getEdge().
getID()) {
222std::vector<std::string>
224 std::vector<std::string> result;
227 if (linkIndex < 0 || linkIndex >= active->
getNumLinks()) {
228 throw TraCIException(
"The link index " +
toString(linkIndex) +
" is not in the allowed range [0,"
232 result.push_back(veh->getID());
237std::vector<std::string>
239 std::vector<std::string> result;
241 if (linkIndex < 0 || linkIndex >= active->
getNumLinks()) {
242 throw TraCIException(
"The link index " +
toString(linkIndex) +
" is not in the allowed range [0,"
246 result.push_back(veh->getID());
251std::vector<std::string>
253 std::vector<std::string> result;
255 if (linkIndex < 0 || linkIndex >= active->
getNumLinks()) {
256 throw TraCIException(
"The link index " +
toString(linkIndex) +
" is not in the allowed range [0,"
260 result.push_back(veh->getID());
265std::vector<TraCISignalConstraint>
267 std::vector<TraCISignalConstraint> result;
271 throw TraCIException(
"'" + tlsID +
"' is not a rail signal");
274 if (tripId !=
"" && tripId != item.first) {
284std::vector<TraCISignalConstraint>
288 std::vector<TraCISignalConstraint> result;
289 for (
const std::string& tlsID : getIDList()) {
297 && (foeId ==
"" || pc->
myTripId == foeId)) {
309TrafficLight::addConstraint(
const std::string& tlsID,
const std::string& tripId,
const std::string& foeSignal,
const std::string& foeId,
const int type,
const int limit) {
315 throw TraCIException(
"'" + tlsID +
"' is not a rail signal");
318 throw TraCIException(
"'" + foeSignal +
"' is not a rail signal");
325std::vector<TraCISignalConstraint>
327#ifdef DEBUG_CONSTRAINT_DEADLOCK
328 std::cout <<
"swapConstraints tlsId=" << tlsID <<
" tripId=" << tripId <<
" foeSignal=" << foeSignal <<
" foeId=" << foeId <<
"\n";
335 throw TraCIException(
"'" + tlsID +
"' is not a rail signal");
338 throw TraCIException(
"'" + foeSignal +
"' is not a rail signal");
342 if (tripId == item.first) {
364 throw TraCIException(
"Rail signal '" + tlsID +
"' does not have a constraint for tripId '" + tripId +
"' with foeSignal '" + foeSignal +
"' and foeId '" + foeId +
"'");
369std::vector<std::pair<std::string, std::string> >
371 std::vector<std::pair<std::string, std::string> > result({
374 {
"arrival",
"foeArrival"}});
377 std::vector<std::pair<std::string, std::string> > special({
378 {
"busStop",
"busStop2"},
379 {
"priorStop",
"priorStop2"},
380 {
"stopArrival",
"foeStopArrival"}});
381 result.insert(result.end(), special.begin(), special.end());
421 auto it1 = c.param.find(key1);
422 auto it2 = c.param.find(key2);
423 const std::string value1 = it1 != c.param.end() ? it1->second :
"";
424 const std::string value2 = it2 != c.param.end() ? it2->second :
"";
426 c.param[key2] = value1;
431 c.param[key1] = value2;
442 for (
const std::string& tlsCand : getIDList()) {
443 if (tlsID ==
"" || tlsCand == tlsID) {
448 if (tripId ==
"" || item.first == tripId) {
452 && (foeId ==
"" || pc->
myTripId == foeId)
473 tripId = tripId ==
"" ? curTripId : tripId;
476 std::map<const MSRailSignal*, std::set<std::string> > onRoute;
480 for (
auto it = routeIt; it < stop.edge; it++) {
483 if (it + 1 != route.end()) {
484 const MSEdge* next = *(it + 1);
486 if (link !=
nullptr && link->
getTLLogic() !=
nullptr) {
488 onRoute[s].insert(curTripId);
493 if (stop.pars.tripId !=
"") {
494 curTripId = stop.pars.tripId;
498 for (
auto it = routeIt; it < route.end(); it++) {
501 if (it + 1 != route.end()) {
502 const MSEdge* next = *(it + 1);
504 if (link !=
nullptr && link->
getTLLogic() !=
nullptr) {
506 onRoute[s].insert(curTripId);
519 std::vector<MSRailSignalConstraint*> onVeh;
520 std::vector<std::pair<std::string, MSRailSignalConstraint*> > byVeh;
522 for (
auto item : s->getConstraints()) {
526 if (item.first == tripId) {
527 if (onRoute[s].count(tripId) == 0) {
529 onVeh.push_back(cand);
531 }
else if (pc->
myTripId == tripId) {
534 byVeh.push_back(std::make_pair(item.first, cand));
541 s->removeConstraint(tripId, c);
543 for (
auto item : byVeh) {
544 s->removeConstraint(item.first, item.second);
550std::vector<TraCISignalConstraint>
552 std::vector<TraCISignalConstraint> result;
558 std::map<std::string, TraCISignalConstraint> constraintsOnTripId;
559 std::map<std::string, TraCISignalConstraint> constrainedByFoeId;
560 std::set<std::string> foeId2Cands1;
561 std::set<std::string> foeId2Cands2;
563 for (
auto item : s->getConstraints()) {
567 if (item.first == tripId) {
571 constraintsOnTripId[pc->
myTripId] = tsc;
574 foeId2Cands1.insert(futureFoe2Id);
576 constraintsOnTripId[futureFoe2Id] = tsc;
581 constrainedByFoeId[item.first] = tsc;
582 foeId2Cands2.insert(item.first);
584 foeId2Cands2.insert(futureTripId);
586 constrainedByFoeId[futureTripId] = tsc;
593#ifdef DEBUG_CONSTRAINT_DEADLOCK
594 std::cout <<
"findConstraintsDeadLocks foeId=" << foeId <<
" tripId=" << tripId <<
" foeSignal=" << foeSignal <<
" tlsID=" << tlsID <<
"\n";
595 std::cout <<
" foeId2Cands1=" <<
toString(foeId2Cands1) <<
"\n";
596 std::cout <<
" foeId2Cands2=" <<
toString(foeId2Cands2) <<
"\n";
598 if (foeId2Cands1.size() > 0) {
606 if (foe !=
nullptr) {
609 for (
const std::string& foeId2 : foeId2Cands1) {
612 if (foe2 !=
nullptr) {
614 const TraCISignalConstraint& c = constraintsOnTripId[foeId2];
615 bool foeAhead =
false;
617 const MSEdge* e = foe2Route[i];
626#ifdef DEBUG_CONSTRAINT_DEADLOCK
627 std::cout <<
"findConstraintsDeadLocks foeId=" << foeId <<
" tripId=" << tripId <<
" foeSignal=" << foeSignal <<
"\n";
631 <<
" " << constraintsOnTripId[foeId2].getString() <<
"\n";
642 TraCISignalConstraint nc;
645 nc.signalId = c.foeSignal;
646 nc.foeSignal = c.signalId;
653 result.push_back(nc);
655 std::vector<TraCISignalConstraint> result2 =
swapConstraints(c.signalId, c.tripId, c.foeSignal, c.foeId);
656 result.insert(result.end(), result2.begin(), result2.end());
660 result.insert(result.end(), result4.begin(), result4.end());
668 if (foeId2Cands2.size() > 0) {
675 std::set<const MSEdge*> egoToSignal;
679 const MSEdge* e = egoRoute[i];
680 egoToSignal.insert(e);
686 for (
const std::string& foeId2 : foeId2Cands2) {
690 if (foe2 !=
nullptr) {
691 if (egoToSignal.count(foe2->
getEdge()) != 0
693 const TraCISignalConstraint& c = constrainedByFoeId[foeId2];
694#ifdef DEBUG_CONSTRAINT_DEADLOCK
695 std::cout <<
"findConstraintsDeadLocks foeId=" << foeId <<
" tripId=" << tripId <<
" foeSignal=" << foeSignal <<
"\n";
697 <<
" " << c.getString() <<
"\n";
700 TraCISignalConstraint nc;
703 nc.signalId = c.foeSignal;
704 nc.foeSignal = c.signalId;
711 result.push_back(nc);
713 std::vector<TraCISignalConstraint> result2 =
swapConstraints(c.signalId, c.tripId, c.foeSignal, c.foeId);
714 result.insert(result.end(), result2.begin(), result2.end());
718 result.insert(result.end(), result4.begin(), result4.end());
723 }
else if (ego !=
nullptr) {
724 WRITE_WARNINGF(
TL(
"Cannot check for all deadlocks on swapConstraints because the route for vehicle '%' is not computed yet"), ego->
getID());
729 std::vector<std::string> foeIds2;
730 std::set_intersection(
731 foeId2Cands1.begin(), foeId2Cands1.end(),
732 foeId2Cands2.begin(), foeId2Cands2.end(),
733 std::back_inserter(foeIds2));
734#ifdef DEBUG_CONSTRAINT_DEADLOCK
735 std::cout <<
"findConstraintsDeadLocks foeId=" << foeId <<
" tripId=" << tripId <<
" foeSignal=" << foeSignal <<
"\n";
736 for (
const std::string& foeId2 : foeIds2) {
737 std::cout <<
" deadlockId=" << foeId2 <<
" " << constraintsOnTripId[foeId2].getString() <<
" " << constrainedByFoeId[foeId2].getString() <<
"\n";
740 if (foeIds2.size() > 0) {
741 TraCISignalConstraint c = constrainedByFoeId[foeIds2.front()];
744 c = constraintsOnTripId[foeIds2.front()];
746 TraCISignalConstraint nc;
749 nc.signalId = c.foeSignal;
750 nc.foeSignal = c.signalId;
757 result.push_back(nc);
759 const std::vector<TraCISignalConstraint>& result2 =
swapConstraints(c.signalId, c.tripId, c.foeSignal, c.foeId);
760 result.insert(result.end(), result2.begin(), result2.end());
761 if (foeIds2.size() > 1) {
764 result.insert(result.end(), result3.begin(), result3.end());
784std::vector<std::string>
786 std::vector<std::string> result;
791 result.push_back(tripId);
794 if (stop.pars.tripId !=
"") {
795 result.push_back(stop.pars.tripId);
804TrafficLight::getParameter(
const std::string& tlsID,
const std::string& paramName) {
807 throw TraCIException(
"'" + tlsID +
"' is not a NEMA controller");
825 if (index < 0 || active->getPhaseNumber() <= index) {
826 throw TraCIException(
"The phase index " +
toString(index) +
" is not in the allowed range [0,"
846 throw TraCIException(e.what());
863 if (logic.currentPhaseIndex >= (
int)logic.phases.size()) {
864 throw TraCIException(
"set program: parameter index must be less than parameter phase number.");
866 std::vector<MSPhaseDefinition*> phases;
867 for (
const std::shared_ptr<libsumo::TraCIPhase>& phase : logic.phases) {
872 phases.push_back(sumoPhase);
874 if (vars.
getLogic(logic.programID) ==
nullptr) {
876 int step = logic.currentPhaseIndex;
877 const std::string basePath =
"";
883 tlsID, logic.programID, 0,
884 phases, step, nextSwitch,
885 logic.subParameter, basePath);
889 tlsID, logic.programID, 0,
890 phases, step, nextSwitch,
891 logic.subParameter, basePath);
895 tlsID, logic.programID, 0,
896 phases, step, nextSwitch,
897 logic.subParameter, basePath);
902 phases, step, nextSwitch,
906 throw TraCIException(
"Unsupported traffic light type '" +
toString(logic.type) +
"'");
909 if (!vars.
addLogic(logic.programID, tlLogic,
true,
true)) {
910 throw TraCIException(
"Could not add traffic light logic '" + logic.programID +
"'");
913 throw TraCIException(e.what());
921 tlLogic->
setPhases(phases, logic.currentPhaseIndex);
929TrafficLight::setParameter(
const std::string& tlsID,
const std::string& paramName,
const std::string&
value) {
932 throw TraCIException(
"'" + tlsID +
"' is not a NEMA controller");
941 setParameter(tlsID,
"NEMA.splits",
toString(splits));
946 setParameter(tlsID,
"NEMA.maxGreens",
toString(maxGreens));
951 setParameter(tlsID,
"NEMA.cycleLength",
toString(cycleLength));
956 setParameter(tlsID,
"NEMA.offset",
toString(offset));
962 TraCISignalConstraint c;
982std::shared_ptr<VariableWrapper>
992 return wrapper->wrapStringList(objID, variable, getIDList());
994 return wrapper->wrapInt(objID, variable, getIDCount());
1004 return wrapper->wrapInt(objID, variable,
getPhase(objID));
1006 return wrapper->wrapString(objID, variable,
getPhaseName(objID));
1008 return wrapper->wrapString(objID, variable,
getProgram(objID));
1012 return wrapper->wrapDouble(objID, variable,
getNextSwitch(objID));
std::vector< const MSEdge * > ConstMSEdgeVector
#define WRITE_WARNINGF(...)
const std::string invalid_return< std::string >::value
const long long int VEHPARS_FORCE_REROUTE
@ LINKSTATE_TL_GREEN_MAJOR
The link has green light, may pass.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
#define LIBSUMO_SUBSCRIPTION_IMPLEMENTATION(CLASS, DOM)
#define LIBSUMO_GET_PARAMETER_WITH_KEY_IMPLEMENTATION(CLASS)
static double getSpentDuration(const std::string &tlsID)
static std::string getProgram(const std::string &tlsID)
static std::vector< std::pair< std::string, std::string > > getSwapParams(int constraintType)
static std::vector< std::string > getRivalVehicles(const std::string &tlsID, int linkIndex)
static void setProgramLogic(const std::string &tlsID, const libsumo::TraCILogic &logic)
static ContextSubscriptionResults myContextSubscriptionResults
static void setProgram(const std::string &tlsID, const std::string &programID)
static bool handleVariable(const std::string &objID, const int variable, VariableWrapper *wrapper, tcpip::Storage *paramData)
static int getPhase(const std::string &tlsID)
static double getPhaseDuration(const std::string &tlsID)
static void setPhaseName(const std::string &tlsID, const std::string &name)
static SUMOVehicle * getVehicleByTripId(const std::string tripOrVehID)
static void addConstraint(const std::string &tlsID, const std::string &tripId, const std::string &foeSignal, const std::string &foeId, const int type=0, const int limit=0)
static int getServedPersonCount(const std::string &tlsID, int index)
static std::shared_ptr< VariableWrapper > makeWrapper()
static libsumo::TraCISignalConstraint buildConstraint(const std::string &tlsID, const std::string &tripId, MSRailSignalConstraint *constraint)
static std::vector< std::string > getControlledJunctions(const std::string &tlsID)
static std::vector< std::vector< libsumo::TraCILink > > getControlledLinks(const std::string &tlsID)
static std::vector< libsumo::TraCISignalConstraint > getConstraintsByFoe(const std::string &foeSignal, const std::string &foeId="")
static std::vector< std::string > getControlledLanes(const std::string &tlsID)
static std::string getPhaseName(const std::string &tlsID)
static void swapParameters(MSRailSignalConstraint *c)
static SubscriptionResults mySubscriptionResults
static void setNemaMaxGreens(const std::string &tlsID, const std::vector< double > &maxGreens)
static void setPhase(const std::string &tlsID, const int index)
static std::vector< std::string > getBlockingVehicles(const std::string &tlsID, int linkIndex)
static std::vector< std::string > getFutureTripIds(const std::string vehID)
static void removeConstraints(const std::string &tlsID, const std::string &tripId, const std::string &foeSignal, const std::string &foeId)
static std::vector< libsumo::TraCISignalConstraint > getConstraints(const std::string &tlsID, const std::string &tripId="")
static std::vector< libsumo::TraCISignalConstraint > swapConstraints(const std::string &tlsID, const std::string &tripId, const std::string &foeSignal, const std::string &foeId)
static std::string getRedYellowGreenState(const std::string &tlsID)
static void setPhaseDuration(const std::string &tlsID, const double phaseDuration)
static void setNemaCycleLength(const std::string &tlsID, double cycleLength)
static void setNemaOffset(const std::string &tlsID, double offset)
static std::vector< libsumo::TraCILogic > getAllProgramLogics(const std::string &tlsID)
static void setNemaSplits(const std::string &tlsID, const std::vector< double > &splits)
LIBSUMO_ID_PARAMETER_API static LIBSUMO_SUBSCRIPTION_API void setRedYellowGreenState(const std::string &tlsID, const std::string &state)
static std::vector< std::string > getPriorityVehicles(const std::string &tlsID, int linkIndex)
static void updateConstraints(const std::string &vehID, std::string tripId="")
static double getNextSwitch(const std::string &tlsID)
static std::vector< libsumo::TraCISignalConstraint > findConstraintsDeadLocks(const std::string &foeId, const std::string &tripId, const std::string &foeSignal, const std::string &tlsID)
perform swapConstraints to resolve deadlocks and return the new constraints
An actuated (adaptive) traffic light logic.
The base class for microscopic and mesoscopic vehicles.
const SUMOVehicleParameter & getParameter() const
Returns the vehicle's parameter (including departure definition).
const MSRouteIterator & getCurrentRouteEdge() const
Returns an iterator pointing to the current edge in this vehicles route.
const std::list< MSStop > & getStops() const
const MSRoute & getRoute() const
Returns the current route.
An actuated traffic light logic based on time delay of approaching vehicles.
A road/street connecting two junctions.
const std::set< MSTransportable *, ComparatorNumericalIdLess > & getPersons() const
Returns this edge's persons set.
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
const MSJunction * getToJunction() const
SumoXMLNodeType getType() const
return the type of this Junction
Representation of a lane in the micro simulation.
MSEdge & getEdge() const
Returns the lane's edge.
const std::vector< MSLink * > & getLinkCont() const
returns the container with all links !!!
MSLane * getLane() const
Returns the connected lane.
MSLane * getViaLane() const
Returns the following inner lane.
const MSTrafficLightLogic * getTLLogic() const
Returns the TLS index.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
MSTLLogicControl & getTLSControl()
Returns the tls logics control.
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
virtual void createTLWrapper(MSTrafficLightLogic *)
creates a wrapper for the given logic (see GUINet)
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
The definition of a single phase of a tls logic.
SUMOTime maxDuration
The maximum duration of the phase.
SUMOTime minDuration
The minimum duration of the phase.
const std::string & getName() const
const std::string & getState() const
Returns the state within this phase.
SUMOTime duration
The duration of the phase.
std::vector< int > nextPhases
The index of the phase that suceeds this one (or -1).
void setName(const std::string &_name)
const MSRailSignal * myFoeSignal
store the foe signal (for TraCI access)
bool cleared() const
whether the constraint has been met
const std::string myTripId
id of the predecessor that must already have passed
const int myLimit
the number of passed vehicles within which tripId must have occurred
A base class for constraints.
virtual void setActive(bool active)=0
ConstraintType getType() const
ConstraintType getSwappedType() const
static MSRailSignalControl & getInstance()
void addConstraint(const std::string &tripId, MSRailSignalConstraint *constraint)
register constraint for signal switching
const std::map< std::string, std::vector< MSRailSignalConstraint * > > & getConstraints() const
bool removeConstraint(const std::string &tripId, MSRailSignalConstraint *constraint)
remove constraint for signal switching
const ConstMSEdgeVector & getEdges() const
A fixed traffic light logic.
void setPhases(const Phases &phases, int index)
Replaces the phases and set the phase index.
Storage for all programs of a single tls.
void switchTo(MSTLLogicControl &tlc, const std::string &programID)
void setStateInstantiatingOnline(MSTLLogicControl &tlc, const std::string &state)
std::vector< MSTrafficLightLogic * > getAllLogics() const
MSTrafficLightLogic * getLogic(const std::string &programID) const
void executeOnSwitchActions() const
bool addLogic(const std::string &programID, MSTrafficLightLogic *logic, bool netWasLoaded, bool isNewDefault=true)
Adds a logic (program). In case of an error the logic gets deleted.
MSTrafficLightLogic * getActive() const
MSTrafficLightLogic * getDefault() const
return the default program (that last used program except TRACI_PROGRAM)
A class that stores and controls tls and switching of their programs.
std::vector< std::string > getAllTLIds() const
The parent class for traffic light logics.
const LinkVectorVector & getLinks() const
Returns the list of lists of all affected links.
std::vector< LaneVector > LaneVectorVector
Definition of a list that holds lists of lanes that do have the same attribute.
virtual const MSPhaseDefinition & getCurrentPhaseDef() const =0
Returns the definition of the current phase.
virtual int getPhaseNumber() const =0
Returns the number of phases.
virtual int getCurrentPhaseIndex() const =0
Returns the current index within the program.
std::vector< MSLane * > LaneVector
Definition of the list of arrival lanes subjected to this tls.
virtual VehicleVector getPriorityVehicles(int linkIndex)
return vehicles that approach the intersection/rail signal and have priority over vehicles that wish ...
virtual void changeStepAndDuration(MSTLLogicControl &tlcontrol, SUMOTime simStep, int step, SUMOTime stepDuration)=0
Changes the current phase and her duration.
virtual VehicleVector getBlockingVehicles(int linkIndex)
return vehicles that block the intersection/rail signal for vehicles that wish to pass the given link...
virtual const MSPhaseDefinition & getPhase(int givenstep) const =0
Returns the definition of the phase from the given position within the plan.
virtual VehicleVector getRivalVehicles(int linkIndex)
return vehicles that approach the intersection/rail signal and are in conflict with vehicles that wis...
const std::string & getProgramID() const
Returns this tl-logic's id.
TrafficLightType getLogicType() const
Returns the type of the logic.
int getNumLinks() const
return the number of controlled link indices
virtual const Phases & getPhases() const =0
Returns the phases of this tls program.
const LaneVectorVector & getLaneVectors() const
Returns the list of lists of all lanes controlled by this tls.
bool setTrafficLightSignals(SUMOTime t) const
Applies the current signal states to controlled links.
const LinkVector & getLinksAt(int i) const
Returns the list of links that are controlled by the signals at the given position.
std::vector< LinkVector > LinkVectorVector
Definition of a list that holds lists of links that do have the same attribute.
std::vector< MSLink * > LinkVector
Definition of the list of links that are subjected to this tls.
virtual void init(NLDetectorBuilder &nb)
Initialises the tls with information about incoming lanes.
const MSLane * getLane() const override
Returns the current lane (may be nullptr).
const MSEdge * getEdge() const override
Returns the current edge.
The class responsible for building and deletion of vehicles.
SUMOVehicle * getVehicle(const std::string &id) const
Returns the vehicle with the given id.
std::map< std::string, SUMOVehicle * >::const_iterator constVehIt
Definition of the internal vehicles map iterator.
constVehIt loadedVehBegin() const
Returns the begin of the internal vehicle map.
constVehIt loadedVehEnd() const
Returns the end of the internal vehicle map.
A NEMA (adaptive) traffic light logic based on E2Detector.
Builds detectors for microsim.
const std::string & getID() const
Returns the id.
void unsetParameter(const std::string &key)
Removes a parameter.
virtual const std::string getParameter(const std::string &key, const std::string defaultValue="") const
Returns the value for a given key.
const Parameterised::Map & getParametersMap() const
Returns the inner key/value map.
virtual void setParameter(const std::string &key, const std::string &value)
Sets a parameter.
void updateParameters(const Parameterised::Map &mapArg)
Adds or updates all given parameters from the map.
virtual NumericalID getNumericalID() const =0
return the numerical ID which is only for internal usage
virtual const SUMOVehicleParameter & getParameter() const =0
Returns the vehicle's parameter (including departure definition).
virtual int getRoutePosition() const =0
return index of edge within route
virtual const MSEdge * getEdge() const =0
Returns the edge the object is currently at.
virtual double getPositionOnLane() const =0
Get the object's position along the lane.
Representation of a vehicle.
virtual bool hasDeparted() const =0
Returns whether this vehicle has departed.
virtual const MSRoute & getRoute() const =0
Returns the current route.
bool wasSet(long long int what) const
Returns whether the given parameter was set.
static bool startsWith(const std::string &str, const std::string prefix)
Checks whether a given string starts with the prefix.
static MSBaseVehicle * getVehicle(const std::string &id)
static MSTLLogicControl::TLSLogicVariants & getTLS(const std::string &id)
static int readTypedInt(tcpip::Storage &ret, const std::string &error="")
static std::string readTypedString(tcpip::Storage &ret, const std::string &error="")
TRACI_CONST int TRACI_ID_LIST
TRACI_CONST int TL_BLOCKING_VEHICLES
std::map< std::string, libsumo::SubscriptionResults > ContextSubscriptionResults
TRACI_CONST int TL_PRIORITY_VEHICLES
TRACI_CONST int TL_CONTROLLED_LANES
TRACI_CONST int TL_SPENT_DURATION
TRACI_CONST int TL_COMPLETE_DEFINITION_RYG
TRACI_CONST int VAR_PERSON_NUMBER
TRACI_CONST int TL_CONTROLLED_JUNCTIONS
TRACI_CONST int TL_CONTROLLED_LINKS
std::map< std::string, libsumo::TraCIResults > SubscriptionResults
{object->{variable->value}}
TRACI_CONST int VAR_PARAMETER
TRACI_CONST int TL_CONSTRAINT_BYFOE
TRACI_CONST int TL_CONSTRAINT
TRACI_CONST int TL_NEXT_SWITCH
TRACI_CONST int VAR_PARAMETER_WITH_KEY
TRACI_CONST int TL_PHASE_DURATION
TRACI_CONST int TL_CURRENT_PHASE
TRACI_CONST int TL_RED_YELLOW_GREEN_STATE
TRACI_CONST int TL_CURRENT_PROGRAM
TRACI_CONST int TL_RIVAL_VEHICLES