53 lines
1.5 KiB
Diff
53 lines
1.5 KiB
Diff
# UNDF: UNDF-2026-000000979
|
|
--- a/src/Airports/groundnetwork.hxx
|
|
+++ b/src/Airports/groundnetwork.hxx
|
|
@@ -8,6 +8,7 @@
|
|
|
|
#include <string>
|
|
#include <unordered_map>
|
|
+#include <unordered_set>
|
|
|
|
#include <simgear/compiler.h>
|
|
|
|
@@ -189,6 +190,7 @@
|
|
|
|
FGParkingList m_parkings;
|
|
FGTaxiNodeVector m_nodes;
|
|
+ std::unordered_set<FGTaxiNode*> m_nodeSet; // O(1) dedup for addSegment/addParking
|
|
|
|
FGTaxiNodeRef findNodeByIndex(int index) const;
|
|
|
|
--- a/src/Airports/groundnetwork.cxx
|
|
+++ b/src/Airports/groundnetwork.cxx
|
|
@@ -558,22 +558,22 @@
|
|
void FGGroundNetwork::addSegment(const FGTaxiNodeRef& from, const FGTaxiNodeRef& to)
|
|
{
|
|
FGTaxiSegment* seg = new FGTaxiSegment(from, to);
|
|
segments.push_back(seg);
|
|
|
|
- FGTaxiNodeVector::iterator it = std::find(m_nodes.begin(), m_nodes.end(), from);
|
|
- if (it == m_nodes.end()) {
|
|
+ if (m_nodeSet.find(from.get()) == m_nodeSet.end()) {
|
|
+ m_nodeSet.insert(from.get());
|
|
m_nodes.push_back(from);
|
|
}
|
|
|
|
- it = std::find(m_nodes.begin(), m_nodes.end(), to);
|
|
- if (it == m_nodes.end()) {
|
|
+ if (m_nodeSet.find(to.get()) == m_nodeSet.end()) {
|
|
+ m_nodeSet.insert(to.get());
|
|
m_nodes.push_back(to);
|
|
}
|
|
}
|
|
|
|
void FGGroundNetwork::addParking(const FGParkingRef& park)
|
|
{
|
|
m_parkings.push_back(park);
|
|
|
|
- FGTaxiNodeVector::iterator it = std::find(m_nodes.begin(), m_nodes.end(), park);
|
|
- if (it == m_nodes.end()) {
|
|
+ if (m_nodeSet.find(park.get()) == m_nodeSet.end()) {
|
|
+ m_nodeSet.insert(park.get());
|
|
m_nodes.push_back(park);
|
|
}
|
|
}
|