bool Trace::optimise_if_old() { assert(cached_size == delta_list.size()); assert(cached_size == chronological_list.Count()); if (size() >= m_max_points) { // first remove points outside max time range bool updated = erase_earlier_than(get_min_time()); if (size() >= m_opt_points) // if still too big, remove points based on line simplification updated |= erase_delta(m_opt_points, no_thin_time); if (!updated) return false; } else if (size() * 2 == m_max_points) { // half size, appropriate time to remove old points if (!erase_earlier_than(get_min_time())) return false; } else return false; m_average_delta_distance = calc_average_delta_distance(no_thin_time); m_average_delta_time = calc_average_delta_time(no_thin_time); return true; }
void Trace::Thin2() { const unsigned target_size = m_opt_points; assert(size() > target_size); // first remove points outside max time range erase_earlier_than(get_min_time()); if (size() <= target_size) return; // if still too big, remove points based on line simplification erase_delta(target_size, no_thin_time); if (size() <= target_size) return; // if still too big, thin again, ignoring recency erase_delta(target_size, no_thin_time); assert(size() <= target_size); }