Eclipse SUMO - Simulation of Urban MObility
libtraci/Edge.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2017-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 /****************************************************************************/
18 // C++ TraCI client API implementation
19 /****************************************************************************/
20 #include <config.h>
21 
22 #define LIBTRACI 1
23 #include <iterator>
24 #include <libsumo/Edge.h>
25 #include "Connection.h"
26 #include "Domain.h"
27 
28 
29 namespace libtraci {
30 
31 typedef Domain<libsumo::CMD_GET_EDGE_VARIABLE, libsumo::CMD_SET_EDGE_VARIABLE> Dom;
32 
33 
34 // ===========================================================================
35 // static member definitions
36 // ===========================================================================
37 std::vector<std::string>
38 Edge::getIDList() {
40 }
41 
42 
43 int
44 Edge::getIDCount() {
45  return Dom::getInt(libsumo::ID_COUNT, "");
46 }
47 
48 
49 double
50 Edge::getAdaptedTraveltime(const std::string& edgeID, double time) {
51  tcpip::Storage content;
53  content.writeDouble(time);
54  return Dom::getDouble(libsumo::VAR_EDGE_TRAVELTIME, edgeID, &content);
55 }
56 
57 
58 double
59 Edge::getEffort(const std::string& edgeID, double time) {
60  tcpip::Storage content;
62  content.writeDouble(time);
63  return Dom::getDouble(libsumo::VAR_EDGE_EFFORT, edgeID, &content);
64 }
65 
66 
67 double
68 Edge::getTraveltime(const std::string& edgeID) {
70 }
71 
72 
73 double
74 Edge::getWaitingTime(const std::string& edgeID) {
76 }
77 
78 
79 const std::vector<std::string>
80 Edge::getLastStepPersonIDs(const std::string& edgeID) {
82 }
83 
84 
85 const std::vector<std::string>
86 Edge::getLastStepVehicleIDs(const std::string& edgeID) {
88 }
89 
90 
91 double
92 Edge::getCO2Emission(const std::string& edgeID) {
94 }
95 
96 
97 double
98 Edge::getCOEmission(const std::string& edgeID) {
100 }
101 
102 
103 double
104 Edge::getHCEmission(const std::string& edgeID) {
105  return Dom::getDouble(libsumo::VAR_HCEMISSION, edgeID);
106 }
107 
108 
109 double
110 Edge::getPMxEmission(const std::string& edgeID) {
112 }
113 
114 
115 double
116 Edge::getNOxEmission(const std::string& edgeID) {
118 }
119 
120 
121 double
122 Edge::getFuelConsumption(const std::string& edgeID) {
124 }
125 
126 
127 double
128 Edge::getNoiseEmission(const std::string& edgeID) {
130 }
131 
132 
133 double
134 Edge::getElectricityConsumption(const std::string& edgeID) {
136 }
137 
138 
139 int
140 Edge::getLastStepVehicleNumber(const std::string& edgeID) {
142 }
143 
144 
145 double
146 Edge::getLastStepMeanSpeed(const std::string& edgeID) {
148 }
149 
150 
151 double
152 Edge::getMeanFriction(const std::string& edgeID) {
153  return Dom::getDouble(libsumo::VAR_FRICTION, edgeID);
154 }
155 
156 
157 double
158 Edge::getLastStepOccupancy(const std::string& edgeID) {
160 }
161 
162 
163 int
164 Edge::getLastStepHaltingNumber(const std::string& edgeID) {
166 }
167 
168 
169 double
170 Edge::getLastStepLength(const std::string& edgeID) {
172 }
173 
174 
175 int
176 Edge::getLaneNumber(const std::string& edgeID) {
177  return Dom::getInt(libsumo::VAR_LANE_INDEX, edgeID);
178 }
179 
180 
181 std::string
182 Edge::getStreetName(const std::string& edgeID) {
183  return Dom::getString(libsumo::VAR_NAME, edgeID);
184 }
185 
186 
187 const std::vector<std::string>
188 Edge::getPendingVehicles(const std::string& edgeID) {
190 }
191 
192 
193 double
194 Edge::getAngle(const std::string& edgeID, double relativePosition) {
195  tcpip::Storage content;
197  content.writeDouble(relativePosition);
198  return Dom::getDouble(libsumo::VAR_ANGLE, edgeID, &content);
199 }
200 
201 
202 std::string
203 Edge::getFromJunction(const std::string& edgeID) {
204  return Dom::getString(libsumo::FROM_JUNCTION, edgeID);
205 }
206 
207 
208 std::string
209 Edge::getToJunction(const std::string& edgeID) {
210  return Dom::getString(libsumo::TO_JUNCTION, edgeID);
211 }
212 
213 
216 
217 
218 void
219 Edge::setAllowed(const std::string& edgeID, std::string allowedClasses) {
220  setAllowed(edgeID, std::vector<std::string>({allowedClasses}));
221 }
222 
223 
224 void
225 Edge::setAllowed(const std::string& edgeID, std::vector<std::string> allowedClasses) {
226  Dom::setStringVector(libsumo::LANE_ALLOWED, edgeID, allowedClasses);
227 }
228 
229 
230 void
231 Edge::setDisallowed(const std::string& edgeID, std::string disallowedClasses) {
232  setDisallowed(edgeID, std::vector<std::string>({disallowedClasses}));
233 }
234 
235 
236 void
237 Edge::setDisallowed(const std::string& edgeID, std::vector<std::string> disallowedClasses) {
238  Dom::setStringVector(libsumo::LANE_DISALLOWED, edgeID, disallowedClasses);
239 }
240 
241 
242 void
243 Edge::adaptTraveltime(const std::string& edgeID, double time, double beginSeconds, double endSeconds) {
244  tcpip::Storage content;
246  if (endSeconds != std::numeric_limits<double>::max()) {
247  content.writeInt(3);
249  content.writeDouble(beginSeconds);
251  content.writeDouble(endSeconds);
252  } else {
253  content.writeInt(1);
254  }
256  content.writeDouble(time);
257  Dom::set(libsumo::VAR_EDGE_TRAVELTIME, edgeID, &content);
258 }
259 
260 
261 void
262 Edge::setEffort(const std::string& edgeID, double effort, double beginSeconds, double endSeconds) {
263  tcpip::Storage content;
265  if (endSeconds != std::numeric_limits<double>::max()) {
266  content.writeInt(3);
268  content.writeDouble(beginSeconds);
270  content.writeDouble(endSeconds);
271  } else {
272  content.writeInt(1);
273  }
275  content.writeDouble(effort);
276  Dom::set(libsumo::VAR_EDGE_EFFORT, edgeID, &content);
277 }
278 
279 
280 void
281 Edge::setMaxSpeed(const std::string& edgeID, double speed) {
282  Dom::setDouble(libsumo::VAR_MAXSPEED, edgeID, speed);
283 }
284 
285 
286 void
287 Edge::setFriction(const std::string& edgeID, double friction) {
288  Dom::setDouble(libsumo::VAR_MAXSPEED, edgeID, friction);
289 }
290 
291 }
292 
293 
294 /****************************************************************************/
#define LIBTRACI_SUBSCRIPTION_IMPLEMENTATION(CLASS, DOMAIN)
Definition: Domain.h:38
#define LIBTRACI_PARAMETER_IMPLEMENTATION(CLASS, DOMAIN)
Definition: Domain.h:77
C++ TraCI client API implementation.
Definition: Edge.h:34
static void setDouble(int var, const std::string &id, double value)
Definition: Domain.h:231
static void setStringVector(int var, const std::string &id, const std::vector< std::string > &value)
Definition: Domain.h:245
static std::vector< std::string > getStringVector(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:177
static std::string getString(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:172
static int getInt(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:125
static void set(int var, const std::string &id, tcpip::Storage *add)
Definition: Domain.h:219
static double getDouble(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:130
virtual void writeInt(int)
Definition: storage.cpp:321
virtual void writeDouble(double)
Definition: storage.cpp:354
virtual void writeUnsignedByte(int)
Definition: storage.cpp:165
virtual void writeByte(int)
Definition: storage.cpp:140
TRACI_CONST int LAST_STEP_VEHICLE_ID_LIST
TRACI_CONST int LAST_STEP_VEHICLE_NUMBER
TRACI_CONST int VAR_NOXEMISSION
TRACI_CONST int VAR_NAME
TRACI_CONST int LAST_STEP_PERSON_ID_LIST
TRACI_CONST int TRACI_ID_LIST
TRACI_CONST int VAR_WAITING_TIME
TRACI_CONST int VAR_EDGE_TRAVELTIME
TRACI_CONST int LAST_STEP_LENGTH
TRACI_CONST int VAR_ANGLE
TRACI_CONST int TYPE_COMPOUND
TRACI_CONST int VAR_EDGE_EFFORT
TRACI_CONST int VAR_LANE_INDEX
TRACI_CONST int VAR_PMXEMISSION
TRACI_CONST int VAR_COEMISSION
TRACI_CONST int VAR_MAXSPEED
TRACI_CONST int LAST_STEP_MEAN_SPEED
TRACI_CONST int VAR_CO2EMISSION
TRACI_CONST int VAR_PENDING_VEHICLES
TRACI_CONST int VAR_FUELCONSUMPTION
TRACI_CONST int LAST_STEP_VEHICLE_HALTING_NUMBER
TRACI_CONST int VAR_HCEMISSION
TRACI_CONST int ID_COUNT
TRACI_CONST int LAST_STEP_OCCUPANCY
TRACI_CONST int VAR_NOISEEMISSION
TRACI_CONST int LANE_DISALLOWED
TRACI_CONST int VAR_FRICTION
TRACI_CONST int FROM_JUNCTION
TRACI_CONST int TYPE_DOUBLE
TRACI_CONST int VAR_CURRENT_TRAVELTIME
TRACI_CONST int LANE_ALLOWED
TRACI_CONST int VAR_ELECTRICITYCONSUMPTION
TRACI_CONST int TO_JUNCTION
Domain< libsumo::CMD_GET_BUSSTOP_VARIABLE, libsumo::CMD_SET_BUSSTOP_VARIABLE > Dom