]> git.mxchange.org Git - flightgear.git/commitdiff
Trying to bullet-proof the traffic code.
authorJames Turner <zakalawe@mac.com>
Sat, 19 Dec 2015 05:42:22 +0000 (21:42 -0800)
committerJames Turner <zakalawe@mac.com>
Sat, 19 Dec 2015 05:42:22 +0000 (21:42 -0800)
src/ATC/GroundController.cxx
src/Airports/groundnetwork.cxx
src/Traffic/Schedule.cxx
src/Traffic/Schedule.hxx

index 23bb001a3909ca6f6993a825e650835679a32891..d238b44c35c582c4a8c2162ad09ec0958e78096d 100644 (file)
@@ -107,6 +107,11 @@ void FGGroundController::announcePosition(int id,
                                        double radius, int leg,
                                        FGAIAircraft * aircraft)
 {
+    if (!aircraft || !aircraft->getPerformance()) {
+        SG_LOG(SG_ATC, SG_ALERT, "announcePosition: missing aircraft performance");
+        return;
+    }
+
     TrafficVectorIterator i = activeTraffic.begin();
     // Search search if the current id alread has an entry
     // This might be faster using a map instead of a vector, but let's start by taking a safe route
index 5a0705d9f835d147f35fd31ce0f6debe01658d4e..98d8ec113c2e6592565492e778f5915c9101b015 100644 (file)
@@ -57,7 +57,10 @@ FGTaxiSegment::FGTaxiSegment(FGTaxiNode* aStart, FGTaxiNode* aEnd) :
   index(0),
   oppositeDirection(0)
 {
-};
+    if (!aStart || !aEnd) {
+        throw sg_exception("Missing node arguments creating FGTaxiSegment");
+    }
+}
 
 SGGeod FGTaxiSegment::getCenter() const
 {
index 7e8cdbdfc4aa9e756eb66db24b6a712abbf069bc..691a34ea6d9fb197b5a0d138340b7ba2fcf10bf8 100644 (file)
@@ -505,17 +505,53 @@ bool FGAISchedule::next()
    return true;
 }
 
-time_t FGAISchedule::getDepartureTime() { return (*flights.begin())->getDepartureTime   (); }
+time_t FGAISchedule::getDepartureTime()
+{
+    if (flights.empty())
+        return 0;
+
+    return (*flights.begin())->getDepartureTime   ();
+}
+
+FGAirport *FGAISchedule::getDepartureAirport()
+{
+    if (flights.empty())
+        return 0;
+
+    return (*flights.begin())->getDepartureAirport();
+}
+
+FGAirport *FGAISchedule::getArrivalAirport()
+{
+    if (flights.empty())
+        return 0;
 
-FGAirport *FGAISchedule::getDepartureAirport() { return (*flights.begin())->getDepartureAirport(); }
+    return (*flights.begin())->getArrivalAirport  ();
+}
 
-FGAirport *FGAISchedule::getArrivalAirport() { return (*flights.begin())->getArrivalAirport  (); }
+int FGAISchedule::getCruiseAlt()
+{
+    if (flights.empty())
+        return 0;
 
-int FGAISchedule::getCruiseAlt() { return (*flights.begin())->getCruiseAlt       (); }
+    return (*flights.begin())->getCruiseAlt       ();
+}
 
-const std::string &FGAISchedule::getCallSign() { return (*flights.begin())->getCallSign (); }
+std::string FGAISchedule::getCallSign()
+{
+    if (flights.empty())
+        return std::string();
 
-const std::string &FGAISchedule::getFlightRules() { return (*flights.begin())->getFlightRules (); }
+    return (*flights.begin())->getCallSign ();
+}
+
+std::string FGAISchedule::getFlightRules()
+{
+    if (flights.empty())
+        return std::string();
+
+    return (*flights.begin())->getFlightRules ();
+}
 
 FGScheduledFlight* FGAISchedule::findAvailableFlight (const string &currentDestination,
                                                       const string &req,
index 12169f4b777843d8598fbc33524bc19c322cca8d..5d7a360c17f62feb2927fa57f871353fda55b6ed 100644 (file)
@@ -118,9 +118,9 @@ class FGAISchedule
   const std::string& getFlightType     () { return flightType;};
   const std::string& getAirline        () { return airline; };
   const std::string& getAircraft       () { return acType; };
-  const std::string& getCallSign       ();
+  std::string getCallSign       ();
   const std::string& getRegistration   () { return registration;};
-  const std::string& getFlightRules    ();
+  std::string getFlightRules    ();
   bool getHeavy                   () { return heavy; };
   double getCourse                () { return courseToDest; };
   unsigned int getRunCount        () { return runCount; };