Path: blob/main/src/netedit/elements/GNEHierarchicalStructureChildren.cpp
169678 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file GNEHierarchicalStructureChildren.cpp14/// @author Pablo Alvarez Lopez15/// @date Feb 202516///17// Structure for // Structure for GNEHierarchicalElements centered in children18/****************************************************************************/1920#include <netedit/elements/network/GNEJunction.h>21#include <netedit/elements/network/GNEEdge.h>22#include <netedit/elements/network/GNELane.h>23#include <netedit/elements/demand/GNEDemandElement.h>24#include <netedit/elements/additional/GNEAdditional.h>25#include <netedit/elements/additional/GNETAZSourceSink.h>26#include <netedit/elements/data/GNEGenericData.h>27#include <utils/common/UtilExceptions.h>2829#include "GNEHierarchicalStructureChildren.h"3031// ===========================================================================32// member method definitions33// ===========================================================================3435GNEHierarchicalStructureChildren::GNEHierarchicalStructureChildren() {}3637// get functions3839template<> const GNEHierarchicalContainerChildren<GNEJunction*>&40GNEHierarchicalStructureChildren::get() const {41return myChildJunctions;42}434445template<> const GNEHierarchicalContainerChildren<GNEEdge*>&46GNEHierarchicalStructureChildren::get() const {47return myChildEdges;48}495051template<> const GNEHierarchicalContainerChildren<GNELane*>&52GNEHierarchicalStructureChildren::get() const {53return myChildLanes;54}555657template<> const GNEHierarchicalContainerChildren<GNEAdditional*>&58GNEHierarchicalStructureChildren::get() const {59return myChildAdditionals;60}616263template<> const GNEHierarchicalContainerChildren<GNEDemandElement*>&64GNEHierarchicalStructureChildren::get() const {65return myChildDemandElements;66}676869template<> const GNEHierarchicalContainerChildren<GNEGenericData*>&70GNEHierarchicalStructureChildren::get() const {71return myChildGenericDatas;72}737475template<> const GNEHierarchicalContainerChildrenSet<GNETAZSourceSink*>&76GNEHierarchicalStructureChildren::getSet() const {77return myChildSourceSinks;78}7980// add functions8182template <> void83GNEHierarchicalStructureChildren::add(GNEJunction* child) {84myChildJunctions.push_back(child);85}868788template <> void89GNEHierarchicalStructureChildren::add(GNEEdge* child) {90myChildEdges.push_back(child);91}929394template <> void95GNEHierarchicalStructureChildren::add(GNELane* child) {96myChildLanes.push_back(child);97}9899100template <> void101GNEHierarchicalStructureChildren::add(GNEAdditional* child) {102myChildAdditionals.push_back(child);103}104105106template <> void107GNEHierarchicalStructureChildren::add(GNETAZSourceSink* child) {108myChildSourceSinks.insert(child);109}110111112template <> void113GNEHierarchicalStructureChildren::add(GNEDemandElement* child) {114myChildDemandElements.push_back(child);115}116117118template <> void119GNEHierarchicalStructureChildren::add(GNEGenericData* child) {120myChildGenericDatas.push_back(child);121}122123// remove functions124125template <> void126GNEHierarchicalStructureChildren::remove(GNEJunction* child) {127auto it = std::find(myChildJunctions.begin(), myChildJunctions.end(), child);128if (it != myChildJunctions.end()) {129myChildJunctions.erase(it);130} else {131throw ProcessError(child->getTagStr() + " is not a child element");132}133}134135136template <> void137GNEHierarchicalStructureChildren::remove(GNEEdge* child) {138auto it = std::find(myChildEdges.begin(), myChildEdges.end(), child);139if (it != myChildEdges.end()) {140myChildEdges.erase(it);141} else {142throw ProcessError(child->getTagStr() + " is not a child element");143}144}145146147template <> void148GNEHierarchicalStructureChildren::remove(GNELane* child) {149auto it = std::find(myChildLanes.begin(), myChildLanes.end(), child);150if (it != myChildLanes.end()) {151myChildLanes.erase(it);152} else {153throw ProcessError(child->getTagStr() + " is not a child element");154}155}156157158template <> void159GNEHierarchicalStructureChildren::remove(GNEAdditional* child) {160auto it = std::find(myChildAdditionals.begin(), myChildAdditionals.end(), child);161if (it != myChildAdditionals.end()) {162myChildAdditionals.erase(it);163} else {164throw ProcessError(child->getTagStr() + " is not a child element");165}166}167168169template <> void170GNEHierarchicalStructureChildren::remove(GNETAZSourceSink* child) {171auto it = myChildSourceSinks.find(child);172if (it != myChildSourceSinks.end()) {173myChildSourceSinks.erase(it);174} else {175throw ProcessError(child->getTagStr() + " is not a child element");176}177}178179template <> void180GNEHierarchicalStructureChildren::remove(GNEDemandElement* child) {181auto it = std::find(myChildDemandElements.begin(), myChildDemandElements.end(), child);182if (it != myChildDemandElements.end()) {183myChildDemandElements.erase(it);184} else {185throw ProcessError(child->getTagStr() + " is not a child element");186}187}188189190template <> void191GNEHierarchicalStructureChildren::remove(GNEGenericData* child) {192auto it = std::find(myChildGenericDatas.begin(), myChildGenericDatas.end(), child);193if (it != myChildGenericDatas.end()) {194myChildGenericDatas.erase(it);195} else {196throw ProcessError(child->getTagStr() + " is not a child element");197}198}199200// replaceAll functions201202template <> void203GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNEJunction*>& children) {204myChildJunctions = children;205}206207208template <> void209GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNEEdge*>& children) {210myChildEdges = children;211}212213214template <> void215GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNELane*>& children) {216myChildLanes = children;217}218219220template <> void221GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNEAdditional*>& children) {222myChildAdditionals = children;223}224225226template <> void227GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNETAZSourceSink*>& children) {228myChildSourceSinks.clear();229for (const auto child : children) {230myChildSourceSinks.insert(child);231}232}233234235template <> void236GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNEDemandElement*>& children) {237myChildDemandElements = children;238}239240241template <> void242GNEHierarchicalStructureChildren::replaceAll(const GNEHierarchicalContainerChildren<GNEGenericData*>& children) {243myChildGenericDatas = children;244}245246/****************************************************************************/247248249