Eclipse SUMO - Simulation of Urban MObility
GNEDemandElementDistribution.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2001-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 /****************************************************************************/
18 // A abstract class for demand elements distributions
19 /****************************************************************************/
20 
21 #include <netedit/GNENet.h>
23 
25 
26 // ===========================================================================
27 // member method definitions
28 // ===========================================================================
29 
31  myDemandElement(demandElement) {
32 }
33 
34 
35 bool
37  return myDistributionValues.empty();
38 }
39 
40 
41 bool
43  return (myDistributionValues.count(key) > 0);
44 }
45 
46 
47 bool
48 GNEDemandElementDistribution::isValueValid(const GNEDemandElement* key, const double value) const {
49  if (myDistributionValues.count(key) > 0) {
50  return ((value >= 0) && (value <= 1));
51  } else {
52  return false;
53  }
54 }
55 
56 
57 const std::map<const GNEDemandElement*, double>&
59  return myDistributionValues;
60 }
61 
62 
63 std::map<std::string, GNEDemandElement*>
65  std::map<std::string, GNEDemandElement*> possibleKeys;
66  // get list of possible keys
67  auto allKeys = myDemandElement->getNet()->getAttributeCarriers()->getDemandElements().at(type);
68  // fill possible keys with non used keys
69  for (const auto& key : allKeys) {
70  if (!keyExists(key.second)) {
71  possibleKeys[key.second->getID()] = key.second;
72  }
73  }
74  return possibleKeys;
75 }
76 
77 
78 std::string
80  // first sort all keys by ID
81  std::set<std::string> sortedKeys;
82  for (const auto& values : myDistributionValues) {
83  sortedKeys.insert(values.first->getID());
84  }
85  // return keySortd
86  return toString(sortedKeys);
87 }
88 
89 
90 std::string
92  // first sort all keys by ID
93  std::map<std::string, const GNEDemandElement*> sortedKeys;
94  for (const auto& values : myDistributionValues) {
95  sortedKeys[values.first->getID()] = values.first;
96  }
97  // now obtain values sorted by ID
98  std::vector<double> values;
99  for (const auto& sortedKey : sortedKeys) {
100  values.push_back(myDistributionValues.at(sortedKey.second));
101  }
102  return toString(values);
103 }
104 
105 
106 double
108  if (myDistributionValues.count(key) > 0) {
109  return myDistributionValues.at(key);
110  } else {
111  throw ProcessError("Key doesn't exist");
112  }
113 }
114 
115 
116 void
118  GNEChange_Distribution::addKey(myDemandElement, key, value, undoList);
119 }
120 
121 
122 void
125 }
126 
127 
128 void
130  GNEChange_Distribution::editValue(myDemandElement, key, newValue, undoList);
131 }
132 
133 
134 void
136  if (myDistributionValues.count(key) == 0) {
137  myDistributionValues[key] = value;
138  } else {
139  throw ProcessError("Key already exist");
140  }
141 }
142 
143 
144 void
146  if (myDistributionValues.count(key) > 0) {
147  myDistributionValues.erase(key);
148  } else {
149  throw ProcessError("Key doesn't exist");
150  }
151 }
152 
153 
154 void
156  myDistributionValues[key] = newValue;
157 }
158 
159 /****************************************************************************/
SumoXMLTag
Numbers representing SUMO-XML - element names.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:46
GNENet * getNet() const
get pointer to net
static void editValue(GNEDemandElement *distribution, const GNEDemandElement *key, const double newValue, GNEUndoList *undoList)
edit value
static void addKey(GNEDemandElement *distribution, const GNEDemandElement *key, const double value, GNEUndoList *undoList)
add new key
static void removeKey(GNEDemandElement *distribution, const GNEDemandElement *key, GNEUndoList *undoList)
remove key
GNEDemandElement * myDemandElement
demand element
double getAttributeDistributionValue(const GNEDemandElement *key)
get attribute distribution value
void removeDistributionKey(const GNEDemandElement *key, GNEUndoList *undoList)
remove distribution key
std::map< const GNEDemandElement *, double > myDistributionValues
map with distribution keys and values
void addDistributionKey(const GNEDemandElement *key, const double value, GNEUndoList *undoList)
add distribution key
void editDistributionValue(const GNEDemandElement *key, const double newValue, GNEUndoList *undoList)
remove distribution (used in GNEDemandElementDistribution)
GNEDemandElementDistribution(GNEDemandElement *demandElement)
Constructor.
const std::map< const GNEDemandElement *, double > & getDistributionKeyValues() const
get map with distribution keys and values
std::map< std::string, GNEDemandElement * > getPossibleDistributionKeys(SumoXMLTag type) const
get list of possible keys sorted by ID
std::string getAttributeDistributionKeys() const
get attribute distribution keys in string format sorted by ID
bool isDistributionEmpty() const
check if distribution is empty
std::string getAttributeDistributionValues() const
get attribute distribution keys in string format sorted by ID
bool keyExists(const GNEDemandElement *key) const
check if the given key can be added in distribution
bool isValueValid(const GNEDemandElement *key, const double value) const
check if the given key-value can be added in distribution
const std::map< SumoXMLTag, std::map< const GUIGlObject *, GNEDemandElement * > > & getDemandElements() const
get demand elements
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition: GNENet.cpp:121