]> git.mxchange.org Git - flightgear.git/blobdiff - src/Traffic/TrafficMgr.hxx
PLIB net removed from FlightGear
[flightgear.git] / src / Traffic / TrafficMgr.hxx
index 09f2157697db22af0e37a5aa4166b3d04dc20710..862c87be4dd23f65de232004e213d488d272cb19 100644 (file)
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  *
  *
  **************************************************************************/
 /**************************************************************************
  * This file contains the class definitions for a (Top Level) traffic
  * manager for FlightGear. 
+ * 
+ * This is traffic manager version II. The major difference from version 
+ * I is that the Flight Schedules are decoupled from the AIAircraft
+ * entities. This allows for a much greater flexibility in setting up
+ * Irregular schedules. Traffic Manager II also makes no longer use of .xml
+ * based configuration files. 
+ * 
+ * Here is a step plan to achieve the goal of creating Traffic Manager II
+ * 
+ * 1) Read aircraft data from a simple text file, like the one provided by
+ *    Gabor Toth
+ * 2) Create a new database structure of SchedFlights. This new database 
+ *    should not be part of the Schedule class, but of TrafficManager itself
+ * 3) Each aircraft should have a list of possible Flights it can operate
+ *    (i.e. airline and AC type match). 
+ * 4) Aircraft processing proceeds as current. During initialization, we seek 
+ *    the most urgent flight that needs to be operated 
+ * 5) Modify the getNextLeg function so that the next flight is loaded smoothly.
  **************************************************************************/
 
 #ifndef _TRAFFICMGR_HXX_
@@ -29,6 +48,7 @@
 
 #include <simgear/structure/subsystem_mgr.hxx>
 #include <simgear/xml/easyxml.hxx>
+#include <simgear/misc/sg_path.hxx>
 
 #include "SchedFlight.hxx"
 #include "Schedule.hxx"
 typedef vector<int> IdList;
 typedef vector<int>::iterator IdListIterator;
 
+class Heuristic
+{
+public:
+   string registration;
+   unsigned int runCount;
+   unsigned int hits;
+};
+
+typedef vector<Heuristic> heuristicsVector;
+typedef vector<Heuristic>::iterator heuristicsVectorIterator;
+
+typedef std::map < std::string, Heuristic> HeuristicMap;
+typedef HeuristicMap::iterator             HeuristicMapIterator;
+
+
+
 
 class FGTrafficManager : public SGSubsystem, public XMLVisitor
 {
 private:
   ScheduleVector scheduledAircraft;
   ScheduleVectorIterator currAircraft, currAircraftClosest;
-  string value;
+  vector<string> elementValueStack;
 
   string mdl, livery, registration, callsign, fltrules, 
     port, timeString, departurePort, departureTime, arrivalPort, arrivalTime,
-    repeat, acType, airline, m_class, flighttype;
+    repeat, acType, airline, m_class, flighttype, requiredAircraft, homePort;
   int cruiseAlt;
+  int score, runCount, acCounter;
   double radius, offset;
   bool heavy;
 
   IdList releaseList;
     
-  FGScheduledFlightVec flights;
+  FGScheduledFlightMap flights;
+
+  void readTimeTableFromFile(SGPath infilename);
+  void Tokenize(const string& str, vector<string>& tokens, const string& delimiters = " ");
 
 public:
   FGTrafficManager();
-  
+  ~FGTrafficManager();
   void init();
   void update(double time);
   void release(int ref);
   bool isReleased(int id);
 
+  FGScheduledFlightVecIterator getFirstFlight(const string &ref) { return flights[ref].begin(); }
+  FGScheduledFlightVecIterator getLastFlight(const string &ref) { return flights[ref].end(); }
+
   // Some overloaded virtual XMLVisitor members
   virtual void startXML (); 
   virtual void endXML   ();