77 for (
const auto& lv : signal->
getLinks()) {
78 for (
const MSLink* link : lv) {
79 MSLane* lane = link->getViaLaneOrLane();
105 item.second->saveState(out);
116 if (lane ==
nullptr) {
117 throw ProcessError(
"Unknown lane '" + laneID +
"' in loaded state");
120 WRITE_WARNINGF(
"Unknown tracker lane '%' in loaded state", laneID);
131 item.second->clearState();
152 vehID =
" (" + vehID +
")";
154 std::vector<std::string> passedIDs;
155 for (
const std::string& passedTripID :
myTrackers.front()->myPassed) {
156 if (passedTripID ==
"") {
159 const std::string passedID =
getVehID(passedTripID);
160 if (passedID !=
"") {
161 passedIDs.push_back(passedID);
164 std::string passedIDs2 =
"";
165 if (passedIDs.size() > 0) {
166 passedIDs2 =
" (" +
toString(passedIDs) +
")";
168 return (
"predecessor " +
myTripId + vehID +
" at signal " +
myTrackers.front()->getLane()->getEdge().getFromJunction()->getID()
184 myLastIndex = (myLastIndex + 1) % myPassed.size();
187 if (myLane->getID() == DEBUG_LANE) {
196 while (limit > (
int)myPassed.size()) {
197 myPassed.insert(myPassed.begin() + (myLastIndex + 1),
"");
200 if (myLane->getID() == DEBUG_LANE) {
201 std::cout <<
" raiseLimit=" << limit <<
"\n";
208 if (myLastIndex < 0) {
213 if (myPassed[i] == tripId) {
217 i = (int)myPassed.size() - 1;
228 myPassed = std::vector<std::string>(myPassed.size());
234 const std::string state =
toString(myPassed.back() ==
""
235 ? std::vector<std::string>(myPassed.begin(), myPassed.begin() + myLastIndex + 1)
250 raiseLimit((
int)tripIDs.size());
251 for (
int i = 0; i < (int)tripIDs.size(); i++) {
252 myPassed[i] = tripIDs[i];
255 if (myLane->getID() == DEBUG_LANE) {
256 std::cout <<
" loadState limit=" << tripIDs.size() <<
" index=" << index <<
"\n";
257 for (
int i = 0; i < (int)myPassed.size(); i++) {
258 std::cout <<
" i=" << i <<
" passed=" << myPassed[i] <<
"\n";
#define WRITE_WARNINGF(...)
@ SUMO_TAG_RAILSIGNAL_CONSTRAINT_TRACKER
Saved state for constraint tracker.
@ SUMO_ATTR_STATE
The state of a link.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Representation of a lane in the micro simulation.
static bool dictionary(const std::string &id, MSLane *lane)
Static (sic!) container methods {.
Something on a lane to be noticed about vehicle movement.
Notification
Definition of a vehicle state.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
bool hasPassed(const std::string &tripId, int limit) const
void raiseLimit(int limit)
bool notifyEnter(SUMOTrafficObject &veh, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
tracks vehicles that passed this link (entered the next lane)
void loadState(int index, const std::vector< std::string > &tripIDs)
loads the current passed states into the given stream
PassedTracker(MSLane *lane)
void clearState()
Clear all passed states before quick-loading state.
void saveState(OutputDevice &out)
Saves the current passed states into the given stream.
bool cleared() const
whether the constraint has been met
static void loadState(const SUMOSAXAttributes &attrs)
loads the constraint state from the given attrs
static void saveState(OutputDevice &out)
Saves the current constraint states into the given stream.
const std::string myTripId
id of the predecessor that must already have passed
std::string getDescription() const
static void clearState()
Clear all constraint states before quick-loading state.
static std::map< const MSLane *, PassedTracker * > myTrackerLookup
static void cleanup()
clean up state
std::vector< PassedTracker * > myTrackers
the tracker object for this constraint
const int myLimit
the number of passed vehicles within which tripId must have occured
MSRailSignalConstraint_Predecessor(const MSRailSignal *signal, const std::string &tripId, int limit)
Constructor.
static void saveState(OutputDevice &out)
Saves the current constraint states into the given stream.
static std::string getVehID(const std::string &tripID)
static void clearState()
Clear all constraint states before quick-loading state.
static void cleanup()
clean up state
const LinkVectorVector & getLinks() const
Returns the list of lists of all affected links.
The class responsible for building and deletion of vehicles.
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.
const std::string & getID() const
Returns the id.
Static storage of an output device and its base (abstract) implementation.
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
const std::string getParameter(const std::string &key, const std::string defaultValue="") const
Returns the value for a given key.
Encapsulated SAX-Attributes.
const std::vector< std::string > getStringVector(int attr) const
Tries to read given attribute assuming it is a string vector.
T get(int attr, const char *objectid, bool &ok, bool report=true) const
Tries to read given attribute assuming it is an int.
virtual std::string getString(int id) const =0
Returns the string-value of the named (by its enum-value) attribute.
Representation of a vehicle, person, or container.
virtual const SUMOVehicleParameter & getParameter() const =0
Returns the vehicle's parameter (including departure definition)
Representation of a vehicle.