#ifndef _TRAFFICMGR_HXX_
#define _TRAFFICMGR_HXX_
+#include <set>
#include <simgear/structure/subsystem_mgr.hxx>
+#include <simgear/props/propertyObject.hxx>
#include <simgear/xml/easyxml.hxx>
#include <simgear/misc/sg_path.hxx>
+#include <simgear/misc/sg_dir.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;
+ unsigned int lastRun;
+};
+
+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;
+ bool doingInit;
+
ScheduleVector scheduledAircraft;
ScheduleVectorIterator currAircraft, currAircraftClosest;
vector<string> elementValueStack;
- string mdl, livery, registration, callsign, fltrules,
+ // record model paths which are missing, to avoid duplicate
+ // warnings when parsing traffic schedules.
+ std::set<std::string> missingModels;
+
+ std::string mdl, livery, registration, callsign, fltrules,
port, timeString, departurePort, departureTime, arrivalPort, arrivalTime,
repeat, acType, airline, m_class, flighttype, requiredAircraft, homePort;
int cruiseAlt;
FGScheduledFlightMap flights;
- //void readTimeTableFromFile(SGPath infilename);
- //void Tokenize(const string& str, vector<string>& tokens, const string& delimiters = " ");
+ void readTimeTableFromFile(SGPath infilename);
+ void Tokenize(const string& str, vector<string>& tokens, const string& delimiters = " ");
+ simgear::PropertyObject<bool> enabled, aiEnabled, realWxEnabled, metarValid;
+
+ void loadHeuristics();
+
+ void initStep();
+ void finishInit();
+ void shutdown();
+
+ // during incremental init, contains the XML files still be read in
+ simgear::PathList schedulesToRead;
public:
FGTrafficManager();
~FGTrafficManager();
FGScheduledFlightVecIterator getFirstFlight(const string &ref) { return flights[ref].begin(); }
FGScheduledFlightVecIterator getLastFlight(const string &ref) { return flights[ref].end(); }
+ void endAircraft();
+
// Some overloaded virtual XMLVisitor members
virtual void startXML ();
virtual void endXML ();