Eclipse SUMO - Simulation of Urban MObility
Subscription.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2001-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 // Subscription representation for libsumo and TraCI
19 /****************************************************************************/
20 #pragma once
21 #include <config.h>
22 #include <vector>
23 #include <set>
24 #include <foreign/tcpip/storage.h>
25 #include <libsumo/TraCIDefs.h>
27 #include <utils/common/SUMOTime.h>
28 
29 
30 // ===========================================================================
31 // class definitions
32 // ===========================================================================
33 namespace libsumo {
34 
38  // No filters
40  // Filter by list of lanes relative to ego vehicle
42  // Exclude vehicles on opposite (and other) lanes from context subscription result
44  // Specify maximal downstream distance for vehicles in context subscription result
46  // Specify maximal upstream distance for vehicles in context subscription result
48  // Only return leader and follower on specified lanes in context subscription result
50  // Only return foes on upcoming junctions in context subscription result
51  SUBS_FILTER_TURN = 1 << 6,
52  // Only return vehicles of the given vClass in context subscription result
54  // Only return vehicles of the given vType in context subscription result
56  // Only return vehicles within field of vision in context subscription result
57  // NOTE: relies on rTree, therefore incompatible with SUBS_FILTER_NO_RTREE
59  // Only return vehicles within the given lateral distance in context subscription result
61  // Filter category for measuring distances along the road network instead of using the usual rtree query
63  // Filter category for maneuver filters
65 };
66 
70 class Subscription {
71 public:
82  Subscription(int commandIdArg, const std::string& idArg,
83  const std::vector<int>& variablesArg,
84  const std::vector<std::shared_ptr<tcpip::Storage> >& paramsArg,
85  SUMOTime beginTimeArg, SUMOTime endTimeArg,
86  int contextDomainArg, double rangeArg)
87  : commandId(commandIdArg),
88  id(idArg),
89  variables(variablesArg),
90  parameters(paramsArg),
91  beginTime(beginTimeArg),
92  endTime(endTimeArg),
93  contextDomain(contextDomainArg),
94  range(rangeArg),
96  filterLanes(),
100  filterVTypes(),
101  filterVClasses(0),
103  filterLateralDist(-1) {}
104 
107  }
108 
111  }
112 
116  std::string id;
118  std::vector<int> variables;
120  std::vector<std::shared_ptr<tcpip::Storage> > parameters;
128  double range;
129 
133  std::vector<int> filterLanes;
141  std::set<std::string> filterVTypes;
148 };
149 
151 public:
153  typedef bool(*SubscriptionHandler)(const std::string& objID, const int variable, VariableWrapper* wrapper, tcpip::Storage* paramData);
154  VariableWrapper(SubscriptionHandler handler = nullptr) : handle(handler) {}
155  virtual ~VariableWrapper() {}
157  virtual void setContext(const std::string* const /* refID */) {}
158  virtual void clear() {}
159  virtual bool wrapDouble(const std::string& objID, const int variable, const double value) = 0;
160  virtual bool wrapInt(const std::string& objID, const int variable, const int value) = 0;
161  virtual bool wrapString(const std::string& objID, const int variable, const std::string& value) = 0;
162  virtual bool wrapStringList(const std::string& objID, const int variable, const std::vector<std::string>& value) = 0;
163  virtual bool wrapDoubleList(const std::string& objID, const int variable, const std::vector<double>& value) = 0;
164  virtual bool wrapPosition(const std::string& objID, const int variable, const TraCIPosition& value) = 0;
165  virtual bool wrapPositionVector(const std::string& objID, const int variable, const TraCIPositionVector& value) = 0;
166  virtual bool wrapColor(const std::string& objID, const int variable, const TraCIColor& value) = 0;
167  virtual bool wrapStringDoublePair(const std::string& objID, const int variable, const std::pair<std::string, double>& value) = 0;
168  virtual bool wrapStringPair(const std::string& objID, const int variable, const std::pair<std::string, std::string>& value) = 0;
169  virtual void empty(const std::string& /* objID */) {}
170 };
171 
172 
173 }
long long int SUMOTime
Definition: GUI.h:35
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
Representation of a subscription.
Definition: Subscription.h:70
double filterUpstreamDist
Upstream distance specified by the upstream distance filter.
Definition: Subscription.h:137
int commandId
commandIdArg The command id of the subscription
Definition: Subscription.h:114
std::set< std::string > filterVTypes
vTypes specified by the vTypes filter
Definition: Subscription.h:141
double filterFieldOfVisionOpeningAngle
Opening angle (in deg) specified by the field of vision filter.
Definition: Subscription.h:145
std::vector< int > filterLanes
lanes specified by the lanes filter
Definition: Subscription.h:133
std::string id
The id of the object that is subscribed.
Definition: Subscription.h:116
SUMOTime endTime
The end time of the subscription.
Definition: Subscription.h:124
int contextDomain
The domain ID of the context.
Definition: Subscription.h:126
double filterFoeDistToJunction
Foe distance to junction specified by the turn filter.
Definition: Subscription.h:139
bool isVehicleToVehicleContextSubscription() const
Definition: Subscription.h:105
SUMOTime beginTime
The begin time of the subscription.
Definition: Subscription.h:122
std::vector< int > variables
The subscribed variables.
Definition: Subscription.h:118
SVCPermissions filterVClasses
vClasses specified by the vClasses filter,
Definition: Subscription.h:143
bool isVehicleToPersonContextSubscription() const
Definition: Subscription.h:109
double filterDownstreamDist
Downstream distance specified by the downstream distance filter.
Definition: Subscription.h:135
double filterLateralDist
Lateral distance specified by the lateral distance filter.
Definition: Subscription.h:147
Subscription(int commandIdArg, const std::string &idArg, const std::vector< int > &variablesArg, const std::vector< std::shared_ptr< tcpip::Storage > > &paramsArg, SUMOTime beginTimeArg, SUMOTime endTimeArg, int contextDomainArg, double rangeArg)
Constructor.
Definition: Subscription.h:82
int activeFilters
Active filters for the subscription (bitset,.
Definition: Subscription.h:131
double range
The range of the context.
Definition: Subscription.h:128
std::vector< std::shared_ptr< tcpip::Storage > > parameters
The parameters for the subscribed variables.
Definition: Subscription.h:120
virtual bool wrapStringList(const std::string &objID, const int variable, const std::vector< std::string > &value)=0
virtual bool wrapStringDoublePair(const std::string &objID, const int variable, const std::pair< std::string, double > &value)=0
virtual bool wrapString(const std::string &objID, const int variable, const std::string &value)=0
virtual bool wrapDoubleList(const std::string &objID, const int variable, const std::vector< double > &value)=0
virtual bool wrapStringPair(const std::string &objID, const int variable, const std::pair< std::string, std::string > &value)=0
SubscriptionHandler handle
Definition: Subscription.h:156
virtual bool wrapInt(const std::string &objID, const int variable, const int value)=0
virtual bool wrapPosition(const std::string &objID, const int variable, const TraCIPosition &value)=0
virtual void empty(const std::string &)
Definition: Subscription.h:169
virtual bool wrapPositionVector(const std::string &objID, const int variable, const TraCIPositionVector &value)=0
virtual bool wrapDouble(const std::string &objID, const int variable, const double value)=0
bool(* SubscriptionHandler)(const std::string &objID, const int variable, VariableWrapper *wrapper, tcpip::Storage *paramData)
Definition of a method to be called for serving an associated commandID.
Definition: Subscription.h:153
VariableWrapper(SubscriptionHandler handler=nullptr)
Definition: Subscription.h:154
virtual bool wrapColor(const std::string &objID, const int variable, const TraCIColor &value)=0
virtual void setContext(const std::string *const)
Definition: Subscription.h:157
TRACI_CONST int CMD_SUBSCRIBE_VEHICLE_CONTEXT
TRACI_CONST int CMD_GET_VEHICLE_VARIABLE
TRACI_CONST int CMD_GET_PERSON_VARIABLE
SubscriptionFilterType
Filter types for context subscriptions.
Definition: Subscription.h:37
@ SUBS_FILTER_LEAD_FOLLOW
Definition: Subscription.h:49
@ SUBS_FILTER_UPSTREAM_DIST
Definition: Subscription.h:47
@ SUBS_FILTER_VTYPE
Definition: Subscription.h:55
@ SUBS_FILTER_NO_RTREE
Definition: Subscription.h:62
@ SUBS_FILTER_LANES
Definition: Subscription.h:41
@ SUBS_FILTER_NOOPPOSITE
Definition: Subscription.h:43
@ SUBS_FILTER_DOWNSTREAM_DIST
Definition: Subscription.h:45
@ SUBS_FILTER_LATERAL_DIST
Definition: Subscription.h:60
@ SUBS_FILTER_TURN
Definition: Subscription.h:51
@ SUBS_FILTER_VCLASS
Definition: Subscription.h:53
@ SUBS_FILTER_NONE
Definition: Subscription.h:39
@ SUBS_FILTER_MANEUVER
Definition: Subscription.h:64
@ SUBS_FILTER_FIELD_OF_VISION
Definition: Subscription.h:58
A 2D or 3D-position, for 2D positions z == INVALID_DOUBLE_VALUE.
Definition: TraCIDefs.h:178
A list of positions.
Definition: TraCIDefs.h:234