void AirspaceWarningManager::Acknowledge(const AbstractAirspace &airspace) { auto *w = GetWarningPtr(airspace); if (w != nullptr) w->Acknowledge(); }
AirspaceWarning& AirspaceWarningManager::GetWarning(const AbstractAirspace &airspace) { AirspaceWarning* warning = GetWarningPtr(airspace); if (warning) return *warning; // not found, create new entry warnings.push_back(AirspaceWarning(airspace)); return warnings.back(); }
AirspaceWarning& AirspaceWarningManager::GetWarning(const AbstractAirspace &airspace) { AirspaceWarning* warning = GetWarningPtr(airspace); if (warning) return *warning; // not found, create new entry ++serial; warnings.emplace_back(airspace); return warnings.back(); }
bool AirspaceWarningManager::UpdateInside(const AircraftState& state, const GlidePolar &glide_polar) { if (!glide_polar.IsValid()) return false; bool found = false; AirspacePredicateAircraftInside condition(state); Airspaces::AirspaceVector results = airspaces.FindInside(state, condition); for (const auto &i : results) { const AbstractAirspace &airspace = i.GetAirspace(); if (!airspace.IsActive()) continue; // ignore inactive airspaces if (!config.IsClassEnabled(airspace.GetType())) continue; AirspaceWarning *warning = GetWarningPtr(airspace); if (warning == nullptr || warning->IsStateAccepted(AirspaceWarning::WARNING_INSIDE)) { GeoPoint c = airspace.ClosestPoint(state.location, GetProjection()); const AirspaceAircraftPerformance perf_glide(glide_polar); AirspaceInterceptSolution solution; airspace.Intercept(state, c, GetProjection(), perf_glide, solution); if (warning == nullptr) warning = GetNewWarningPtr(airspace); warning->UpdateSolution(AirspaceWarning::WARNING_INSIDE, solution); found = true; } } return found; }
bool AirspaceWarningManager::GetAckDay(const AbstractAirspace &airspace) const { const AirspaceWarning *warning = GetWarningPtr(airspace); return (warning != NULL ? warning->GetAckDay() : false); }
bool AirspaceWarningManager::GetAckDay(const AbstractAirspace &airspace) const { const AirspaceWarning *warning = GetWarningPtr(airspace); return warning != nullptr && warning->GetAckDay(); }