inline GeoVector TaskLeg::GetRemainingVector(const GeoPoint &ref) const { switch (destination.GetActiveState()) { case OrderedTaskPoint::AFTER_ACTIVE: // this leg totally included return GetPlannedVector(); case OrderedTaskPoint::CURRENT_ACTIVE: { // this leg partially included if (!ref.IsValid()) /* if we don't have a GPS fix yet, we fall back to the "planned" vector unless this task leg has already been achieved */ return destination.HasEntered() ? GeoVector::Zero() : GetPlannedVector(); return memo_remaining.calc(ref, destination.GetLocationRemaining()); } case OrderedTaskPoint::BEFORE_ACTIVE: // this leg not included return GeoVector::Zero(); } gcc_unreachable(); assert(false); return GeoVector::Invalid(); }
fixed TaskLeg::ScanDistancePlanned() { vector_planned = GetPlannedVector(); return vector_planned.distance + (GetNext() ? GetNext()->ScanDistancePlanned() : fixed_zero); }
double TaskLeg::ScanDistancePlanned() { vector_planned = GetPlannedVector(); return vector_planned.distance + (GetNext() ? GetNext()->ScanDistancePlanned() : 0); }
inline GeoVector TaskLeg::GetRemainingVector(const GeoPoint &ref) const { switch (destination.GetActiveState()) { case OrderedTaskPoint::AFTER_ACTIVE: // this leg totally included return GetPlannedVector(); case OrderedTaskPoint::CURRENT_ACTIVE: // this leg partially included return memo_remaining.calc(ref, destination.GetLocationRemaining()); case OrderedTaskPoint::BEFORE_ACTIVE: // this leg not included return GeoVector::Zero(); } gcc_unreachable(); assert(false); return GeoVector::Invalid(); }