55 if (s->getConstraints().size() > 0 || s->getInsertionConstraints().size() > 0) {
58 for (
auto item : s->getConstraints()) {
63 for (
auto item : s->getInsertionConstraints()) {
83 s->removeConstraints();
106 myFoeSignal(signal) {
107 for (
const auto& lv : signal->
getLinks()) {
108 for (
const MSLink* link : lv) {
109 MSLane* lane = link->getViaLaneOrLane();
135 item.second->saveState(out);
146 if (lane ==
nullptr) {
147 throw ProcessError(
"Unknown lane '" + laneID +
"' in loaded state");
150 WRITE_WARNINGF(
"Unknown tracker lane '%' in loaded state", laneID);
161 item.second->clearState();
182 vehID =
" (" + vehID +
")";
184 std::vector<std::string> passedIDs;
185 for (
const std::string& passedTripID :
myTrackers.front()->myPassed) {
186 if (passedTripID ==
"") {
189 const std::string passedID =
getVehID(passedTripID);
190 if (passedID !=
"") {
191 passedIDs.push_back(passedID);
194 std::string passedIDs2 =
"";
195 if (passedIDs.size() > 0) {
196 passedIDs2 =
" (" +
toString(passedIDs) +
")";
198 return (
"predecessor " +
myTripId + vehID +
" at signal " +
myTrackers.front()->getLane()->getEdge().getFromJunction()->getID()
214 myLastIndex = (myLastIndex + 1) % myPassed.size();
217 if (myLane->getID() == DEBUG_LANE) {
226 while (limit > (
int)myPassed.size()) {
227 myPassed.insert(myPassed.begin() + (myLastIndex + 1),
"");
230 if (myLane->getID() == DEBUG_LANE) {
231 std::cout <<
" raiseLimit=" << limit <<
"\n";
238 if (myLastIndex < 0) {
243 if (myPassed[i] == tripId) {
247 i = (int)myPassed.size() - 1;
258 myPassed = std::vector<std::string>(myPassed.size());
264 const std::string state =
toString(myPassed.back() ==
""
265 ? std::vector<std::string>(myPassed.begin(), myPassed.begin() + (myLastIndex + 1))
280 raiseLimit((
int)tripIDs.size());
281 for (
int i = 0; i < (int)tripIDs.size(); i++) {
282 myPassed[i] = tripIDs[i];
285 if (myLane->getID() == DEBUG_LANE) {
286 std::cout <<
" loadState limit=" << tripIDs.size() <<
" index=" << index <<
"\n";
287 for (
int i = 0; i < (int)myPassed.size(); i++) {
288 std::cout <<
" i=" << i <<
" passed=" << myPassed[i] <<
"\n";
#define WRITE_WARNINGF(...)
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_RAILSIGNAL_CONSTRAINTS
Constraints on switching a rail signal.
@ SUMO_TAG_INSERTION_PREDECESSOR
Predecessor constraint on insertion before rail signal.
@ SUMO_TAG_RAILSIGNAL_CONSTRAINT_TRACKER
Saved state for constraint tracker.
@ SUMO_TAG_PREDECESSOR
Predecessor constraint on switching a rail signal.
@ SUMO_ATTR_TLID
link,node: the traffic light id responsible for this link
@ 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.
const MSRailSignal * myFoeSignal
store the foe signal (for TraCI access)
void write(OutputDevice &out, SumoXMLTag tag, const std::string &tripId) const
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.
A base class for constraints.
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.
virtual void write(OutputDevice &out, SumoXMLTag tag, const std::string &tripId) const =0
static void clearAll()
Remove all constraints before quick-loading state.
static void cleanup()
clean up state
static MSRailSignalControl & getInstance()
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 OptionsCont & getOptions()
Retrieves the options.
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.
virtual 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.
static std::string prune(const std::string &str)
Removes trailing and leading whitechars.