void Subset<ksp_plugin::Vessel>::Properties::Collect( not_null<PileUps*> const pile_ups) { if (collected_) { return; } collected_ = true; if (!EqualsExistingPileUp()) { if (StrictSubsetOfExistingPileUp()) { vessels_.front()->clear_pile_up(); } pile_ups->emplace_front(std::move(vessels_)); auto const it = pile_ups->begin(); for (not_null<Vessel*> const vessel : it->vessels()) { vessel->set_containing_pile_up(IteratorOn<PileUps>(pile_ups, it)); } } else { PileUp& pile_up = *vessels_.front()->containing_pile_up()->iterator(); pile_up.set_mass(total_mass_); pile_up.set_intrinsic_force(total_intrinsic_force_); } }