예제 #1
0
void
AirspaceNearestSort::visit_sorted(const Airspaces &airspaces,
                                  AirspaceVisitor &visitor,
                                  const fixed range) 
{
  populate_queue(airspaces, range);

  while (!m_q.empty()) {
    visitor.Visit(*m_q.top().second.second.get_airspace());
    m_q.pop();
  } 
}
예제 #2
0
void
Airspaces::VisitInside(const GeoPoint &loc,
                        AirspaceVisitor& visitor) const
{
  if (empty()) return; // nothing to do

  Airspace bb_target(loc, task_projection);
  AirspaceVector vectors;
  airspace_tree.find_within_range(bb_target, 0, std::back_inserter(vectors));

  for (auto &v : vectors)
    if (v.IsInside(loc))
      visitor.Visit(v);
}
예제 #3
0
void
Airspaces::visit_inside(const GeoPoint &loc,
                        AirspaceVisitor& visitor) const
{
  if (empty()) return; // nothing to do

  Airspace bb_target(loc, task_projection);
  AirspaceVector vectors;
  airspace_tree.find_within_range(bb_target, 0, std::back_inserter(vectors));

  for (auto v = vectors.begin(); v != vectors.end(); ++v) {
    if ((*v).inside(loc))
      visitor.Visit(*v);
  }
}
예제 #4
0
void
Airspaces::VisitInside(const GeoPoint &loc, AirspaceVisitor &visitor) const
{
  if (IsEmpty())
    // nothing to do
    return;

  Airspace bb_target(loc, task_projection);

  std::function<void(const Airspace &)> visitor2 =
    [&loc, &visitor](const Airspace &v){
    if (v.IsInside(loc))
      visitor.Visit(v);
  };

  airspace_tree.visit_within_range(bb_target, 0, visitor2);
}
예제 #5
0
 void visit_inside(AirspaceVisitor &visitor) const {
   for (auto it = ids_inside.begin(), end = ids_inside.end(); it != end; ++it)
     if (!is_acked(**it))
       visitor.Visit(**it);
 }
예제 #6
0
 void visit_warned(AirspaceVisitor &visitor) const {
   for (auto it = ids_warning.begin(), end = ids_warning.end(); it != end; ++it)
     if (!is_acked(**it))
       visitor.Visit(**it);
 }
예제 #7
0
 void operator()(Airspace as) {
   AbstractAirspace &aas = *as.get_airspace();
   if (predicate->condition(aas))
     visitor->Visit(as);
 }
예제 #8
0
 void operator()(Airspace as) {
   AbstractAirspace &aas = *as.GetAirspace();
   if (predicate->operator()(aas))
     visitor->Visit(as);
 }
예제 #9
0
 void VisitWarnings(AirspaceVisitor &visitor) const {
   for (auto it = ids_warning.begin(), end = ids_warning.end(); it != end; ++it)
     if (!IsAcked(**it))
       visitor.Visit(**it);
 }