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-2023 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/****************************************************************************/
24// C++ TraCI client API implementation
25/****************************************************************************/
26#include <config.h>
27
28#define LIBTRACI 1
29#include <libsumo/Lane.h>
31#include "Domain.h"
32
33
34namespace libtraci {
35
36typedef Domain<libsumo::CMD_GET_LANE_VARIABLE, libsumo::CMD_SET_LANE_VARIABLE> Dom;
37
38
39
40// ===========================================================================
41// static member definitions
42// ===========================================================================
43std::vector<std::string>
44Lane::getIDList() {
46}
47
48
49int
50Lane::getIDCount() {
52}
53
54
55std::string
56Lane::getEdgeID(const std::string& laneID) {
58}
59
60
61double
62Lane::getLength(const std::string& laneID) {
63 return Dom::getDouble(libsumo::VAR_LENGTH, laneID);
64}
65
66
67double
68Lane::getMaxSpeed(const std::string& laneID) {
70}
71
72double
73Lane::getFriction(const std::string& laneID) {
75}
76
77
78int
79Lane::getLinkNumber(const std::string& laneID) {
81}
82
83
84std::vector<libsumo::TraCIConnection>
85Lane::getLinks(const std::string& laneID) {
86 std::unique_lock<std::mutex> lock{ libtraci::Connection::getActive().getMutex() };
87 std::vector<libsumo::TraCIConnection> ret;
89 sto.readUnsignedByte();
90 sto.readInt();
91
92 int linkNo = sto.readInt();
93 for (int i = 0; i < linkNo; ++i) {
94
95 sto.readUnsignedByte();
96 std::string approachedLane = sto.readString();
97
98 sto.readUnsignedByte();
99 std::string approachedLaneInternal = sto.readString();
100
101 sto.readUnsignedByte();
102 bool hasPrio = sto.readUnsignedByte() != 0;
103
104 sto.readUnsignedByte();
105 bool isOpen = sto.readUnsignedByte() != 0;
106
107 sto.readUnsignedByte();
108 bool hasFoe = sto.readUnsignedByte() != 0;
109
110 sto.readUnsignedByte();
111 std::string state = sto.readString();
112
113 sto.readUnsignedByte();
114 std::string direction = sto.readString();
115
116 sto.readUnsignedByte();
117 double length = sto.readDouble();
118
119 ret.push_back(libsumo::TraCIConnection(approachedLane,
120 hasPrio,
121 isOpen,
122 hasFoe,
123 approachedLaneInternal,
124 state,
125 direction,
126 length));
127
128 }
129 return ret;
130}
131
132
133std::vector<std::string>
134Lane::getAllowed(const std::string& laneID) {
136}
137
138
139std::vector<std::string>
140Lane::getDisallowed(const std::string& laneID) {
141 return Dom::getStringVector(libsumo::LANE_DISALLOWED, laneID); // negation yields disallowed
142}
143
144
145std::vector<std::string>
146Lane::getChangePermissions(const std::string& laneID, const int direction) {
147 tcpip::Storage content;
148 StoHelp::writeTypedByte(content, direction);
149 return Dom::getStringVector(libsumo::LANE_CHANGES, laneID, &content);
150}
151
152
154Lane::getShape(const std::string& laneID) {
155 return Dom::getPolygon(libsumo::VAR_SHAPE, laneID);
156}
157
158
159double
160Lane::getWidth(const std::string& laneID) {
161 return Dom::getDouble(libsumo::VAR_WIDTH, laneID);
162}
163
164
165double
166Lane::getCO2Emission(const std::string& laneID) {
168}
169
170
171double
172Lane::getCOEmission(const std::string& laneID) {
174}
175
176
177double
178Lane::getHCEmission(const std::string& laneID) {
180}
181
182
183double
184Lane::getPMxEmission(const std::string& laneID) {
186}
187
188
189double
190Lane::getNOxEmission(const std::string& laneID) {
192}
193
194double
195Lane::getFuelConsumption(const std::string& laneID) {
197}
198
199
200double
201Lane::getNoiseEmission(const std::string& laneID) {
203}
204
205
206double
207Lane::getElectricityConsumption(const std::string& laneID) {
209}
210
211
212double
213Lane::getLastStepMeanSpeed(const std::string& laneID) {
215}
216
217
218double
219Lane::getLastStepOccupancy(const std::string& laneID) {
221}
222
223
224double
225Lane::getLastStepLength(const std::string& laneID) {
227}
228
229
230double
231Lane::getWaitingTime(const std::string& laneID) {
233}
234
235
236double
237Lane::getTraveltime(const std::string& laneID) {
239}
240
241
242int
243Lane::getLastStepVehicleNumber(const std::string& laneID) {
245}
246
247int
248Lane::getLastStepHaltingNumber(const std::string& laneID) {
250}
251
252
253std::vector<std::string>
254Lane::getLastStepVehicleIDs(const std::string& laneID) {
256}
257
258
259std::vector<std::string>
260Lane::getFoes(const std::string& laneID, const std::string& toLaneID) {
261 tcpip::Storage content;
263 content.writeString(toLaneID);
264 return Dom::getStringVector(libsumo::VAR_FOES, laneID, &content);
265}
266
267// XXX: there seems to be no "Dom::getFoes"
268std::vector<std::string>
269Lane::getInternalFoes(const std::string& laneID) {
270 //tcpip::Storage content;
271 //content.writeUnsignedByte(libsumo::TYPE_STRING);
272 //content.writeString("");
273 //return Dom::getStringVector(libsumo::VAR_FOES, laneID, &content);
274 return getFoes(laneID, "");
275 //return Dom::getFoes(laneID, "");
276}
277
278
279const std::vector<std::string>
280Lane::getPendingVehicles(const std::string& laneID) {
282}
283
284
285void
286Lane::setAllowed(const std::string& laneID, std::string allowedClass) {
287 setAllowed(laneID, std::vector<std::string>({allowedClass}));
288}
289
290
291void
292Lane::setAllowed(const std::string& laneID, std::vector<std::string> allowedClasses) {
293 Dom::setStringVector(libsumo::LANE_ALLOWED, laneID, allowedClasses);
294}
295
296
297void
298Lane::setDisallowed(const std::string& laneID, std::string disallowedClasses) {
299 setDisallowed(laneID, std::vector<std::string>({disallowedClasses}));
300}
301
302
303void
304Lane::setDisallowed(const std::string& laneID, std::vector<std::string> disallowedClasses) {
305 Dom::setStringVector(libsumo::LANE_DISALLOWED, laneID, disallowedClasses);
306}
307
308
309void
310Lane::setChangePermissions(const std::string& laneID, std::vector<std::string> allowedClasses, const int direction) {
311 tcpip::Storage content;
312 StoHelp::writeCompound(content, 2);
313 StoHelp::writeTypedStringList(content, allowedClasses);
314 StoHelp::writeTypedByte(content, direction);
315 Dom::set(libsumo::LANE_CHANGES, laneID, &content);
316}
317
318
319void
320Lane::setMaxSpeed(const std::string& laneID, double speed) {
322}
323
324void
325Lane::setFriction(const std::string& laneID, double friction) {
326 Dom::setDouble(libsumo::VAR_FRICTION, laneID, friction);
327}
328
329
330void
331Lane::setLength(const std::string& laneID, double length) {
332 Dom::setDouble(libsumo::VAR_LENGTH, laneID, length);
333}
334
335
338
339}
340
341
342/****************************************************************************/
#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.
static void writeCompound(tcpip::Storage &content, int size)
static void writeTypedStringList(tcpip::Storage &content, const std::vector< std::string > &value)
static void writeTypedByte(tcpip::Storage &content, int value)
static Connection & getActive()
Definition: Connection.h:57
std::mutex & getMutex() const
Definition: Connection.h:73
static void setDouble(int var, const std::string &id, double value)
Definition: Domain.h:231
static std::vector< std::string > getStringVector(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:177
static void setStringVector(int var, const std::string &id, const std::vector< std::string > &value)
Definition: Domain.h:245
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 libsumo::TraCIPositionVector getPolygon(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:135
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
static tcpip::Storage & get(int var, const std::string &id, tcpip::Storage *add=nullptr, int expectedType=libsumo::TYPE_COMPOUND)
Definition: Domain.h:111
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 LANE_CHANGES
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_FRICTION
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:234