LCOV - code coverage report
Current view: top level - src/od - ODDistrictCont.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 76.3 % 38 29
Test Date: 2025-06-26 15:39:05 Functions: 85.7 % 7 6

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2002-2025 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    ODDistrictCont.cpp
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Michael Behrisch
      17              : /// @author  Yun-Pang Floetteroed
      18              : /// @date    Sept 2002
      19              : ///
      20              : // A container for districts
      21              : /****************************************************************************/
      22              : #include <config.h>
      23              : 
      24              : #include <string>
      25              : #include <utils/common/MsgHandler.h>
      26              : #include <utils/common/UtilExceptions.h>
      27              : #include <utils/common/NamedObjectCont.h>
      28              : #include <utils/xml/XMLSubSys.h>
      29              : #include <utils/common/RandHelper.h>
      30              : #include <utils/common/FileHelpers.h>
      31              : #include <utils/options/OptionsCont.h>
      32              : #include "ODDistrict.h"
      33              : #include "ODDistrictHandler.h"
      34              : #include "ODDistrictCont.h"
      35              : 
      36              : 
      37              : 
      38              : // ===========================================================================
      39              : // method definitions
      40              : // ===========================================================================
      41          241 : ODDistrictCont::ODDistrictCont() {}
      42              : 
      43              : 
      44          241 : ODDistrictCont::~ODDistrictCont() {}
      45              : 
      46              : 
      47              : std::string
      48        15963 : ODDistrictCont::getRandomSourceFromDistrict(const std::string& name) const {
      49              :     ODDistrict* district = get(name);
      50        15963 :     if (district == nullptr) {
      51            0 :         throw InvalidArgument("There is no district '" + name + "'.");
      52              :     }
      53              :     std::string randomSource;
      54              :     try {
      55        15963 :         randomSource = district->getRandomSource();
      56            0 :     } catch (OutOfBoundsException&) {
      57            0 :         throw ProcessError(TLF("District '%' does not provide any valid source.", name));
      58            0 :     }
      59        15963 :     return randomSource;
      60              : }
      61              : 
      62              : 
      63              : std::string
      64        15963 : ODDistrictCont::getRandomSinkFromDistrict(const std::string& name) const {
      65              :     ODDistrict* district = get(name);
      66        15963 :     if (district == nullptr) {
      67            0 :         throw InvalidArgument("There is no district '" + name + "'.");
      68              :     }
      69              :     std::string randomSink;
      70              :     try {
      71        15963 :         randomSink = district->getRandomSink();
      72            0 :     } catch (OutOfBoundsException&) {
      73            0 :         throw ProcessError(TLF("District '%' does not provide any valid sink.", name));
      74            0 :     }
      75        15963 :     return randomSink;
      76              : }
      77              : 
      78              : 
      79              : void
      80          143 : ODDistrictCont::loadDistricts(std::vector<std::string> files) {
      81          285 :     for (std::vector<std::string>::iterator i = files.begin(); i != files.end(); ++i) {
      82              :         const std::string& districtfile = *i;
      83          286 :         if (!FileHelpers::isReadable(districtfile)) {
      84            3 :             throw ProcessError(TLF("Could not access network file '%' to load.", districtfile));
      85              :         }
      86          426 :         PROGRESS_BEGIN_MESSAGE("Loading districts from '" + districtfile + "'");
      87              :         // build the xml-parser and handler
      88          142 :         ODDistrictHandler handler(*this, districtfile);
      89          142 :         if (!XMLSubSys::runParser(handler, districtfile, true)) {
      90            0 :             PROGRESS_FAILED_MESSAGE();
      91              :         } else {
      92          142 :             PROGRESS_DONE_MESSAGE();
      93              :         }
      94          142 :     }
      95          142 : }
      96              : 
      97              : 
      98              : void
      99           98 : ODDistrictCont::makeDistricts(const std::map<std::string, std::pair<std::vector<std::string>, std::vector<std::string> > >& districts) {
     100          353 :     for (std::map<std::string, std::pair<std::vector<std::string>, std::vector<std::string> > >::const_iterator it = districts.begin(); it != districts.end(); ++it) {
     101          255 :         ODDistrict* current = new ODDistrict(it->first);
     102              :         const std::vector<std::string>& sources = it->second.first;
     103          714 :         for (std::vector<std::string>::const_iterator i = sources.begin(); i != sources.end(); ++i) {
     104          459 :             current->addSource(*i, 1.);
     105              :         }
     106              :         const std::vector<std::string>& sinks = it->second.second;
     107          707 :         for (std::vector<std::string>::const_iterator i = sinks.begin(); i != sinks.end(); ++i) {
     108          452 :             current->addSink(*i, 1.);
     109              :         }
     110          255 :         add(current->getID(), current);
     111              :     }
     112           98 : }
     113              : 
     114              : 
     115              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1