void Trace::GetPoints(TracePointVector &v, unsigned min_time, const GeoPoint &location, fixed min_distance) const { /* skip the trace points that are before min_time */ Trace::const_iterator i = begin(), end = this->end(); unsigned skipped = 0; while (true) { if (i == end) /* nothing left */ return; if (i->GetTime() >= min_time) /* found the first point that is within range */ break; ++i; ++skipped; } assert(skipped < size()); v.reserve(size() - skipped); const unsigned range = ProjectRange(location, min_distance); const unsigned sq_range = range * range; do { v.push_back(*i); i.NextSquareRange(sq_range, end); } while (i != end); }
void OLCLeague::copy_solution(TracePointVector &vec) const { vec.clear(); vec.reserve(5); if (solution_found) { for (unsigned i = 0; i < 5; ++i) vec.push_back(best_solution[i]); } }
void OLCDijkstra::copy_solution(TracePointVector &vec) { vec.clear(); if (solution_found) { vec.reserve(num_stages); for (unsigned i = 0; i < num_stages; ++i) vec.push_back(best_solution[i]); } }
TracePointVector Trace::get_trace_points(const unsigned max_points) const { if (max_points == 2) { if (trace_tree.size()<2) { return TracePointVector(); } // special case - just look for points within time range TracePoint p; unsigned tmin = (unsigned)-1; for (TraceTree::const_iterator tr = trace_tree.begin(); tr != trace_tree.end(); ++tr) { if (inside_time_window(tr->time) && (tr->time< tmin)) { p = *tr; tmin = tr->time; } } TracePointVector v; v.push_back(p); v.push_back(m_last_point); return v; } TracePointSet tset(begin(), end()); if (tset.empty()) return TracePointVector(); TracePointList tlist(tset.begin(), tset.end()); unsigned mrange = 3; while (tlist.size() > max_points) { thin_trace(tlist, mrange); mrange = (mrange * 4) / 3; } return TracePointVector(tlist.begin(), tlist.end()); }