Eclipse SUMO - Simulation of Urban MObility
Domain.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2012-2020 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 // C++ TraCI client API implementation
22 /****************************************************************************/
23 #pragma once
24 // we do not include config.h here, since we should be independent of a special sumo build
25 #include <vector>
26 #include <limits>
27 #include <map>
28 #include <string>
29 #include <stdexcept>
30 #include <sstream>
31 #include <memory>
32 #include <foreign/tcpip/storage.h>
33 #include <libtraci/Connection.h>
34 
35 
36 #define LIBTRACI_SUBSCRIPTION_IMPLEMENTATION(CLASS, DOMAIN) \
37 void CLASS::subscribe(const std::string& objectID, const std::vector<int>& varIDs, double begin, double end, const libsumo::TraCIResults& params) { \
38  libtraci::Connection::getActive().subscribeObjectVariable(libsumo::CMD_SUBSCRIBE_##DOMAIN##_VARIABLE, objectID, begin, end, varIDs, params); \
39 } \
40 \
41 void CLASS::unsubscribe(const std::string& objectID) { \
42  subscribe(objectID, std::vector<int>()); \
43 } \
44 \
45 void CLASS::subscribeContext(const std::string& objectID, int domain, double dist, const std::vector<int>& varIDs, double begin, double end, const libsumo::TraCIResults& params) { \
46  libtraci::Connection::getActive().subscribeObjectContext(libsumo::CMD_SUBSCRIBE_##DOMAIN##_CONTEXT, objectID, begin, end, domain, dist, varIDs, params); \
47 } \
48 \
49 void CLASS::unsubscribeContext(const std::string& objectID, int domain, double dist) { \
50  subscribeContext(objectID, domain, dist, std::vector<int>()); \
51 } \
52 \
53 const libsumo::SubscriptionResults CLASS::getAllSubscriptionResults() { \
54  return libtraci::Connection::getActive().getAllSubscriptionResults(libsumo::RESPONSE_SUBSCRIBE_##DOMAIN##_VARIABLE); \
55 } \
56 \
57 const libsumo::TraCIResults CLASS::getSubscriptionResults(const std::string& objectID) { \
58  return libtraci::Connection::getActive().getAllSubscriptionResults(libsumo::RESPONSE_SUBSCRIBE_##DOMAIN##_VARIABLE)[objectID]; \
59 } \
60 \
61 const libsumo::ContextSubscriptionResults CLASS::getAllContextSubscriptionResults() { \
62  return libtraci::Connection::getActive().getAllContextSubscriptionResults(libsumo::RESPONSE_SUBSCRIBE_##DOMAIN##_CONTEXT); \
63 } \
64 \
65 const libsumo::SubscriptionResults CLASS::getContextSubscriptionResults(const std::string& objectID) { \
66  return libtraci::Connection::getActive().getAllContextSubscriptionResults(libsumo::RESPONSE_SUBSCRIBE_##DOMAIN##_VARIABLE)[objectID]; \
67 } \
68 \
69 void CLASS::subscribeParameterWithKey(const std::string& objectID, const std::string& key, double beginTime, double endTime) { \
70  subscribe(objectID, std::vector<int>({libsumo::VAR_PARAMETER_WITH_KEY}), beginTime, endTime, libsumo::TraCIResults {{libsumo::VAR_PARAMETER_WITH_KEY, std::make_shared<libsumo::TraCIString>(key)}}); \
71 }
72 
73 
74 #define LIBTRACI_PARAMETER_IMPLEMENTATION(CLASS, DOMAIN) \
75 std::string \
76 CLASS::getParameter(const std::string& objectID, const std::string& param) { \
77  tcpip::Storage content; \
78  content.writeByte(libsumo::TYPE_STRING); \
79  content.writeString(param); \
80  return Dom::getString(libsumo::VAR_PARAMETER, objectID, &content); \
81 } \
82 \
83 void \
84 CLASS::setParameter(const std::string& objectID, const std::string& key, const std::string& value) { \
85  tcpip::Storage content; \
86  content.writeUnsignedByte(libsumo::TYPE_COMPOUND); \
87  content.writeInt(2); \
88  content.writeUnsignedByte(libsumo::TYPE_STRING); \
89  content.writeString(key); \
90  content.writeUnsignedByte(libsumo::TYPE_STRING); \
91  content.writeString(value); \
92  Connection::getActive().doCommand(libsumo::CMD_SET_##DOMAIN##_VARIABLE, libsumo::VAR_PARAMETER, objectID, &content); \
93 } \
94 \
95 const std::pair<std::string, std::string> \
96 CLASS::getParameterWithKey(const std::string& objectID, const std::string& key) { \
97  return std::make_pair(key, getParameter(objectID, key)); \
98 }
99 
100 
101 // ===========================================================================
102 // class and type definitions
103 // ===========================================================================
104 namespace libtraci {
105 template<int GET, int SET>
106 class Domain {
107 public:
108  static int getUnsignedByte(int var, const std::string& id, tcpip::Storage* add = nullptr) {
109  return libtraci::Connection::getActive().getUnsignedByte(GET, var, id, add);
110  }
111 
112  static int getByte(int var, const std::string& id, tcpip::Storage* add = nullptr) {
113  return libtraci::Connection::getActive().getByte(GET, var, id, add);
114  }
115 
116  static int getInt(int var, const std::string& id, tcpip::Storage* add = nullptr) {
117  return libtraci::Connection::getActive().getInt(GET, var, id, add);
118  }
119 
120  static double getDouble(int var, const std::string& id, tcpip::Storage* add = nullptr) {
121  return libtraci::Connection::getActive().getDouble(GET, var, id, add);
122  }
123 
124  static libsumo::TraCIPositionVector getPolygon(int var, const std::string& id, tcpip::Storage* add = nullptr) {
125  return libtraci::Connection::getActive().getPolygon(GET, var, id, add);
126  }
127 
128  static libsumo::TraCIPosition getPos(int var, const std::string& id, tcpip::Storage* add = nullptr) {
129  return libtraci::Connection::getActive().getPos(GET, var, id, add);
130  }
131 
132  static libsumo::TraCIPosition getPos3D(int var, const std::string& id, tcpip::Storage* add = nullptr) {
133  return libtraci::Connection::getActive().getPos3D(GET, var, id, add);
134  }
135 
136  static std::string getString(int var, const std::string& id, tcpip::Storage* add = nullptr) {
137  return libtraci::Connection::getActive().getString(GET, var, id, add);
138  }
139 
140  static std::vector<std::string> getStringVector(int var, const std::string& id, tcpip::Storage* add = nullptr) {
141  return libtraci::Connection::getActive().getStringVector(GET, var, id, add);
142  }
143 
144  static libsumo::TraCIColor getCol(int var, const std::string& id, tcpip::Storage* add = nullptr) {
145  return libtraci::Connection::getActive().getCol(GET, var, id, add);
146  }
147 
148  static libsumo::TraCIStage getTraCIStage(int var, const std::string& id, tcpip::Storage* add = nullptr) {
149  return libtraci::Connection::getActive().getTraCIStage(GET, var, id, add);
150  }
151 
152  static void setInt(int var, const std::string& id, int value) {
153  libtraci::Connection::getActive().setInt(SET, var, id, value);
154  }
155 
156  static void setDouble(int var, const std::string& id, double value) {
157  libtraci::Connection::getActive().setDouble(SET, var, id, value);
158  }
159 
160  static void setString(int var, const std::string& id, const std::string& value) {
161  libtraci::Connection::getActive().setString(SET, var, id, value);
162  }
163 
164  static void setStringVector(int var, const std::string& id, const std::vector<std::string>& value) {
165  libtraci::Connection::getActive().setStringVector(SET, var, id, value);
166  }
167 
168  static void setCol(int var, const std::string& id, const libsumo::TraCIColor value) {
169  libtraci::Connection::getActive().setCol(SET, var, id, value);
170  }
171 };
172 
173 }
std::vector< std::string > getStringVector(int command, int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Connection.h:219
void setCol(int command, int var, const std::string &id, const libsumo::TraCIColor c)
Definition: Connection.h:319
int getByte(int command, int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Connection.h:153
void setInt(int command, int var, const std::string &id, int value)
Definition: Connection.h:292
libsumo::TraCIColor getCol(int command, int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Connection.h:231
void setStringVector(int command, int var, const std::string &id, const std::vector< std::string > &value)
Definition: Connection.h:312
libsumo::TraCIStage getTraCIStage(int command, int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Connection.h:243
libsumo::TraCIPosition getPos(int command, int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Connection.h:192
static Connection & getActive()
Definition: Connection.h:53
std::string getString(int command, int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Connection.h:212
libsumo::TraCIPosition getPos3D(int command, int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Connection.h:202
void setString(int command, int var, const std::string &id, const std::string &value)
Definition: Connection.h:305
void setDouble(int command, int var, const std::string &id, double value)
Definition: Connection.h:298
double getDouble(int command, int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Connection.h:167
libsumo::TraCIPositionVector getPolygon(int command, int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Connection.h:174
int getInt(int command, int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Connection.h:160
int getUnsignedByte(int command, int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Connection.h:146
static void setDouble(int var, const std::string &id, double value)
Definition: Domain.h:156
static libsumo::TraCIPosition getPos(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:128
static void setCol(int var, const std::string &id, const libsumo::TraCIColor value)
Definition: Domain.h:168
static int getUnsignedByte(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:108
static void setStringVector(int var, const std::string &id, const std::vector< std::string > &value)
Definition: Domain.h:164
static std::vector< std::string > getStringVector(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:140
static libsumo::TraCIColor getCol(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:144
static std::string getString(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:136
static int getInt(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:116
static libsumo::TraCIStage getTraCIStage(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:148
static libsumo::TraCIPosition getPos3D(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:132
static libsumo::TraCIPositionVector getPolygon(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:124
static double getDouble(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:120
static void setInt(int var, const std::string &id, int value)
Definition: Domain.h:152
static void setString(int var, const std::string &id, const std::string &value)
Definition: Domain.h:160
static int getByte(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:112
std::vector< TraCIPosition > TraCIPositionVector
Definition: TraCIDefs.h:196
A 3D-position.
Definition: TraCIDefs.h:141