]> git.mxchange.org Git - flightgear.git/blobdiff - src/Airports/dynamics.cxx
Interim windows build fix
[flightgear.git] / src / Airports / dynamics.cxx
index 9d17f2b3418f3c6fe0d6daac69589ecf8fa2bc4a..fae2add25c63734d2089921d669006b78a0a2d00 100644 (file)
@@ -40,6 +40,7 @@
 #include <Main/fg_props.hxx>
 #include <Main/locale.hxx>
 #include <Airports/runways.hxx>
+#include <Airports/groundnetwork.hxx>
 #include <Navaids/NavDataCache.hxx>
 
 #include "airport.hxx"
@@ -53,19 +54,19 @@ using std::random_shuffle;
 class ParkingAssignment::ParkingAssignmentPrivate
 {
 public:
-  ParkingAssignmentPrivate(FGParking* pk, FGAirport* apt) :
+  ParkingAssignmentPrivate(FGParking* pk, FGAirportDynamics* dyn) :
     refCount(0),
     parking(pk),
-    airport(apt)
+    dynamics(dyn)
   {
     assert(pk);
-    assert(apt);
+    assert(dyn);
     retain(); // initial count of 1
   }
   
   ~ParkingAssignmentPrivate()
   {
-    airport->getDynamics()->releaseParking(parking);
+    dynamics->releaseParking(parking);
   }
   
   void release()
@@ -82,7 +83,7 @@ public:
   
   unsigned int refCount;
   FGParkingRef parking;
-  FGAirportRef airport;
+  FGAirportDynamicsRef dynamics;
 };
 
 ParkingAssignment::ParkingAssignment() :
@@ -97,11 +98,11 @@ ParkingAssignment::~ParkingAssignment()
   }
 }
   
-ParkingAssignment::ParkingAssignment(FGParking* pk, FGAirport* apt) :
+ParkingAssignment::ParkingAssignment(FGParking* pk, FGAirportDynamics* dyn) :
   _sharedData(NULL)
 {
   if (pk) {
-    _sharedData = new ParkingAssignmentPrivate(pk, apt);
+    _sharedData = new ParkingAssignmentPrivate(pk, dyn);
   }
 }
 
@@ -159,27 +160,30 @@ FGAirportDynamics::FGAirportDynamics(FGAirport * ap):
 
 {
     lastUpdate = 0;
+    groundNetwork.reset(new FGGroundNetwork);
 }
 
 // Destructor
 FGAirportDynamics::~FGAirportDynamics()
 {
+    SG_LOG(SG_AI, SG_INFO, "destroyed dynamics for:" << _ap->ident());
 }
 
 
 // Initialization required after XMLRead
 void FGAirportDynamics::init()
 {
-    groundNetwork.init(_ap);
-    groundNetwork.setTowerController(&towerController);
-    
+
+    groundNetwork->init(this);
+    groundController.setTowerController(&towerController);
+    groundController.init(this);
 }
 
 FGParking* FGAirportDynamics::innerGetAvailableParking(double radius, const string & flType,
                                            const string & airline,
                                            bool skipEmptyAirlineCode)
 {
-    const FGParkingList& parkings(groundNetwork.allParkings());
+    const FGParkingList& parkings(groundNetwork->allParkings());
     FGParkingList::const_iterator it;
     for (it = parkings.begin(); it != parkings.end(); ++it) {
         FGParkingRef parking = *it;
@@ -213,27 +217,27 @@ ParkingAssignment FGAirportDynamics::getAvailableParking(double radius, const st
   // most exact seach - airline codes must be present and match
   FGParking* result = innerGetAvailableParking(radius, flType, airline, true);
   if (result) {
-    return ParkingAssignment(result, _ap);
+    return ParkingAssignment(result, this);
   }
   
   // more tolerant - gates with empty airline codes are permitted
   result = innerGetAvailableParking(radius, flType, airline, false);
   if (result) {
-    return ParkingAssignment(result, _ap);
+    return ParkingAssignment(result, this);
   }
 
   // fallback - ignore the airline code entirely
   result = innerGetAvailableParking(radius, flType, string(), false);
-  return result ? ParkingAssignment(result, _ap) : ParkingAssignment();
+  return result ? ParkingAssignment(result, this) : ParkingAssignment();
 }
 
 ParkingAssignment FGAirportDynamics::getParkingByName(const std::string& name) const
 {
-    const FGParkingList& parkings(groundNetwork.allParkings());
+    const FGParkingList& parkings(groundNetwork->allParkings());
     FGParkingList::const_iterator it;
     for (it = parkings.begin(); it != parkings.end(); ++it) {
         if ((*it)->name() == name) {
-            return ParkingAssignment(*it, _ap);
+            return ParkingAssignment(*it, const_cast<FGAirportDynamics*>(this));
         }
     }
 
@@ -291,7 +295,7 @@ public:
 
 FGParkingList FGAirportDynamics::getParkings(bool onlyAvailable, const std::string &type) const
 {
-    FGParkingList result(groundNetwork.allParkings());
+    FGParkingList result(groundNetwork->allParkings());
 
     GetParkingsPredicate pred(onlyAvailable, type, this);
     FGParkingList::iterator it = std::remove_if(result.begin(), result.end(), pred);