Eclipse SUMO - Simulation of Urban MObility
Route.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2017-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
18 // C++ TraCI client API implementation
19 /****************************************************************************/
20 
21 
22 // ===========================================================================
23 // included modules
24 // ===========================================================================
25 #include <config.h>
26 
27 #include <microsim/MSNet.h>
28 #include <microsim/MSEdge.h>
29 #include <microsim/MSRoute.h>
30 #include <libsumo/TraCIConstants.h>
31 #include "Helper.h"
32 #include "Route.h"
33 
34 
35 namespace libsumo {
36 // ===========================================================================
37 // static member initializations
38 // ===========================================================================
41 
42 
43 // ===========================================================================
44 // static member definitions
45 // ===========================================================================
46 std::vector<std::string>
48  std::vector<std::string> ids;
49  MSRoute::insertIDs(ids);
50  return ids;
51 }
52 
53 std::vector<std::string>
54 Route::getEdges(const std::string& routeID) {
55  const MSRoute* r = getRoute(routeID);
56  std::vector<std::string> ids;
57  for (ConstMSEdgeVector::const_iterator i = r->getEdges().begin(); i != r->getEdges().end(); ++i) {
58  ids.push_back((*i)->getID());
59  }
60  return ids;
61 }
62 
63 
64 int
66  return (int)getIDList().size();
67 }
68 
69 
70 std::string
71 Route::getParameter(const std::string& routeID, const std::string& param) {
72  const MSRoute* r = getRoute(routeID);
73  return r->getParameter(param, "");
74 }
75 
76 void
77 Route::setParameter(const std::string& routeID, const std::string& key, const std::string& value) {
78  MSRoute* r = const_cast<MSRoute*>(getRoute(routeID));
79  r->setParameter(key, value);
80 }
81 
82 
83 void
84 Route::add(const std::string& routeID, const std::vector<std::string>& edgeIDs) {
85  ConstMSEdgeVector edges;
86  if (edgeIDs.size() == 0) {
87  throw TraCIException("Cannot add route '" + routeID + "' without edges.");
88  }
89  for (std::vector<std::string>::const_iterator ei = edgeIDs.begin(); ei != edgeIDs.end(); ++ei) {
90  MSEdge* edge = MSEdge::dictionary(*ei);
91  if (edge == nullptr) {
92  throw TraCIException("Unknown edge '" + *ei + "' in route.");
93  }
94  edges.push_back(edge);
95  }
96  const std::vector<SUMOVehicleParameter::Stop> stops;
97  if (!MSRoute::dictionary(routeID, new MSRoute(routeID, edges, true, nullptr, stops))) {
98  throw TraCIException("Could not add route.");
99  }
100 }
101 
102 
104 
105 
106 const MSRoute*
107 Route::getRoute(const std::string& id) {
108  const MSRoute* r = MSRoute::dictionary(id);
109  if (r == nullptr) {
110  throw TraCIException("Route '" + id + "' is not known");
111  }
112  return r;
113 }
114 
115 
116 std::shared_ptr<VariableWrapper>
118  return std::make_shared<Helper::SubscriptionWrapper>(handleVariable, mySubscriptionResults, myContextSubscriptionResults);
119 }
120 
121 
122 bool
123 Route::handleVariable(const std::string& objID, const int variable, VariableWrapper* wrapper) {
124  switch (variable) {
125  case TRACI_ID_LIST:
126  return wrapper->wrapStringList(objID, variable, getIDList());
127  case ID_COUNT:
128  return wrapper->wrapInt(objID, variable, getIDCount());
129  case VAR_EDGES:
130  return wrapper->wrapStringList(objID, variable, getEdges(objID));
131  default:
132  return false;
133  }
134 }
135 
136 
137 }
138 
139 
140 /****************************************************************************/
MSNet.h
libsumo::Route::handleVariable
static bool handleVariable(const std::string &objID, const int variable, VariableWrapper *wrapper)
Definition: Route.cpp:123
libsumo::Route::myContextSubscriptionResults
static ContextSubscriptionResults myContextSubscriptionResults
Definition: Route.h:70
libsumo::VariableWrapper
Definition: Subscription.h:132
libsumo::Route::makeWrapper
static LIBSUMO_SUBSCRIPTION_API std::shared_ptr< VariableWrapper > makeWrapper()
Definition: Route.cpp:117
ConstMSEdgeVector
std::vector< const MSEdge * > ConstMSEdgeVector
Definition: MSEdge.h:75
libsumo::ContextSubscriptionResults
std::map< std::string, SubscriptionResults > ContextSubscriptionResults
Definition: TraCIDefs.h:204
MSRoute::getEdges
const ConstMSEdgeVector & getEdges() const
Definition: MSRoute.h:120
MSEdge.h
MSRoute
Definition: MSRoute.h:66
MSRoute::insertIDs
static void insertIDs(std::vector< std::string > &into)
Definition: MSRoute.cpp:202
Parameterised::getParameter
const std::string getParameter(const std::string &key, const std::string &defaultValue="") const
Returns the value for a given key.
Definition: Parameterised.cpp:72
libsumo::Route::getEdges
static std::vector< std::string > getEdges(const std::string &routeID)
Definition: Route.cpp:54
libsumo
Definition: Edge.cpp:29
libsumo::Route::add
static void add(const std::string &routeID, const std::vector< std::string > &edgeIDs)
Definition: Route.cpp:84
libsumo::Route::mySubscriptionResults
static SubscriptionResults mySubscriptionResults
Definition: Route.h:69
TraCIConstants.h
libsumo::Route::getIDList
static std::vector< std::string > getIDList()
Definition: Route.cpp:47
libsumo::VariableWrapper::wrapStringList
virtual bool wrapStringList(const std::string &objID, const int variable, const std::vector< std::string > &value)=0
MSEdge::dictionary
static bool dictionary(const std::string &id, MSEdge *edge)
Inserts edge into the static dictionary Returns true if the key id isn't already in the dictionary....
Definition: MSEdge.cpp:765
libsumo::Route::setParameter
static void setParameter(const std::string &routeID, const std::string &key, const std::string &value)
Definition: Route.cpp:77
libsumo::Route::getIDCount
static int getIDCount()
Definition: Route.cpp:65
Helper.h
libsumo::TRACI_ID_LIST
TRACI_CONST int TRACI_ID_LIST
Definition: TraCIConstants.h:498
MSEdge
A road/street connecting two junctions.
Definition: MSEdge.h:78
Route.h
LIBSUMO_SUBSCRIPTION_IMPLEMENTATION
#define LIBSUMO_SUBSCRIPTION_IMPLEMENTATION(CLASS, DOMAIN)
Definition: TraCIDefs.h:50
libsumo::ID_COUNT
TRACI_CONST int ID_COUNT
Definition: TraCIConstants.h:501
libsumo::TraCIException
Definition: TraCIDefs.h:89
libsumo::Route
Definition: Route.h:48
libsumo::VAR_EDGES
TRACI_CONST int VAR_EDGES
Definition: TraCIConstants.h:687
libsumo::VariableWrapper::wrapInt
virtual bool wrapInt(const std::string &objID, const int variable, const int value)=0
MSRoute.h
Parameterised::setParameter
void setParameter(const std::string &key, const std::string &value)
Sets a parameter.
Definition: Parameterised.cpp:46
MSRoute::dictionary
static bool dictionary(const std::string &id, const MSRoute *route)
Adds a route to the dictionary.
Definition: MSRoute.cpp:113
config.h
libsumo::Route::getRoute
static const MSRoute * getRoute(const std::string &id)
Definition: Route.cpp:107
libsumo::Route::getParameter
static std::string getParameter(const std::string &routeID, const std::string &param)
Definition: Route.cpp:71
libsumo::SubscriptionResults
std::map< std::string, TraCIResults > SubscriptionResults
{object->{variable->value}}
Definition: TraCIDefs.h:203