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 /****************************************************************************/
19 // C++ TraCI client API implementation
20 /****************************************************************************/
21 
22 
23 // ===========================================================================
24 // included modules
25 // ===========================================================================
26 #include <config.h>
27 
28 #include <microsim/MSNet.h>
29 #include <microsim/MSEdge.h>
30 #include <microsim/MSRoute.h>
31 #include <libsumo/TraCIConstants.h>
32 #include "Helper.h"
33 #include "Route.h"
34 
35 
36 namespace libsumo {
37 // ===========================================================================
38 // static member initializations
39 // ===========================================================================
42 
43 
44 // ===========================================================================
45 // static member definitions
46 // ===========================================================================
47 std::vector<std::string>
49  std::vector<std::string> ids;
50  MSRoute::insertIDs(ids);
51  return ids;
52 }
53 
54 std::vector<std::string>
55 Route::getEdges(const std::string& routeID) {
56  const MSRoute* r = getRoute(routeID);
57  std::vector<std::string> ids;
58  for (ConstMSEdgeVector::const_iterator i = r->getEdges().begin(); i != r->getEdges().end(); ++i) {
59  ids.push_back((*i)->getID());
60  }
61  return ids;
62 }
63 
64 
65 int
67  return (int)getIDList().size();
68 }
69 
70 
71 std::string
72 Route::getParameter(const std::string& routeID, const std::string& param) {
73  const MSRoute* r = getRoute(routeID);
74  return r->getParameter(param, "");
75 }
76 
77 void
78 Route::setParameter(const std::string& routeID, const std::string& key, const std::string& value) {
79  MSRoute* r = const_cast<MSRoute*>(getRoute(routeID));
80  r->setParameter(key, value);
81 }
82 
83 
84 void
85 Route::add(const std::string& routeID, const std::vector<std::string>& edgeIDs) {
86  ConstMSEdgeVector edges;
87  if (edgeIDs.size() == 0) {
88  throw TraCIException("Cannot add route '" + routeID + "' without edges.");
89  }
90  for (std::vector<std::string>::const_iterator ei = edgeIDs.begin(); ei != edgeIDs.end(); ++ei) {
91  MSEdge* edge = MSEdge::dictionary(*ei);
92  if (edge == nullptr) {
93  throw TraCIException("Unknown edge '" + *ei + "' in route.");
94  }
95  edges.push_back(edge);
96  }
97  const std::vector<SUMOVehicleParameter::Stop> stops;
98  if (!MSRoute::dictionary(routeID, new MSRoute(routeID, edges, true, nullptr, stops))) {
99  throw TraCIException("Could not add route.");
100  }
101 }
102 
103 
105 
106 
107 const MSRoute*
108 Route::getRoute(const std::string& id) {
109  const MSRoute* r = MSRoute::dictionary(id);
110  if (r == nullptr) {
111  throw TraCIException("Route '" + id + "' is not known");
112  }
113  return r;
114 }
115 
116 
117 std::shared_ptr<VariableWrapper>
119  return std::make_shared<Helper::SubscriptionWrapper>(handleVariable, mySubscriptionResults, myContextSubscriptionResults);
120 }
121 
122 
123 bool
124 Route::handleVariable(const std::string& objID, const int variable, VariableWrapper* wrapper) {
125  switch (variable) {
126  case TRACI_ID_LIST:
127  return wrapper->wrapStringList(objID, variable, getIDList());
128  case ID_COUNT:
129  return wrapper->wrapInt(objID, variable, getIDCount());
130  case VAR_EDGES:
131  return wrapper->wrapStringList(objID, variable, getEdges(objID));
132  default:
133  return false;
134  }
135 }
136 
137 
138 }
139 
140 
141 /****************************************************************************/
std::map< std::string, TraCIResults > SubscriptionResults
{object->{variable->value}}
Definition: TraCIDefs.h:204
virtual bool wrapInt(const std::string &objID, const int variable, const int value)=0
const ConstMSEdgeVector & getEdges() const
Definition: MSRoute.h:121
static const MSRoute * getRoute(const std::string &id)
Definition: Route.cpp:108
static void add(const std::string &routeID, const std::vector< std::string > &edgeIDs)
Definition: Route.cpp:85
static bool dictionary(const std::string &id, MSEdge *edge)
Inserts edge into the static dictionary Returns true if the key id isn&#39;t already in the dictionary...
Definition: MSEdge.cpp:804
std::map< std::string, SubscriptionResults > ContextSubscriptionResults
Definition: TraCIDefs.h:205
std::vector< const MSEdge * > ConstMSEdgeVector
Definition: MSEdge.h:73
static void insertIDs(std::vector< std::string > &into)
Definition: MSRoute.cpp:203
TRACI_CONST int TRACI_ID_LIST
A road/street connecting two junctions.
Definition: MSEdge.h:76
TRACI_CONST int ID_COUNT
static bool handleVariable(const std::string &objID, const int variable, VariableWrapper *wrapper)
Definition: Route.cpp:124
TRACI_CONST int VAR_EDGES
void setParameter(const std::string &key, const std::string &value)
Sets a parameter.
#define LIBSUMO_SUBSCRIPTION_IMPLEMENTATION(CLASS, DOMAIN)
Definition: TraCIDefs.h:51
static std::string getParameter(const std::string &routeID, const std::string &param)
Definition: Route.cpp:72
Definition: Edge.cpp:30
static ContextSubscriptionResults myContextSubscriptionResults
Definition: Route.h:71
static LIBSUMO_SUBSCRIPTION_API std::shared_ptr< VariableWrapper > makeWrapper()
Definition: Route.cpp:118
static void setParameter(const std::string &routeID, const std::string &key, const std::string &value)
Definition: Route.cpp:78
const std::string getParameter(const std::string &key, const std::string &defaultValue="") const
Returns the value for a given key.
static SubscriptionResults mySubscriptionResults
Definition: Route.h:70
static std::vector< std::string > getEdges(const std::string &routeID)
Definition: Route.cpp:55
virtual bool wrapStringList(const std::string &objID, const int variable, const std::vector< std::string > &value)=0
static int getIDCount()
Definition: Route.cpp:66
static std::vector< std::string > getIDList()
Definition: Route.cpp:48
static bool dictionary(const std::string &id, const MSRoute *route)
Adds a route to the dictionary.
Definition: MSRoute.cpp:114