Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
NLDiscreteEventBuilder.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
21// }
22/****************************************************************************/
23#include <config.h>
24
26#include <microsim/MSNet.h>
38
39
40// ===========================================================================
41// method definitions
42// ===========================================================================
44 : myNet(net) {
45 myActions["SaveTLSStates"] = EV_SAVETLSTATE;
46 myActions["SaveTLSSwitchTimes"] = EV_SAVETLSWITCHES;
47 myActions["SaveTLSSwitchStates"] = EV_SAVETLSWITCHSTATES;
48 myActions["SaveTLSProgram"] = EV_SAVETLSPROGRAM;
49}
50
51
53
54
55void
57 const std::string& basePath) {
58 bool ok = true;
59 const std::string type = attrs.getOpt<std::string>(SUMO_ATTR_TYPE, nullptr, ok, "");
60 // check whether the type was given
61 if (type == "" || !ok) {
62 throw InvalidArgument("An action's type is not given.");
63 }
64 // get the numerical representation
65 KnownActions::iterator i = myActions.find(type);
66 if (i == myActions.end()) {
67 throw InvalidArgument("The action type '" + type + "' is not known.");
68 }
69 // build the action
70 switch ((*i).second) {
71 case EV_SAVETLSTATE:
72 buildSaveTLStateCommand(attrs, basePath);
73 break;
75 buildSaveTLSwitchesCommand(attrs, basePath);
76 break;
78 buildSaveTLSwitchStatesCommand(attrs, basePath);
79 break;
81 buildSaveTLSProgramCommand(attrs, basePath);
82 break;
83 }
84}
85
86
87void
89 const std::string& basePath) {
90 bool ok = true;
91 const std::string dest = attrs.getOpt<std::string>(SUMO_ATTR_DEST, nullptr, ok, "");
92 const std::string source = attrs.getOpt<std::string>(SUMO_ATTR_SOURCE, nullptr, ok, "");
93 const bool saveDetectors = attrs.getOpt<bool>(SUMO_ATTR_SAVE_DETECTORS, nullptr, ok, false);
94 const bool saveConditions = attrs.getOpt<bool>(SUMO_ATTR_SAVE_CONDITIONS, nullptr, ok, false);
95 // check the parameter
96 if (dest == "" || !ok) {
97 throw InvalidArgument("Incomplete description of an 'SaveTLSState'-action occurred.");
98 }
99 if (source == "") {
100 const std::vector<std::string> ids = myNet.getTLSControl().getAllTLIds();
101 for (std::vector<std::string>::const_iterator tls = ids.begin(); tls != ids.end(); ++tls) {
104 saveDetectors, saveConditions);
105 }
106 } else {
107 // get the logic
108 if (!myNet.getTLSControl().knows(source)) {
109 throw InvalidArgument("The traffic light logic to save (" + source + ") is not known.");
110 }
112 // build the action
114 saveDetectors, saveConditions);
115 }
116}
117
118
119void
121 const std::string& basePath) {
122 bool ok = true;
123 const std::string dest = attrs.getOpt<std::string>(SUMO_ATTR_DEST, nullptr, ok, "");
124 const std::string source = attrs.getOpt<std::string>(SUMO_ATTR_SOURCE, nullptr, ok, "");
125 // check the parameter
126 if (dest == "" || !ok) {
127 throw InvalidArgument("Incomplete description of an 'SaveTLSSwitchTimes'-action occurred.");
128 }
129 if (source == "") {
130 const std::vector<std::string> ids = myNet.getTLSControl().getAllTLIds();
131 for (std::vector<std::string>::const_iterator tls = ids.begin(); tls != ids.end(); ++tls) {
134 }
135 } else {
136 // get the logic
137 if (!myNet.getTLSControl().knows(source)) {
138 throw InvalidArgument("The traffic light logic to save (" + source + ") is not known.");
139 }
141 // build the action
143 }
144}
145
146
147void
149 const std::string& basePath) {
150 bool ok = true;
151 const std::string dest = attrs.getOpt<std::string>(SUMO_ATTR_DEST, nullptr, ok, "");
152 const std::string source = attrs.getOpt<std::string>(SUMO_ATTR_SOURCE, nullptr, ok, "");
153 // check the parameter
154 if (dest == "" || !ok) {
155 throw InvalidArgument("Incomplete description of an 'SaveTLSSwitchStates'-action occurred.");
156 }
157 if (source == "") {
158 const std::vector<std::string> ids = myNet.getTLSControl().getAllTLIds();
159 for (std::vector<std::string>::const_iterator tls = ids.begin(); tls != ids.end(); ++tls) {
162 }
163 } else {
164 // get the logic
165 if (!myNet.getTLSControl().knows(source)) {
166 throw InvalidArgument("The traffic light logic to save (" + source + ") is not known.");
167 }
169 // build the action
171 }
172}
173
174
175void
177 const std::string& basePath) {
178 bool ok = true;
179 const std::string dest = attrs.getOpt<std::string>(SUMO_ATTR_DEST, nullptr, ok, "");
180 const std::string source = attrs.getOpt<std::string>(SUMO_ATTR_SOURCE, nullptr, ok, "");
181 // check the parameter
182 if (dest == "" || !ok) {
183 throw InvalidArgument("Incomplete description of an 'SaveTLSProgram'-action occurred.");
184 }
185 if (source == "") {
186 const std::vector<std::string> ids = myNet.getTLSControl().getAllTLIds();
187 for (std::vector<std::string>::const_iterator tls = ids.begin(); tls != ids.end(); ++tls) {
190 }
191 } else {
192 // get the logic
193 if (!myNet.getTLSControl().knows(source)) {
194 throw InvalidArgument("The traffic light logic to save (" + source + ") is not known.");
195 }
197 // build the action
199 }
200}
201
202
203/****************************************************************************/
@ SUMO_ATTR_SOURCE
@ SUMO_ATTR_SAVE_DETECTORS
@ SUMO_ATTR_DEST
@ SUMO_ATTR_TYPE
@ SUMO_ATTR_SAVE_CONDITIONS
Writes the switch times of a tls into a file when the tls switches.
Writes the state of the tls to a file (in each second)
Writes the switch times of a tls into a file when the tls switches.
Writes information about the green durations of a tls.
static std::string checkForRelativity(const std::string &filename, const std::string &basePath)
Returns the path from a configuration so that it is accessable from the current working directory.
The simulated network and simulation perfomer.
Definition MSNet.h:89
MSTLLogicControl & getTLSControl()
Returns the tls logics control.
Definition MSNet.h:451
Storage for all programs of a single tls.
std::vector< std::string > getAllTLIds() const
bool knows(const std::string &id) const
Returns the information whether the named tls is stored.
TLSLogicVariants & get(const std::string &id) const
Returns the variants of a named tls.
NLDiscreteEventBuilder(MSNet &net)
Constructor.
void buildSaveTLSwitchesCommand(const SUMOSAXAttributes &attrs, const std::string &basePath)
Builds an action which saves the switch times of links into a file.
void addAction(const SUMOSAXAttributes &attrs, const std::string &basePath)
Builds an action and saves it for further use.
void buildSaveTLSProgramCommand(const SUMOSAXAttributes &attrs, const std::string &basePath)
Builds an action which saves the tls states as a loadable program into a file.
KnownActions myActions
Build actions that shall be executed during the simulation.
void buildSaveTLStateCommand(const SUMOSAXAttributes &attrs, const std::string &basePath)
Builds an action which saves the state of a certain tls into a file.
void buildSaveTLSwitchStatesCommand(const SUMOSAXAttributes &attrs, const std::string &basePath)
Builds an action which saves the switch times and states of tls into a file.
@ EV_SAVETLSWITCHSTATES
"SaveTLSSwitchStates"
@ EV_SAVETLSWITCHES
"SaveTLSSwitchTimes"
@ EV_SAVETLSPROGRAM
"SaveTLSProgram"
static OutputDevice & getDevice(const std::string &name, bool usePrefix=true)
Returns the described OutputDevice.
Encapsulated SAX-Attributes.
T getOpt(int attr, const char *objectid, bool &ok, T defaultValue=T(), bool report=true) const
Tries to read given attribute assuming it is an int.