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.org/sumo
3 // Copyright (C) 2001-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 /****************************************************************************/
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>
26 #include <utils/common/SUMOTime.h>
27 
28 
29 // ===========================================================================
30 // class definitions
31 // ===========================================================================
32 namespace libsumo {
33 
37  // No filters
39  // Filter by list of lanes relative to ego vehicle
41  // Exclude vehicles on opposite (and other) lanes from context subscription result
43  // Specify maximal downstream distance for vehicles in context subscription result
45  // Specify maximal upstream distance for vehicles in context subscription result
47  // Only return leader and follower on specified lanes in context subscription result
49  // Only return foes on upcoming junctions in context subscription result
50  SUBS_FILTER_TURN = 1 << 6,
51  // Only return vehicles of the given vClass in context subscription result
53  // Only return vehicles of the given vType in context subscription result
55  // Only return vehicles within field of vision in context subscription result
56  // NOTE: relies on rTree, therefore incompatible with SUBS_FILTER_NO_RTREE
58  // Only return vehicles within the given lateral distance in context subscription result
60  // Filter category for measuring distances along the road network instead of using the usual rtree query
62  // Filter category for maneuver filters
64 };
65 
69 class Subscription {
70 public:
81  Subscription(int commandIdArg, const std::string& idArg,
82  const std::vector<int>& variablesArg,
83  const std::vector<std::shared_ptr<tcpip::Storage> >& paramsArg,
84  SUMOTime beginTimeArg, SUMOTime endTimeArg,
85  int contextDomainArg, double rangeArg)
86  : commandId(commandIdArg),
87  id(idArg),
88  variables(variablesArg),
89  parameters(paramsArg),
90  beginTime(beginTimeArg),
91  endTime(endTimeArg),
92  contextDomain(contextDomainArg),
93  range(rangeArg),
95  filterLanes(),
99  filterVTypes(),
100  filterVClasses(0),
102  filterLateralDist(-1) {}
103 
106  }
107 
110  }
111 
115  std::string id;
117  std::vector<int> variables;
119  std::vector<std::shared_ptr<tcpip::Storage> > parameters;
127  double range;
128 
132  std::vector<int> filterLanes;
140  std::set<std::string> filterVTypes;
147 };
148 
150 public:
152  typedef bool(*SubscriptionHandler)(const std::string& objID, const int variable, VariableWrapper* wrapper, tcpip::Storage* paramData);
153  VariableWrapper(SubscriptionHandler handler = nullptr) : handle(handler) {}
155  virtual void setContext(const std::string& /* refID */) {}
156  virtual void clear() {}
157  virtual bool wrapDouble(const std::string& objID, const int variable, const double value) = 0;
158  virtual bool wrapInt(const std::string& objID, const int variable, const int value) = 0;
159  virtual bool wrapString(const std::string& objID, const int variable, const std::string& value) = 0;
160  virtual bool wrapStringList(const std::string& objID, const int variable, const std::vector<std::string>& value) = 0;
161  virtual bool wrapPosition(const std::string& objID, const int variable, const TraCIPosition& value) = 0;
162  virtual bool wrapPositionVector(const std::string& objID, const int variable, const TraCIPositionVector& value) = 0;
163  virtual bool wrapColor(const std::string& objID, const int variable, const TraCIColor& value) = 0;
164  virtual bool wrapStringDoublePair(const std::string& objID, const int variable, const std::pair<std::string, double>& value) = 0;
165  virtual bool wrapStringPair(const std::string& objID, const int variable, const std::pair<std::string, std::string>& value) = 0;
166 };
167 
168 
169 }
170 
171 
long long int SUMOTime
Definition: SUMOTime.h:32
Representation of a subscription.
Definition: Subscription.h:69
double filterUpstreamDist
Upstream distance specified by the upstream distance filter.
Definition: Subscription.h:136
int commandId
commandIdArg The command id of the subscription
Definition: Subscription.h:113
std::set< std::string > filterVTypes
vTypes specified by the vTypes filter
Definition: Subscription.h:140
double filterFieldOfVisionOpeningAngle
Opening angle (in deg) specified by the field of vision filter.
Definition: Subscription.h:144
std::vector< int > filterLanes
lanes specified by the lanes filter
Definition: Subscription.h:132
std::string id
The id of the object that is subscribed.
Definition: Subscription.h:115
int filterVClasses
vClasses specified by the vClasses filter,
Definition: Subscription.h:142
SUMOTime endTime
The end time of the subscription.
Definition: Subscription.h:123
int contextDomain
The domain ID of the context.
Definition: Subscription.h:125
double filterFoeDistToJunction
Foe distance to junction specified by the turn filter.
Definition: Subscription.h:138
bool isVehicleToVehicleContextSubscription() const
Definition: Subscription.h:104
SUMOTime beginTime
The begin time of the subscription.
Definition: Subscription.h:121
std::vector< int > variables
The subscribed variables.
Definition: Subscription.h:117
bool isVehicleToPersonContextSubscription() const
Definition: Subscription.h:108
double filterDownstreamDist
Downstream distance specified by the downstream distance filter.
Definition: Subscription.h:134
double filterLateralDist
Lateral distance specified by the lateral distance filter.
Definition: Subscription.h:146
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:81
int activeFilters
Active filters for the subscription (bitset,.
Definition: Subscription.h:130
double range
The range of the context.
Definition: Subscription.h:127
std::vector< std::shared_ptr< tcpip::Storage > > parameters
The parameters for the subscribed variables.
Definition: Subscription.h:119
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 wrapStringPair(const std::string &objID, const int variable, const std::pair< std::string, std::string > &value)=0
SubscriptionHandler handle
Definition: Subscription.h:154
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 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:152
virtual void setContext(const std::string &)
Definition: Subscription.h:155
VariableWrapper(SubscriptionHandler handler=nullptr)
Definition: Subscription.h:153
virtual bool wrapColor(const std::string &objID, const int variable, const TraCIColor &value)=0
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:36
@ SUBS_FILTER_LEAD_FOLLOW
Definition: Subscription.h:48
@ SUBS_FILTER_UPSTREAM_DIST
Definition: Subscription.h:46
@ SUBS_FILTER_VTYPE
Definition: Subscription.h:54
@ SUBS_FILTER_NO_RTREE
Definition: Subscription.h:61
@ SUBS_FILTER_LANES
Definition: Subscription.h:40
@ SUBS_FILTER_NOOPPOSITE
Definition: Subscription.h:42
@ SUBS_FILTER_DOWNSTREAM_DIST
Definition: Subscription.h:44
@ SUBS_FILTER_LATERAL_DIST
Definition: Subscription.h:59
@ SUBS_FILTER_TURN
Definition: Subscription.h:50
@ SUBS_FILTER_VCLASS
Definition: Subscription.h:52
@ SUBS_FILTER_NONE
Definition: Subscription.h:38
@ SUBS_FILTER_MANEUVER
Definition: Subscription.h:63
@ SUBS_FILTER_FIELD_OF_VISION
Definition: Subscription.h:57
A 3D-position.
Definition: TraCIDefs.h:164
A list of positions.
Definition: TraCIDefs.h:207