1
0
Fork 0

Add FGPositioned static methods: isAirportType(), isRunwayType(), isNavaidType()

For consistency, define these three static methods in FGPositioned.
FGPositioned::isAirportType() is the same as FGAirport::isAirportType()
(piece of code moved from airport.cxx to positioned.cxx, and
FGAirport::isAirportType() now calls FGPositioned::isAirportType()).

- FGPositioned::isAirportType() returns true for AIRPORT, HELIPORT,
  SEAPORT;
- FGPositioned::isRunwayType() returns true for RUNWAY;
- FGPositioned::isNavaidType() returns true for NDB, VOR, ILS, LOC, GS,
  DME, TACAN.
This commit is contained in:
Florent Rougon 2017-11-15 22:05:10 +01:00
parent 9d4cbb005f
commit 91470cbc54
4 changed files with 53 additions and 6 deletions

View file

@ -51,6 +51,7 @@
#include <ATC/CommStation.hxx> #include <ATC/CommStation.hxx>
#include <Navaids/NavDataCache.hxx> #include <Navaids/NavDataCache.hxx>
#include <Navaids/navrecord.hxx> #include <Navaids/navrecord.hxx>
#include <Navaids/positioned.hxx>
#include <Airports/groundnetwork.hxx> #include <Airports/groundnetwork.hxx>
#include <Airports/xmlloader.hxx> #include <Airports/xmlloader.hxx>
@ -106,13 +107,10 @@ bool FGAirport::isHeliport() const
return type() == HELIPORT; return type() == HELIPORT;
} }
// Static method
bool FGAirport::isAirportType(FGPositioned* pos) bool FGAirport::isAirportType(FGPositioned* pos)
{ {
if (!pos) { return FGPositioned::isAirportType(pos);
return false;
}
return (pos->type() >= AIRPORT) && (pos->type() <= SEAPORT);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------

View file

@ -74,6 +74,8 @@ class FGAirport : public FGPositioned
return mIsClosed; return mIsClosed;
} }
// True for the following types: AIRPORT, HELIPORT, SEAPORT.
// False for other types, as well as if pos == nullptr.
static bool isAirportType(FGPositioned* pos); static bool isAirportType(FGPositioned* pos);
virtual const std::string& name() const virtual const std::string& name() const

View file

@ -85,6 +85,43 @@ FGPositioned::~FGPositioned()
{ {
} }
// Static method
bool FGPositioned::isAirportType(FGPositioned* pos)
{
if (!pos) {
return false;
}
return (pos->type() >= AIRPORT) && (pos->type() <= SEAPORT);
}
// Static method
bool FGPositioned::isRunwayType(FGPositioned* pos)
{
return (pos && pos->type() == RUNWAY);
}
// Static method
bool FGPositioned::isNavaidType(FGPositioned* pos)
{
if (!pos) {
return false;
}
switch (pos->type()) {
case NDB:
case VOR:
case ILS:
case LOC:
case GS:
case DME:
case TACAN:
return true;
default:
return false;
}
}
FGPositionedRef FGPositionedRef
FGPositioned::createUserWaypoint(const std::string& aIdent, const SGGeod& aPos) FGPositioned::createUserWaypoint(const std::string& aIdent, const SGGeod& aPos)
{ {

View file

@ -98,6 +98,16 @@ public:
Type type() const Type type() const
{ return mType; } { return mType; }
// True for the following types: AIRPORT, HELIPORT, SEAPORT.
// False for other types, as well as if pos == nullptr.
static bool isAirportType(FGPositioned* pos);
// True for the following type: RUNWAY.
// False for other types, as well as if pos == nullptr.
static bool isRunwayType(FGPositioned* pos);
// True for the following types: NDB, VOR, ILS, LOC, GS, DME, TACAN.
// False for other types, as well as if pos == nullptr.
static bool isNavaidType(FGPositioned* pos);
const char* typeString() const const char* typeString() const
{ return nameForType(mType); } { return nameForType(mType); }