LCOV - code coverage report
Current view: top level - src/libsumo - Route.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 94.5 % 55 52
Test Date: 2024-11-21 15:56:26 Functions: 84.2 % 19 16

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2017-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              : /****************************************************************************/
      14              : /// @file    Route.cpp
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Mario Krumnow
      17              : /// @author  Jakob Erdmann
      18              : /// @author  Michael Behrisch
      19              : /// @author  Robert Hilbrich
      20              : /// @date    30.05.2012
      21              : ///
      22              : // C++ TraCI client API implementation
      23              : /****************************************************************************/
      24              : #include <config.h>
      25              : 
      26              : #include <microsim/MSNet.h>
      27              : #include <microsim/MSEdge.h>
      28              : #include <microsim/MSRoute.h>
      29              : #include <libsumo/TraCIConstants.h>
      30              : #include "Helper.h"
      31              : #include "Route.h"
      32              : 
      33              : 
      34              : namespace libsumo {
      35              : // ===========================================================================
      36              : // static member initializations
      37              : // ===========================================================================
      38              : SubscriptionResults Route::mySubscriptionResults;
      39              : ContextSubscriptionResults Route::myContextSubscriptionResults;
      40              : 
      41              : 
      42              : // ===========================================================================
      43              : // static member definitions
      44              : // ===========================================================================
      45              : std::vector<std::string>
      46          262 : Route::getIDList() {
      47          262 :     MSNet::getInstance(); // just to check that we actually have a network
      48              :     std::vector<std::string> ids;
      49          260 :     MSRoute::insertIDs(ids);
      50          260 :     return ids;
      51            0 : }
      52              : 
      53              : std::vector<std::string>
      54           27 : Route::getEdges(const std::string& routeID) {
      55           27 :     ConstMSRoutePtr r = getRoute(routeID);
      56              :     std::vector<std::string> ids;
      57          151 :     for (ConstMSEdgeVector::const_iterator i = r->getEdges().begin(); i != r->getEdges().end(); ++i) {
      58          126 :         ids.push_back((*i)->getID());
      59              :     }
      60           25 :     return ids;
      61            0 : }
      62              : 
      63              : 
      64              : int
      65           11 : Route::getIDCount() {
      66           11 :     return (int)getIDList().size();
      67              : }
      68              : 
      69              : 
      70              : std::string
      71           89 : Route::getParameter(const std::string& routeID, const std::string& param) {
      72           89 :     ConstMSRoutePtr r = getRoute(routeID);
      73          267 :     return r->getParameter(param, "");
      74              : }
      75              : 
      76              : 
      77           46 : LIBSUMO_GET_PARAMETER_WITH_KEY_IMPLEMENTATION(Route)
      78              : 
      79              : 
      80              : void
      81           54 : Route::setParameter(const std::string& routeID, const std::string& key, const std::string& value) {
      82           54 :     MSRoute* r = const_cast<MSRoute*>(getRoute(routeID).get());
      83           54 :     r->setParameter(key, value);
      84           54 : }
      85              : 
      86              : 
      87              : void
      88          220 : Route::add(const std::string& routeID, const std::vector<std::string>& edgeIDs) {
      89              :     ConstMSEdgeVector edges;
      90          220 :     if (edgeIDs.size() == 0) {
      91           10 :         throw TraCIException("Cannot add route '" + routeID + "' without edges.");
      92              :     }
      93          529 :     for (std::vector<std::string>::const_iterator ei = edgeIDs.begin(); ei != edgeIDs.end(); ++ei) {
      94          314 :         MSEdge* edge = MSEdge::dictionary(*ei);
      95          314 :         if (edge == nullptr) {
      96            0 :             throw TraCIException("Unknown edge '" + *ei + "' in route.");
      97              :         }
      98          314 :         edges.push_back(edge);
      99              :     }
     100              :     const std::vector<SUMOVehicleParameter::Stop> stops;
     101          215 :     ConstMSRoutePtr route = std::make_shared<MSRoute>(routeID, edges, true, nullptr, stops);
     102          435 :     if (!MSRoute::dictionary(routeID, route)) {
     103           10 :         throw TraCIException("Could not add route '" + routeID + "'.");
     104              :     }
     105          225 : }
     106              : 
     107              : 
     108          270 : LIBSUMO_SUBSCRIPTION_IMPLEMENTATION(Route, ROUTE)
     109              : 
     110              : 
     111              : ConstMSRoutePtr
     112          170 : Route::getRoute(const std::string& id) {
     113          170 :     ConstMSRoutePtr r = MSRoute::dictionary(id);
     114          170 :     if (r == nullptr) {
     115            4 :         throw TraCIException("Route '" + id + "' is not known");
     116              :     }
     117          168 :     return r;
     118              : }
     119              : 
     120              : 
     121              : std::shared_ptr<VariableWrapper>
     122          266 : Route::makeWrapper() {
     123          266 :     return std::make_shared<Helper::SubscriptionWrapper>(handleVariable, mySubscriptionResults, myContextSubscriptionResults);
     124              : }
     125              : 
     126              : 
     127              : bool
     128          252 : Route::handleVariable(const std::string& objID, const int variable, VariableWrapper* wrapper, tcpip::Storage* paramData) {
     129          252 :     switch (variable) {
     130          147 :         case TRACI_ID_LIST:
     131          147 :             return wrapper->wrapStringList(objID, variable, getIDList());
     132            9 :         case ID_COUNT:
     133            9 :             return wrapper->wrapInt(objID, variable, getIDCount());
     134           21 :         case VAR_EDGES:
     135           21 :             return wrapper->wrapStringList(objID, variable, getEdges(objID));
     136           46 :         case libsumo::VAR_PARAMETER:
     137           46 :             paramData->readUnsignedByte();
     138           92 :             return wrapper->wrapString(objID, variable, getParameter(objID, paramData->readString()));
     139           19 :         case libsumo::VAR_PARAMETER_WITH_KEY:
     140           19 :             paramData->readUnsignedByte();
     141           38 :             return wrapper->wrapStringPair(objID, variable, getParameterWithKey(objID, paramData->readString()));
     142              :         default:
     143              :             return false;
     144              :     }
     145              : }
     146              : }
     147              : 
     148              : 
     149              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1