Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
libtraci/Lane.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-2025 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
72
73double
74Lane::getFriction(const std::string& laneID) {
76}
77
78
79int
80Lane::getLinkNumber(const std::string& laneID) {
82}
83
84
85std::vector<libsumo::TraCIConnection>
86Lane::getLinks(const std::string& laneID) {
87 std::unique_lock<std::mutex> lock{ libtraci::Connection::getActive().getMutex() };
88 std::vector<libsumo::TraCIConnection> ret;
90 sto.readUnsignedByte();
91 sto.readInt();
92
93 const int linkNo = sto.readInt();
94 for (int i = 0; i < linkNo; ++i) {
96 StoHelp::readConnection(sto, conn);
97 ret.emplace_back(conn);
98 }
99 return ret;
100}
101
102
103std::vector<std::string>
104Lane::getAllowed(const std::string& laneID) {
106}
107
108
109std::vector<std::string>
110Lane::getDisallowed(const std::string& laneID) {
111 return Dom::getStringVector(libsumo::LANE_DISALLOWED, laneID); // negation yields disallowed
112}
113
114
115std::vector<std::string>
116Lane::getChangePermissions(const std::string& laneID, const int direction) {
117 tcpip::Storage content;
118 StoHelp::writeTypedByte(content, direction);
119 return Dom::getStringVector(libsumo::LANE_CHANGES, laneID, &content);
120}
121
122
124Lane::getShape(const std::string& laneID) {
125 return Dom::getPolygon(libsumo::VAR_SHAPE, laneID);
126}
127
128
129double
130Lane::getWidth(const std::string& laneID) {
131 return Dom::getDouble(libsumo::VAR_WIDTH, laneID);
132}
133
134
135double
136Lane::getCO2Emission(const std::string& laneID) {
138}
139
140
141double
142Lane::getCOEmission(const std::string& laneID) {
144}
145
146
147double
148Lane::getHCEmission(const std::string& laneID) {
150}
151
152
153double
154Lane::getPMxEmission(const std::string& laneID) {
156}
157
158
159double
160Lane::getNOxEmission(const std::string& laneID) {
162}
163
164
165double
166Lane::getFuelConsumption(const std::string& laneID) {
168}
169
170
171double
172Lane::getNoiseEmission(const std::string& laneID) {
174}
175
176
177double
178Lane::getElectricityConsumption(const std::string& laneID) {
180}
181
182
183double
184Lane::getLastStepMeanSpeed(const std::string& laneID) {
186}
187
188
189double
190Lane::getLastStepOccupancy(const std::string& laneID) {
192}
193
194
195double
196Lane::getLastStepLength(const std::string& laneID) {
198}
199
200
201double
202Lane::getWaitingTime(const std::string& laneID) {
204}
205
206
207double
208Lane::getTraveltime(const std::string& laneID) {
210}
211
212
213int
214Lane::getLastStepVehicleNumber(const std::string& laneID) {
216}
217
218
219int
220Lane::getLastStepHaltingNumber(const std::string& laneID) {
222}
223
224
225std::vector<std::string>
226Lane::getLastStepVehicleIDs(const std::string& laneID) {
228}
229
230
231std::vector<std::string>
232Lane::getFoes(const std::string& laneID, const std::string& toLaneID) {
233 tcpip::Storage content;
235 content.writeString(toLaneID);
236 return Dom::getStringVector(libsumo::VAR_FOES, laneID, &content);
237}
238
239
240std::vector<std::string>
241Lane::getInternalFoes(const std::string& laneID) {
242 return getFoes(laneID, "");
243}
244
245
246const std::vector<std::string>
247Lane::getPendingVehicles(const std::string& laneID) {
249}
250
251
252double
253Lane::getAngle(const std::string& laneID, double relativePosition) {
254 tcpip::Storage content;
256 content.writeDouble(relativePosition);
257 return Dom::getDouble(libsumo::VAR_ANGLE, laneID, &content);
258}
259
260std::string
261Lane::getBidiLane(const std::string& laneID) {
262 return Dom::getString(libsumo::VAR_BIDI, laneID);
263}
264
265void
266Lane::setAllowed(const std::string& laneID, std::string allowedClass) {
267 setAllowed(laneID, std::vector<std::string>({allowedClass}));
268}
269
270
271void
272Lane::setAllowed(const std::string& laneID, std::vector<std::string> allowedClasses) {
273 Dom::setStringVector(libsumo::LANE_ALLOWED, laneID, allowedClasses);
274}
275
276
277void
278Lane::setDisallowed(const std::string& laneID, std::string disallowedClasses) {
279 setDisallowed(laneID, std::vector<std::string>({disallowedClasses}));
280}
281
282
283void
284Lane::setDisallowed(const std::string& laneID, std::vector<std::string> disallowedClasses) {
285 Dom::setStringVector(libsumo::LANE_DISALLOWED, laneID, disallowedClasses);
286}
287
288
289void
290Lane::setChangePermissions(const std::string& laneID, std::vector<std::string> allowedClasses, const int direction) {
291 tcpip::Storage content;
292 StoHelp::writeCompound(content, 2);
293 StoHelp::writeTypedStringList(content, allowedClasses);
294 StoHelp::writeTypedByte(content, direction);
295 Dom::set(libsumo::LANE_CHANGES, laneID, &content);
296}
297
298
299void
300Lane::setMaxSpeed(const std::string& laneID, double speed) {
302}
303
304
305void
306Lane::setFriction(const std::string& laneID, double friction) {
307 Dom::setDouble(libsumo::VAR_FRICTION, laneID, friction);
308}
309
310
311void
312Lane::setLength(const std::string& laneID, double length) {
313 Dom::setDouble(libsumo::VAR_LENGTH, laneID, length);
314}
315
316
319
320}
321
322
323/****************************************************************************/
#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 readConnection(tcpip::Storage &inputStorage, libsumo::TraCIConnection &connection, const std::string &error="")
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:76
static void setDouble(int var, const std::string &id, double value)
Definition Domain.h:221
static std::vector< std::string > getStringVector(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition Domain.h:167
static void setStringVector(int var, const std::string &id, const std::vector< std::string > &value)
Definition Domain.h:235
static std::string getString(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition Domain.h:162
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:209
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 void writeString(const std::string &s)
Definition storage.cpp:197
virtual void writeDouble(double)
Definition storage.cpp:354
virtual int readUnsignedByte()
Definition storage.cpp:155
virtual void writeUnsignedByte(int)
Definition storage.cpp:165
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 VAR_ANGLE
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_BIDI
TRACI_CONST int VAR_NOISEEMISSION
TRACI_CONST int LANE_DISALLOWED
TRACI_CONST int VAR_FRICTION
TRACI_CONST int TYPE_DOUBLE
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:240