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-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 /****************************************************************************/
18 // Subscription representation for libsumo and TraCI
19 /****************************************************************************/
20 #pragma once
21 #include <vector>
22 #include <set>
23 #include <libsumo/TraCIDefs.h>
24 #include <utils/common/SUMOTime.h>
25 
26 
27 // ===========================================================================
28 // class definitions
29 // ===========================================================================
30 namespace libsumo {
31 
35  // No filters
37  // Filter by list of lanes relative to ego vehicle
39  // Exclude vehicles on opposite (and other) lanes from context subscription result
41  // Specify maximal downstream distance for vehicles in context subscription result
43  // Specify maximal upstream distance for vehicles in context subscription result
45  // Only return leader and follower on specified lanes in context subscription result
47  // Only return foes on upcoming junction in context subscription result
48  SUBS_FILTER_TURN = 1 << 6,
49  // Only return vehicles of the given vClass in context subscription result
51  // Only return vehicles of the given vType in context subscription result
53  // Only return vehicles within field of vision in context subscription result
54  // NOTE: relies on rTree, therefore incompatible with SUBS_FILTER_NO_RTREE
56  // Only return vehicles within the given lateral distance in context subscription result
58  // Filter category for measuring distances along the road network instead of using the usual rtree query
60  // Filter category for maneuver filters
62 };
63 
67 class Subscription {
68 public:
79  Subscription(int commandIdArg, const std::string& idArg,
80  const std::vector<int>& variablesArg,
81  const std::vector<std::vector<unsigned char>>& paramsArg,
82  SUMOTime beginTimeArg, SUMOTime endTimeArg,
83  int contextDomainArg, double rangeArg)
84  : commandId(commandIdArg),
85  id(idArg),
86  variables(variablesArg),
87  parameters(paramsArg),
88  beginTime(beginTimeArg),
89  endTime(endTimeArg),
90  contextDomain(contextDomainArg),
91  range(rangeArg),
93  filterLanes(),
96  filterVTypes(),
97  filterVClasses(0),
99  filterLateralDist(-1) {}
100 
103  }
104 
107  }
108 
112  std::string id;
114  std::vector<int> variables;
116  std::vector<std::vector<unsigned char> > parameters;
124  double range;
125 
129  std::vector<int> filterLanes;
135  std::set<std::string> filterVTypes;
142 };
143 
145 public:
147  typedef bool(*SubscriptionHandler)(const std::string& objID, const int variable, VariableWrapper* wrapper);
148  VariableWrapper(SubscriptionHandler handler = nullptr) : handle(handler) {}
150  virtual void setContext(const std::string& /* refID */) {}
151  virtual void setParams(const std::vector<unsigned char>* /* params */) {}
152  virtual const std::vector<unsigned char>* getParams() const {
153  return nullptr;
154  }
155  virtual void clear() {}
156  virtual bool wrapDouble(const std::string& objID, const int variable, const double value) = 0;
157  virtual bool wrapInt(const std::string& objID, const int variable, const int value) = 0;
158  virtual bool wrapString(const std::string& objID, const int variable, const std::string& value) = 0;
159  virtual bool wrapStringList(const std::string& objID, const int variable, const std::vector<std::string>& value) = 0;
160  virtual bool wrapPosition(const std::string& objID, const int variable, const TraCIPosition& value) = 0;
161  virtual bool wrapColor(const std::string& objID, const int variable, const TraCIColor& value) = 0;
162  virtual bool wrapRoadPosition(const std::string& objID, const int variable, const TraCIRoadPosition& value) = 0;
163 };
164 }
165 
166 
long long int SUMOTime
Definition: SUMOTime.h:31
Representation of a subscription.
Definition: Subscription.h:67
double filterUpstreamDist
Upstream distance specified by the upstream distance filter.
Definition: Subscription.h:133
int commandId
commandIdArg The command id of the subscription
Definition: Subscription.h:110
std::set< std::string > filterVTypes
vTypes specified by the vTypes filter
Definition: Subscription.h:135
double filterFieldOfVisionOpeningAngle
Opening angle (in deg) specified by the field of vision filter.
Definition: Subscription.h:139
std::vector< int > filterLanes
lanes specified by the lanes filter
Definition: Subscription.h:129
std::string id
The id of the object that is subscribed.
Definition: Subscription.h:112
int filterVClasses
vClasses specified by the vClasses filter,
Definition: Subscription.h:137
SUMOTime endTime
The end time of the subscription.
Definition: Subscription.h:120
int contextDomain
The domain ID of the context.
Definition: Subscription.h:122
Subscription(int commandIdArg, const std::string &idArg, const std::vector< int > &variablesArg, const std::vector< std::vector< unsigned char >> &paramsArg, SUMOTime beginTimeArg, SUMOTime endTimeArg, int contextDomainArg, double rangeArg)
Constructor.
Definition: Subscription.h:79
bool isVehicleToVehicleContextSubscription() const
Definition: Subscription.h:101
SUMOTime beginTime
The begin time of the subscription.
Definition: Subscription.h:118
std::vector< int > variables
The subscribed variables.
Definition: Subscription.h:114
bool isVehicleToPersonContextSubscription() const
Definition: Subscription.h:105
double filterDownstreamDist
Downstream distance specified by the downstream distance filter.
Definition: Subscription.h:131
double filterLateralDist
Lateral distance specified by the lateral distance filter.
Definition: Subscription.h:141
std::vector< std::vector< unsigned char > > parameters
The parameters for the subscribed variables.
Definition: Subscription.h:116
int activeFilters
Active filters for the subscription (bitset,.
Definition: Subscription.h:127
double range
The range of the context.
Definition: Subscription.h:124
virtual bool wrapRoadPosition(const std::string &objID, const int variable, const TraCIRoadPosition &value)=0
virtual void setParams(const std::vector< unsigned char > *)
Definition: Subscription.h:151
virtual bool wrapStringList(const std::string &objID, const int variable, const std::vector< std::string > &value)=0
virtual bool wrapString(const std::string &objID, const int variable, const std::string &value)=0
SubscriptionHandler handle
Definition: Subscription.h:149
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 wrapDouble(const std::string &objID, const int variable, const double value)=0
bool(* SubscriptionHandler)(const std::string &objID, const int variable, VariableWrapper *wrapper)
Definition of a method to be called for serving an associated commandID.
Definition: Subscription.h:147
virtual void setContext(const std::string &)
Definition: Subscription.h:150
VariableWrapper(SubscriptionHandler handler=nullptr)
Definition: Subscription.h:148
virtual const std::vector< unsigned char > * getParams() const
Definition: Subscription.h:152
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:34
@ SUBS_FILTER_LEAD_FOLLOW
Definition: Subscription.h:46
@ SUBS_FILTER_UPSTREAM_DIST
Definition: Subscription.h:44
@ SUBS_FILTER_VTYPE
Definition: Subscription.h:52
@ SUBS_FILTER_NO_RTREE
Definition: Subscription.h:59
@ SUBS_FILTER_LANES
Definition: Subscription.h:38
@ SUBS_FILTER_NOOPPOSITE
Definition: Subscription.h:40
@ SUBS_FILTER_DOWNSTREAM_DIST
Definition: Subscription.h:42
@ SUBS_FILTER_LATERAL_DIST
Definition: Subscription.h:57
@ SUBS_FILTER_TURN
Definition: Subscription.h:48
@ SUBS_FILTER_VCLASS
Definition: Subscription.h:50
@ SUBS_FILTER_NONE
Definition: Subscription.h:36
@ SUBS_FILTER_MANEUVER
Definition: Subscription.h:61
@ SUBS_FILTER_FIELD_OF_VISION
Definition: Subscription.h:55
A 3D-position.
Definition: TraCIDefs.h:141
An edgeId, position and laneIndex.
Definition: TraCIDefs.h:153