#endif
#include <math.h>
+#include <cstdlib>
#include <cstring>
-#include <simgear/compiler.h>
+#include <boost/foreach.hpp>
+#include <simgear/compiler.h>
#include <simgear/debug/logstream.hxx>
+#include <simgear/misc/strutils.hxx>
+#include <simgear/structure/exception.hxx>
+
#include <Main/globals.hxx>
#include <Airports/runways.hxx>
#include "runwayprefs.hxx"
-#include "simple.hxx"
+#include "airport.hxx"
+
+using namespace simgear;
/******************************************************************************
* ScheduleTime
return *this;
}
-string ScheduleTime::getName(time_t dayStart)
+std::string ScheduleTime::getName(time_t dayStart)
{
if ((start.size() != end.size())
|| (start.size() != scheduleNames.size())) {
SG_LOG(SG_GENERAL, SG_INFO, "Unable to parse schedule times");
- exit(1);
+ throw sg_exception("Unable to parse schedule times");
} else {
int nrItems = start.size();
//cerr << "Nr of items to process: " << nrItems << endl;
//couldn't find one so return 0;
//cerr << "Returning 0 " << endl;
}
- return string("");
+ return std::string("");
}
/******************************************************************************
return *this;
}
-void RunwayList::set(const string & tp, const string & lst)
+void RunwayList::set(const std::string & tp, const std::string & lst)
{
//weekday = atoi(timeCopy.substr(0,1).c_str());
// timeOffsetInDays = weekday - currTimeDate->getGmt()->tm_wday;
// timeCopy = timeCopy.substr(2,timeCopy.length());
type = tp;
- string rwys = lst;
- string rwy;
- while (rwys.find(",") != string::npos) {
- rwy = rwys.substr(0, rwys.find(",", 0));
- //cerr << "adding runway [" << rwy << "] to the list " << endl;
- preferredRunways.push_back(rwy);
- rwys.erase(0, rwys.find(",", 0) + 1); // erase until after the first whitspace
- while (rwys[0] == ' ')
- rwys.erase(0, 1); // Erase any leading whitespaces.
- //cerr << "Remaining runway list " << rwys;
+
+
+
+ BOOST_FOREACH(std::string s, strutils::split(lst, ",")) {
+ std::string ident = strutils::strip(s);
+
+ // http://code.google.com/p/flightgear-bugs/issues/detail?id=1137
+ if ((ident.size() < 2) || !isdigit(ident[1])) {
+ SG_LOG(SG_GENERAL, SG_INFO, "RunwayList::set: padding runway ident '" << ident << "'");
+ ident = "0" + ident;
+ }
+
+ preferredRunways.push_back(ident);
}
- preferredRunways.push_back(rwys);
- //exit(1);
}
void RunwayList::clear()
double hdgDiff;
double crossWind;
double tailWind;
- string name;
+ std::string name;
//stringVec names;
int bestMatch = 0, bestChoice = 0;
validSelection = true;
for (int j = 0; j < activeRwys; j++) {
- string ident(rwyList[j].getRwyList(i));
+ std::string ident(rwyList[j].getRwyList(i));
if (!airport->hasRunwayWithIdent(ident)) {
SG_LOG(SG_GENERAL, SG_WARN,
"no such runway:" << ident << " at " <<
choice[0] = 0;
choice[1] = 0;
for (int i = activeRwys - 1; i; i--) {
- if (rwyList[i].getType() == string("landing"))
+ if (rwyList[i].getType() == std::string("landing"))
choice[0] = i;
- if (rwyList[i].getType() == string("takeoff"))
+ if (rwyList[i].getType() == std::string("takeoff"))
choice[1] = i;
}
//cerr << "Choosing " << choice[0] << " for landing and " << choice[1] << "for takeoff" << endl;
nrActive = 0;
}
-void RunwayGroup::getActive(int i, string & name, string & type)
+void RunwayGroup::getActive(int i, std::string & name, std::string & type)
{
if (i == -1) {
return;
return 0;
}
-RunwayGroup *FGRunwayPreference::getGroup(const string & groupName)
+RunwayGroup *FGRunwayPreference::getGroup(const std::string & groupName)
{
PreferenceListIterator i = preferences.begin();
if (preferences.begin() == preferences.end())
return 0;
}
-string FGRunwayPreference::getId()
+std::string FGRunwayPreference::getId()
{
return _ap->getId();
};