/**************************************************************************
* 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_
#define _TRAFFICMGR_HXX_
#include <simgear/structure/subsystem_mgr.hxx>
+#include <simgear/props/propertyObject.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;
+typedef std::vector<int> IdList;
+typedef std::vector<int>::iterator IdListIterator;
+
+class Heuristic
+{
+public:
+ std::string registration;
+ unsigned int runCount;
+ unsigned int hits;
+};
+
+typedef std::vector<Heuristic> heuristicsVector;
+typedef std::vector<Heuristic>::iterator heuristicsVectorIterator;
+
+typedef std::map < std::string, Heuristic> HeuristicMap;
+typedef HeuristicMap::iterator HeuristicMapIterator;
+
+
class FGTrafficManager : public SGSubsystem, public XMLVisitor
{
private:
+ bool inited;
+
ScheduleVector scheduledAircraft;
ScheduleVectorIterator currAircraft, currAircraftClosest;
vector<string> elementValueStack;
- string mdl, livery, registration, callsign, fltrules,
+ std::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;
+ 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 = " ");
+
+ simgear::PropertyObject<bool> enabled, aiEnabled, metarValid;
public:
FGTrafficManager();
~FGTrafficManager();
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 ();