Example #1
0
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;
}
Example #2
0
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);
}