LCOV - code coverage report
Current view: top level - src/libsumo - RouteProbe.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 75.0 % 52 39
Test Date: 2024-12-21 15:45:41 Functions: 55.0 % 20 11

            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    RouteProbe.cpp
      15              : /// @author  Jakob Erdmann
      16              : /// @date    16.03.2020
      17              : ///
      18              : // C++ TraCI client API implementation
      19              : /****************************************************************************/
      20              : #include <config.h>
      21              : 
      22              : #include <microsim/MSNet.h>
      23              : #include <microsim/MSEdge.h>
      24              : #include <microsim/MSRoute.h>
      25              : #include <microsim/output/MSDetectorControl.h>
      26              : #include <microsim/output/MSRouteProbe.h>
      27              : #include <libsumo/TraCIConstants.h>
      28              : #include "Helper.h"
      29              : #include "RouteProbe.h"
      30              : 
      31              : 
      32              : namespace libsumo {
      33              : // ===========================================================================
      34              : // static member initializations
      35              : // ===========================================================================
      36              : SubscriptionResults RouteProbe::mySubscriptionResults;
      37              : ContextSubscriptionResults RouteProbe::myContextSubscriptionResults;
      38              : 
      39              : 
      40              : // ===========================================================================
      41              : // static member definitions
      42              : // ===========================================================================
      43              : std::vector<std::string>
      44          209 : RouteProbe::getIDList() {
      45              :     std::vector<std::string> ids;
      46          209 :     MSNet::getInstance()->getDetectorControl().getTypedDetectors(SUMO_TAG_ROUTEPROBE).insertIDs(ids);
      47          207 :     return ids;
      48            2 : }
      49              : 
      50              : 
      51              : int
      52            5 : RouteProbe::getIDCount() {
      53            5 :     return (int)getIDList().size();
      54              : }
      55              : 
      56              : std::string
      57            5 : RouteProbe::getEdgeID(const std::string& probeID) {
      58            5 :     MSRouteProbe* rp = getRouteProbe(probeID);
      59            5 :     return rp->getEdge()->getID();
      60              : }
      61              : 
      62              : std::string
      63         1365 : RouteProbe::sampleLastRouteID(const std::string& probeID) {
      64         1365 :     MSRouteProbe* rp = getRouteProbe(probeID);
      65         1365 :     ConstMSRoutePtr route = rp->sampleRoute(true);
      66         1365 :     if (route == nullptr) {
      67            0 :         throw TraCIException("RouteProbe '" + probeID + "' did not collect any routes yet");
      68              :     }
      69         1365 :     return route->getID();
      70              : }
      71              : 
      72              : std::string
      73         1365 : RouteProbe::sampleCurrentRouteID(const std::string& probeID) {
      74         1365 :     MSRouteProbe* rp = getRouteProbe(probeID);
      75         1365 :     ConstMSRoutePtr route = rp->sampleRoute(false);
      76         1365 :     if (route == nullptr) {
      77         1270 :         throw TraCIException("RouteProbe '" + probeID + "' did not collect any routes yet");
      78              :     }
      79          730 :     return route->getID();
      80              : }
      81              : 
      82              : std::string
      83            0 : RouteProbe::getParameter(const std::string& /* probeID */, const std::string& /* param */) {
      84            0 :     return "";
      85              : }
      86              : 
      87            0 : LIBSUMO_GET_PARAMETER_WITH_KEY_IMPLEMENTATION(RouteProbe)
      88              : 
      89              : void
      90            0 : RouteProbe::setParameter(const std::string& /* probeID */, const std::string& /* key */, const std::string& /* value */) {
      91              :     //MSRouteProbe* rp = getRouteProbe(probeID);
      92              :     //r->setParameter(key, value);
      93            0 : }
      94              : 
      95              : 
      96          252 : LIBSUMO_SUBSCRIPTION_IMPLEMENTATION(RouteProbe, ROUTEPROBE)
      97              : 
      98              : 
      99              : MSRouteProbe*
     100         2735 : RouteProbe::getRouteProbe(const std::string& id) {
     101         5470 :     MSRouteProbe* rp = dynamic_cast<MSRouteProbe*>(MSNet::getInstance()->getDetectorControl().getTypedDetectors(SUMO_TAG_ROUTEPROBE).get(id));
     102         2735 :     if (rp == nullptr) {
     103            0 :         throw TraCIException("Lane area detector '" + id + "' is not known");
     104              :     }
     105         2735 :     return rp;
     106              : }
     107              : 
     108              : 
     109              : std::shared_ptr<VariableWrapper>
     110          264 : RouteProbe::makeWrapper() {
     111          264 :     return std::make_shared<Helper::SubscriptionWrapper>(handleVariable, mySubscriptionResults, myContextSubscriptionResults);
     112              : }
     113              : 
     114              : 
     115              : bool
     116         1746 : RouteProbe::handleVariable(const std::string& objID, const int variable, VariableWrapper* wrapper, tcpip::Storage* paramData) {
     117         1746 :     switch (variable) {
     118          102 :         case TRACI_ID_LIST:
     119          102 :             return wrapper->wrapStringList(objID, variable, getIDList());
     120            3 :         case ID_COUNT:
     121            3 :             return wrapper->wrapInt(objID, variable, getIDCount());
     122            3 :         case VAR_ROAD_ID:
     123            6 :             return wrapper->wrapString(objID, variable, getEdgeID(objID));
     124          819 :         case VAR_SAMPLE_LAST:
     125         1638 :             return wrapper->wrapString(objID, variable, sampleLastRouteID(objID));
     126          819 :         case VAR_SAMPLE_CURRENT:
     127         1257 :             return wrapper->wrapString(objID, variable, sampleCurrentRouteID(objID));
     128            0 :         case libsumo::VAR_PARAMETER:
     129            0 :             paramData->readUnsignedByte();
     130            0 :             return wrapper->wrapString(objID, variable, getParameter(objID, paramData->readString()));
     131            0 :         case libsumo::VAR_PARAMETER_WITH_KEY:
     132            0 :             paramData->readUnsignedByte();
     133            0 :             return wrapper->wrapStringPair(objID, variable, getParameterWithKey(objID, paramData->readString()));
     134              :         default:
     135              :             return false;
     136              :     }
     137              : }
     138              : 
     139              : }
     140              : 
     141              : 
     142              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1