#include <Main/fg_props.hxx>
#include <Main/locale.hxx>
#include <Airports/runways.hxx>
+#include <Airports/groundnetwork.hxx>
#include <Navaids/NavDataCache.hxx>
#include "airport.hxx"
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()
unsigned int refCount;
FGParkingRef parking;
- FGAirportRef airport;
+ FGAirportDynamicsRef dynamics;
};
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);
}
}
{
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;
// 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));
}
}
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);