java-topology/defects/flightgear-0001/patch/flightgear-0001.patch

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);
}
}