void ContinuousTrajectory<Frame>::WriteToMessage( not_null<serialization::ContinuousTrajectory*> const message, Checkpoint const& checkpoint) const { LOG(INFO) << __FUNCTION__; step_.WriteToMessage(message->mutable_step()); tolerance_.WriteToMessage(message->mutable_tolerance()); checkpoint.adjusted_tolerance_.WriteToMessage( message->mutable_adjusted_tolerance()); message->set_is_unstable(checkpoint.is_unstable_); message->set_degree(checkpoint.degree_); message->set_degree_age(checkpoint.degree_age_); for (auto const& s : series_) { if (s.t_max() <= checkpoint.t_max_) { s.WriteToMessage(message->add_series()); } if (s.t_max() == checkpoint.t_max_) { break; } CHECK_LT(s.t_max(), checkpoint.t_max_); } if (first_time_) { first_time_->WriteToMessage(message->mutable_first_time()); } for (auto const& pair : checkpoint.last_points_) { Instant const& instant = pair.first; DegreesOfFreedom<Frame> const& degrees_of_freedom = pair.second; not_null< serialization::ContinuousTrajectory::InstantaneousDegreesOfFreedom*> const instantaneous_degrees_of_freedom = message->add_last_point(); instant.WriteToMessage(instantaneous_degrees_of_freedom->mutable_instant()); degrees_of_freedom.WriteToMessage( instantaneous_degrees_of_freedom->mutable_degrees_of_freedom()); } LOG(INFO) << NAMED(this); LOG(INFO) << NAMED(message->SpaceUsed()); LOG(INFO) << NAMED(message->ByteSize()); }