1
0
Fork 0

Extend FGPositioned to allow mapping from a string to a type.

This commit is contained in:
jmt 2009-09-26 11:46:42 +00:00 committed by Tim Moore
parent 13ff5da4be
commit 04b30f322d
2 changed files with 41 additions and 2 deletions

View file

@ -31,6 +31,8 @@
#include <simgear/math/sg_geodesy.hxx>
#include <simgear/timing/timestamp.hxx>
#include <simgear/debug/logstream.hxx>
#include <simgear/misc/strutils.hxx>
#include "positioned.hxx"
@ -470,6 +472,39 @@ FGPositioned::cart() const
return SGVec3d::fromGeod(mPosition);
}
FGPositioned::Type FGPositioned::typeFromName(const std::string& aName)
{
typedef struct {
const char* _name;
Type _ty;
} NameTypeEntry;
const NameTypeEntry names[] = {
{"airport", AIRPORT},
{"vor", VOR},
{"ndb", NDB},
{"wpt", WAYPOINT},
{"fix", FIX},
{"tacan", TACAN},
{"dme", DME},
// aliases
{"waypoint", WAYPOINT},
{NULL, INVALID}
};
std::string lowerName(simgear::strutils::convertToLowerCase(aName));
for (const NameTypeEntry* n = names; (n->_name != NULL); ++n) {
if (::strcmp(n->_name, lowerName.c_str()) == 0) {
return n->_ty;
}
}
SG_LOG(SG_GENERAL, SG_WARN, "FGPositioned::typeFromName: couldn't match:" << aName);
return INVALID;
}
const char* FGPositioned::nameForType(Type aTy)
{
switch (aTy) {

View file

@ -188,10 +188,14 @@ public:
*/
static List findClosestN(const SGGeod& aPos, unsigned int aN, double aCutoffNm, Filter* aFilter = NULL);
/**
* Map a candidate type string to a real type. Returns INVALID if the string
* does not correspond to a defined type.
*/
static Type typeFromName(const std::string& aName);
/**
* Debug helper, map a type to a human-readable string
* Map a type to a human-readable string
*/
static const char* nameForType(Type aTy);
protected: