LCOV - code coverage report
Current view: top level - src/netgen - NGNode.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 91.9 % 37 34
Test Date: 2025-11-13 15:38:19 Functions: 100.0 % 9 9

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2001-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    NGNode.cpp
      15              : /// @author  Markus Hartinger
      16              : /// @author  Daniel Krajzewicz
      17              : /// @author  Jakob Erdmann
      18              : /// @author  Michael Behrisch
      19              : /// @date    Mar, 2003
      20              : ///
      21              : // A netgen-representation of a node
      22              : /****************************************************************************/
      23              : #include <config.h>
      24              : 
      25              : #include <algorithm>
      26              : #include <netbuild/NBNode.h>
      27              : #include <netbuild/NBNodeCont.h>
      28              : #include <netbuild/NBEdge.h>
      29              : #include <netbuild/NBOwnTLDef.h>
      30              : #include <netbuild/NBTypeCont.h>
      31              : #include <netbuild/NBTrafficLightLogicCont.h>
      32              : #include <netbuild/NBNetBuilder.h>
      33              : #include <utils/common/UtilExceptions.h>
      34              : #include <utils/common/ToString.h>
      35              : #include <utils/geom/GeoConvHelper.h>
      36              : #include <utils/options/OptionsCont.h>
      37              : #include <utils/options/Option.h>
      38              : #include "NGNode.h"
      39              : 
      40              : 
      41              : // ===========================================================================
      42              : // method definitions
      43              : // ===========================================================================
      44        32506 : NGNode::NGNode(const std::string& id)
      45        32506 :     : Named(id), myXID(-1), myYID(-1), myAmCenter(false), myAmFringe(false) {}
      46              : 
      47              : 
      48         2308 : NGNode::NGNode(const std::string& id, int xIDa, int yIDa)
      49         2308 :     : Named(id), myXID(xIDa), myYID(yIDa), myAmCenter(false), myAmFringe(false) {}
      50              : 
      51              : 
      52           17 : NGNode::NGNode(const std::string& id, int xIDa, int yIDa, bool amCenter)
      53           17 :     : Named(id), myXID(xIDa), myYID(yIDa), myAmCenter(amCenter), myAmFringe(false) {}
      54              : 
      55              : 
      56        69662 : NGNode::~NGNode() {
      57              :     NGEdgeList::iterator li;
      58        34831 :     while (myLinkList.size() != 0) {
      59              :         li = myLinkList.begin();
      60            0 :         delete (*li);
      61              :     }
      62        69662 : }
      63              : 
      64              : 
      65              : NBNode*
      66         5347 : NGNode::buildNBNode(NBNetBuilder& nb, const Position& perturb) const {
      67              :     Position pos(myPosition + perturb);
      68         5347 :     GeoConvHelper::getProcessing().x2cartesian(pos);
      69              :     // the center will have no logic!
      70         5347 :     if (myAmCenter) {
      71           17 :         return new NBNode(myID, pos, SumoXMLNodeType::NOJUNCTION);
      72              :     }
      73              :     NBNode* node = nullptr;
      74        10660 :     std::string typeS = OptionsCont::getOptions().isSet("default-junction-type") ?
      75         5411 :                         OptionsCont::getOptions().getString("default-junction-type") : "";
      76              : 
      77              :     if (SUMOXMLDefinitions::NodeTypes.hasString(typeS)) {
      78           81 :         const SumoXMLNodeType type = SUMOXMLDefinitions::NodeTypes.get(typeS);
      79           81 :         node = new NBNode(myID, pos, type);
      80              : 
      81              :         // check whether it is a traffic light junction
      82           81 :         if (NBNode::isTrafficLight(type)) {
      83           35 :             const TrafficLightType tlType = SUMOXMLDefinitions::TrafficLightTypes.get(
      84           35 :                                                 OptionsCont::getOptions().getString("tls.default-type"));
      85           35 :             NBTrafficLightDefinition* tlDef = new NBOwnTLDef(myID, node, 0, tlType);
      86           35 :             if (!nb.getTLLogicCont().insert(tlDef)) {
      87              :                 // actually, nothing should fail here
      88            0 :                 delete tlDef;
      89            0 :                 throw ProcessError();
      90              :             }
      91              :         }
      92              :     } else {
      93              :         // otherwise netbuild may guess SumoXMLNodeType::TRAFFIC_LIGHT without actually building one
      94         5249 :         node = new NBNode(myID, pos, SumoXMLNodeType::PRIORITY);
      95              :     }
      96         5330 :     if (myAmFringe) {
      97              :         node->setFringeType(FringeType::OUTER);
      98              :     }
      99              : 
     100              :     return node;
     101              : }
     102              : 
     103              : 
     104              : void
     105        89872 : NGNode::addLink(NGEdge* link) {
     106        89872 :     myLinkList.push_back(link);
     107        89872 : }
     108              : 
     109              : 
     110              : void
     111        89872 : NGNode::removeLink(NGEdge* link) {
     112        89872 :     myLinkList.remove(link);
     113        89872 : }
     114              : 
     115              : 
     116              : bool
     117       426937 : NGNode::connected(const NGNode* const node, const bool withDir) const {
     118      1233138 :     for (NGEdge* ngEdge : myLinkList) {
     119       812374 :         if (ngEdge->getStartNode() == this && ngEdge->getEndNode() == node) {
     120              :             return true;
     121              :         }
     122       808031 :         if (!withDir && ngEdge->getEndNode() == this && ngEdge->getStartNode() == node) {
     123              :             return true;
     124              :         }
     125              :     }
     126              :     return false;
     127              : }
     128              : 
     129              : 
     130              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1