}
}
+static bool validateFilter(FGPositioned::Filter* filter)
+{
+ if (filter->maxType() < filter->minType()) {
+ SG_LOG(SG_GENERAL, SG_WARN, "invalid positioned filter specified");
+ return false;
+ }
+
+ return true;
+}
+
///////////////////////////////////////////////////////////////////////////////
{
validateSGGeod(aPos);
+ if (!validateFilter(aFilter)) {
+ return FGPositionedList();
+ }
+
FGPositionedList result;
Octree::findAllWithinRange(SGVec3d::fromGeod(aPos),
aRangeNm * SG_NM_TO_METER, aFilter, result, 0xffffff);
{
validateSGGeod(aPos);
+ if (!validateFilter(aFilter)) {
+ return FGPositionedList();
+ }
+
int limitMsec = 32;
FGPositionedList result;
aPartial = Octree::findAllWithinRange(SGVec3d::fromGeod(aPos),
FGPositionedList
FGPositioned::findAllWithIdent(const std::string& aIdent, Filter* aFilter, bool aExact)
{
+ if (!validateFilter(aFilter)) {
+ return FGPositionedList();
+ }
+
return NavDataCache::instance()->findAllWithIdent(aIdent, aFilter, aExact);
}
FGPositionedList
FGPositioned::findAllWithName(const std::string& aName, Filter* aFilter, bool aExact)
{
+ if (!validateFilter(aFilter)) {
+ return FGPositionedList();
+ }
+
return NavDataCache::instance()->findAllWithName(aName, aFilter, aExact);
}
{
validateSGGeod(aPos);
+ if (!validateFilter(aFilter)) {
+ return NULL;
+ }
+
FGPositionedList l(findClosestN(aPos, 1, aCutoffNm, aFilter));
if (l.empty()) {
return NULL;
{
SGGeod pos = getPosition(ctx);
double range_nm = ctx.requireArg<double>(0);
-
- FGPositioned::Type ty = FGPositioned::typeFromName(ctx.getArg<std::string>(1));
- if (ty == FGPositioned::INVALID)
- naRuntimeError(ctx.c, "invalid filter type specification");
+
+ std::string typeSpec = ctx.getArg<std::string>(1);
+ FGPositioned::TypeFilter filter(FGPositioned::TypeFilter::fromString(typeSpec));
- FGPositioned::TypeFilter filter(ty);
-
FGPositionedList items = FGPositioned::findWithinRange(pos, range_nm, &filter);
FGPositioned::sortByRange(items, pos);
return ctx.to_nasal(items);