Eclipse SUMO - Simulation of Urban MObility
libtraci/Lane.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2017-2022 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 /****************************************************************************/
23 // C++ TraCI client API implementation
24 /****************************************************************************/
25 #include <config.h>
26 
27 #define LIBTRACI 1
28 #include <libsumo/Lane.h>
29 #include <libsumo/TraCIConstants.h>
30 #include "Domain.h"
31 
32 
33 namespace libtraci {
34 
35 typedef Domain<libsumo::CMD_GET_LANE_VARIABLE, libsumo::CMD_SET_LANE_VARIABLE> Dom;
36 
37 
38 
39 // ===========================================================================
40 // static member definitions
41 // ===========================================================================
42 std::vector<std::string>
43 Lane::getIDList() {
45 }
46 
47 
48 int
49 Lane::getIDCount() {
50  return Dom::getInt(libsumo::ID_COUNT, "");
51 }
52 
53 
54 std::string
55 Lane::getEdgeID(std::string laneID) {
56  return Dom::getString(libsumo::LANE_EDGE_ID, laneID);
57 }
58 
59 
60 double
61 Lane::getLength(std::string laneID) {
62  return Dom::getDouble(libsumo::VAR_LENGTH, laneID);
63 }
64 
65 
66 double
67 Lane::getMaxSpeed(std::string laneID) {
68  return Dom::getDouble(libsumo::VAR_MAXSPEED, laneID);
69 }
70 
71 
72 int
73 Lane::getLinkNumber(std::string laneID) {
74  return Dom::getInt(libsumo::LANE_LINK_NUMBER, laneID);
75 }
76 
77 
78 std::vector<libsumo::TraCIConnection>
79 Lane::getLinks(std::string laneID) {
80  std::vector<libsumo::TraCIConnection> ret;
82  sto.readUnsignedByte();
83  sto.readInt();
84 
85  int linkNo = sto.readInt();
86  for (int i = 0; i < linkNo; ++i) {
87 
88  sto.readUnsignedByte();
89  std::string approachedLane = sto.readString();
90 
91  sto.readUnsignedByte();
92  std::string approachedLaneInternal = sto.readString();
93 
94  sto.readUnsignedByte();
95  bool hasPrio = sto.readUnsignedByte() != 0;
96 
97  sto.readUnsignedByte();
98  bool isOpen = sto.readUnsignedByte() != 0;
99 
100  sto.readUnsignedByte();
101  bool hasFoe = sto.readUnsignedByte() != 0;
102 
103  sto.readUnsignedByte();
104  std::string state = sto.readString();
105 
106  sto.readUnsignedByte();
107  std::string direction = sto.readString();
108 
109  sto.readUnsignedByte();
110  double length = sto.readDouble();
111 
112  ret.push_back(libsumo::TraCIConnection(approachedLane,
113  hasPrio,
114  isOpen,
115  hasFoe,
116  approachedLaneInternal,
117  state,
118  direction,
119  length));
120 
121  }
122  return ret;
123 }
124 
125 
126 std::vector<std::string>
127 Lane::getAllowed(std::string laneID) {
129 }
130 
131 
132 std::vector<std::string>
133 Lane::getDisallowed(std::string laneID) {
134  return Dom::getStringVector(libsumo::LANE_DISALLOWED, laneID); // negation yields disallowed
135 }
136 
137 
139 Lane::getShape(std::string laneID) {
140  return Dom::getPolygon(libsumo::VAR_SHAPE, laneID);
141 }
142 
143 
144 double
145 Lane::getWidth(std::string laneID) {
146  return Dom::getDouble(libsumo::VAR_WIDTH, laneID);
147 }
148 
149 
150 double
151 Lane::getCO2Emission(std::string laneID) {
153 }
154 
155 
156 double
157 Lane::getCOEmission(std::string laneID) {
158  return Dom::getDouble(libsumo::VAR_COEMISSION, laneID);
159 }
160 
161 
162 double
163 Lane::getHCEmission(std::string laneID) {
164  return Dom::getDouble(libsumo::VAR_HCEMISSION, laneID);
165 }
166 
167 
168 double
169 Lane::getPMxEmission(std::string laneID) {
171 }
172 
173 
174 double
175 Lane::getNOxEmission(std::string laneID) {
177 }
178 
179 double
180 Lane::getFuelConsumption(std::string laneID) {
182 }
183 
184 
185 double
186 Lane::getNoiseEmission(std::string laneID) {
188 }
189 
190 
191 double
192 Lane::getElectricityConsumption(std::string laneID) {
194 }
195 
196 
197 double
198 Lane::getLastStepMeanSpeed(std::string laneID) {
200 }
201 
202 
203 double
204 Lane::getLastStepOccupancy(std::string laneID) {
206 }
207 
208 
209 double
210 Lane::getLastStepLength(std::string laneID) {
212 }
213 
214 
215 double
216 Lane::getWaitingTime(std::string laneID) {
218 }
219 
220 
221 double
222 Lane::getTraveltime(std::string laneID) {
224 }
225 
226 
227 int
228 Lane::getLastStepVehicleNumber(std::string laneID) {
230 }
231 
232 int
233 Lane::getLastStepHaltingNumber(std::string laneID) {
235 }
236 
237 
238 std::vector<std::string>
239 Lane::getLastStepVehicleIDs(std::string laneID) {
241 }
242 
243 
244 std::vector<std::string>
245 Lane::getFoes(const std::string& laneID, const std::string& toLaneID) {
246  tcpip::Storage content;
248  content.writeString(toLaneID);
249  return Dom::getStringVector(libsumo::VAR_FOES, laneID, &content);
250 }
251 
252 // XXX: there seems to be no "Dom::getFoes"
253 std::vector<std::string>
254 Lane::getInternalFoes(const std::string& laneID) {
255  //tcpip::Storage content;
256  //content.writeUnsignedByte(libsumo::TYPE_STRING);
257  //content.writeString("");
258  //return Dom::getStringVector(libsumo::VAR_FOES, laneID, &content);
259  return getFoes(laneID, "");
260  //return Dom::getFoes(laneID, "");
261 }
262 
263 const std::vector<std::string>
264 Lane::getPendingVehicles(const std::string& laneID) {
266 }
267 
268 void
269 Lane::setAllowed(std::string laneID, std::string allowedClass) {
270  Dom::setString(libsumo::LANE_ALLOWED, laneID, allowedClass);
271 }
272 
273 
274 void
275 Lane::setAllowed(std::string laneID, std::vector<std::string> allowedClasses) {
276  Dom::setStringVector(libsumo::LANE_ALLOWED, laneID, allowedClasses);
277 }
278 
279 
280 void
281 Lane::setDisallowed(std::string laneID, std::vector<std::string> disallowedClasses) {
282  Dom::setStringVector(libsumo::LANE_DISALLOWED, laneID, disallowedClasses);
283 }
284 
285 
286 void
287 Lane::setMaxSpeed(std::string laneID, double speed) {
288  Dom::setDouble(libsumo::VAR_MAXSPEED, laneID, speed);
289 }
290 
291 
292 void
293 Lane::setLength(std::string laneID, double length) {
294  Dom::setDouble(libsumo::VAR_LENGTH, laneID, length);
295 }
296 
297 
300 
301 }
302 
303 
304 /****************************************************************************/
#define LIBTRACI_SUBSCRIPTION_IMPLEMENTATION(CLASS, DOMAIN)
Definition: Domain.h:38
#define LIBTRACI_PARAMETER_IMPLEMENTATION(CLASS, DOMAIN)
Definition: Domain.h:76
C++ TraCI client API implementation.
Definition: Lane.h:33
static void setDouble(int var, const std::string &id, double value)
Definition: Domain.h:215
static void setStringVector(int var, const std::string &id, const std::vector< std::string > &value)
Definition: Domain.h:229
static std::vector< std::string > getStringVector(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:170
static std::string getString(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:166
static int getInt(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:124
static libsumo::TraCIPositionVector getPolygon(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:132
static double getDouble(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:128
static tcpip::Storage & get(int var, const std::string &id, tcpip::Storage *add=nullptr, int expectedType=libsumo::TYPE_COMPOUND)
Definition: Domain.h:110
static void setString(int var, const std::string &id, const std::string &value)
Definition: Domain.h:222
virtual std::string readString()
Definition: storage.cpp:180
virtual void writeString(const std::string &s)
Definition: storage.cpp:197
virtual int readUnsignedByte()
Definition: storage.cpp:155
virtual void writeUnsignedByte(int)
Definition: storage.cpp:165
virtual double readDouble()
Definition: storage.cpp:362
virtual int readInt()
Definition: storage.cpp:311
TRACI_CONST int LAST_STEP_VEHICLE_ID_LIST
TRACI_CONST int LAST_STEP_VEHICLE_NUMBER
TRACI_CONST int VAR_NOXEMISSION
TRACI_CONST int LANE_LINKS
TRACI_CONST int TRACI_ID_LIST
TRACI_CONST int VAR_WAITING_TIME
TRACI_CONST int LANE_LINK_NUMBER
TRACI_CONST int LAST_STEP_LENGTH
TRACI_CONST int LANE_EDGE_ID
TRACI_CONST int VAR_PMXEMISSION
TRACI_CONST int VAR_COEMISSION
TRACI_CONST int VAR_WIDTH
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 VAR_SHAPE
TRACI_CONST int LAST_STEP_VEHICLE_HALTING_NUMBER
TRACI_CONST int VAR_LENGTH
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_CURRENT_TRAVELTIME
TRACI_CONST int VAR_FOES
TRACI_CONST int LANE_ALLOWED
TRACI_CONST int VAR_ELECTRICITYCONSUMPTION
TRACI_CONST int TYPE_STRING
Domain< libsumo::CMD_GET_BUSSTOP_VARIABLE, libsumo::CMD_SET_BUSSTOP_VARIABLE > Dom
A list of positions.
Definition: TraCIDefs.h:207