LCOV - code coverage report
Current view: top level - src/libtraci - InductionLoop.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 98.3 % 60 59
Test Date: 2024-12-21 15:45:41 Functions: 84.4 % 32 27

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2012-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    InductionLoop.cpp
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Mario Krumnow
      17              : /// @author  Jakob Erdmann
      18              : /// @author  Michael Behrisch
      19              : /// @date    30.05.2012
      20              : ///
      21              : // C++ TraCI client API implementation
      22              : /****************************************************************************/
      23              : #include <config.h>
      24              : 
      25              : #define LIBTRACI 1
      26              : #include <libsumo/InductionLoop.h>
      27              : #include "Domain.h"
      28              : 
      29              : 
      30              : namespace libtraci {
      31              : 
      32              : typedef Domain<libsumo::CMD_GET_INDUCTIONLOOP_VARIABLE, libsumo::CMD_SET_INDUCTIONLOOP_VARIABLE> Dom;
      33              : 
      34              : 
      35              : // ===========================================================================
      36              : // member definitions
      37              : // ===========================================================================
      38              : std::vector<std::string>
      39           71 : InductionLoop::getIDList() {
      40          141 :     return Dom::getStringVector(libsumo::TRACI_ID_LIST, "");
      41              : }
      42              : 
      43              : 
      44              : int
      45            4 : InductionLoop::getIDCount() {
      46            8 :     return Dom::getInt(libsumo::ID_COUNT, "");
      47              : }
      48              : 
      49              : 
      50              : double
      51            4 : InductionLoop::getPosition(const std::string& loopID) {
      52            4 :     return Dom::getDouble(libsumo::VAR_POSITION, loopID);
      53              : }
      54              : 
      55              : 
      56              : std::string
      57            4 : InductionLoop::getLaneID(const std::string& loopID) {
      58            4 :     return Dom::getString(libsumo::VAR_LANE_ID, loopID);
      59              : }
      60              : 
      61              : 
      62              : int
      63          204 : InductionLoop::getLastStepVehicleNumber(const std::string& loopID) {
      64          204 :     return Dom::getInt(libsumo::LAST_STEP_VEHICLE_NUMBER, loopID);
      65              : }
      66              : 
      67              : 
      68              : double
      69           22 : InductionLoop::getLastStepMeanSpeed(const std::string& loopID) {
      70           22 :     return Dom::getDouble(libsumo::LAST_STEP_MEAN_SPEED, loopID);
      71              : }
      72              : 
      73              : 
      74              : std::vector<std::string>
      75          228 : InductionLoop::getLastStepVehicleIDs(const std::string& loopID) {
      76          228 :     return Dom::getStringVector(libsumo::LAST_STEP_VEHICLE_ID_LIST, loopID);
      77              : }
      78              : 
      79              : 
      80              : double
      81          164 : InductionLoop::getLastStepOccupancy(const std::string& loopID) {
      82          164 :     return Dom::getDouble(libsumo::LAST_STEP_OCCUPANCY, loopID);
      83              : }
      84              : 
      85              : 
      86              : double
      87           22 : InductionLoop::getLastStepMeanLength(const std::string& loopID) {
      88           22 :     return Dom::getDouble(libsumo::LAST_STEP_LENGTH, loopID);
      89              : }
      90              : 
      91              : 
      92              : double
      93           22 : InductionLoop::getTimeSinceDetection(const std::string& loopID) {
      94           22 :     return Dom::getDouble(libsumo::LAST_STEP_TIME_SINCE_DETECTION, loopID);
      95              : }
      96              : 
      97              : 
      98              : std::vector<libsumo::TraCIVehicleData>
      99        17424 : InductionLoop::getVehicleData(const std::string& loopID) {
     100        17424 :     std::unique_lock<std::mutex> lock{ libtraci::Connection::getActive().getMutex() };
     101              :     std::vector<libsumo::TraCIVehicleData> result;
     102              :     tcpip::Storage& ret = Dom::get(libsumo::LAST_STEP_VEHICLE_DATA, loopID);
     103        17424 :     ret.readInt();  // components
     104              :     // number of items
     105        17424 :     ret.readUnsignedByte();
     106        17424 :     const int n = ret.readInt();
     107        19562 :     for (int i = 0; i < n; ++i) {
     108              :         libsumo::TraCIVehicleData vd;
     109              : 
     110         2138 :         ret.readUnsignedByte();
     111         2138 :         vd.id = ret.readString();
     112              : 
     113         2138 :         ret.readUnsignedByte();
     114         2138 :         vd.length = ret.readDouble();
     115              : 
     116         2138 :         ret.readUnsignedByte();
     117         2138 :         vd.entryTime = ret.readDouble();
     118              : 
     119         2138 :         ret.readUnsignedByte();
     120         2138 :         vd.leaveTime = ret.readDouble();
     121              : 
     122         2138 :         ret.readUnsignedByte();
     123         2138 :         vd.typeID = ret.readString();
     124              : 
     125         2138 :         result.push_back(vd);
     126              :     }
     127        17424 :     return result;
     128            0 : }
     129              : 
     130              : 
     131              : double
     132          120 : InductionLoop::getIntervalOccupancy(const std::string& loopID) {
     133          120 :     return Dom::getDouble(libsumo::VAR_INTERVAL_OCCUPANCY, loopID);
     134              : }
     135              : 
     136              : 
     137              : double
     138          120 : InductionLoop::getIntervalMeanSpeed(const std::string& loopID) {
     139          120 :     return Dom::getDouble(libsumo::VAR_INTERVAL_SPEED, loopID);
     140              : }
     141              : 
     142              : 
     143              : int
     144          120 : InductionLoop::getIntervalVehicleNumber(const std::string& loopID) {
     145          120 :     return Dom::getInt(libsumo::VAR_INTERVAL_NUMBER, loopID);
     146              : }
     147              : 
     148              : 
     149              : std::vector<std::string>
     150          120 : InductionLoop::getIntervalVehicleIDs(const std::string& loopID) {
     151          120 :     return Dom::getStringVector(libsumo::VAR_INTERVAL_IDS, loopID);
     152              : }
     153              : 
     154              : 
     155              : double
     156          120 : InductionLoop::getLastIntervalOccupancy(const std::string& loopID) {
     157          120 :     return Dom::getDouble(libsumo::VAR_LAST_INTERVAL_OCCUPANCY, loopID);
     158              : }
     159              : 
     160              : 
     161              : double
     162          120 : InductionLoop::getLastIntervalMeanSpeed(const std::string& loopID) {
     163          120 :     return Dom::getDouble(libsumo::VAR_LAST_INTERVAL_SPEED, loopID);
     164              : }
     165              : 
     166              : 
     167              : int
     168          120 : InductionLoop::getLastIntervalVehicleNumber(const std::string& loopID) {
     169          120 :     return Dom::getInt(libsumo::VAR_LAST_INTERVAL_NUMBER, loopID);
     170              : }
     171              : 
     172              : 
     173              : std::vector<std::string>
     174          120 : InductionLoop::getLastIntervalVehicleIDs(const std::string& loopID) {
     175          120 :     return Dom::getStringVector(libsumo::VAR_LAST_INTERVAL_IDS, loopID);
     176              : }
     177              : 
     178              : 
     179              : void
     180            5 : InductionLoop::overrideTimeSinceDetection(const std::string& loopID, double time) {
     181            5 :     Dom::setDouble(libsumo::VAR_VIRTUAL_DETECTION, loopID, time);
     182            5 : }
     183              : 
     184              : 
     185           12 : LIBTRACI_PARAMETER_IMPLEMENTATION(InductionLoop, INDUCTIONLOOP)
     186          138 : LIBTRACI_SUBSCRIPTION_IMPLEMENTATION(InductionLoop, INDUCTIONLOOP)
     187              : 
     188              : 
     189              : }  // namespace libtraci
     190              : 
     191              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1