void id_type_impl::save(Archive& ar) const { boost::uint32_t dest_locality_id = ar.get_dest_locality_id(); bool requires_incref_handling = false; if(ar.flags() & util::disable_array_optimization) { naming::gid_type split_id( preprocess_gid(dest_locality_id, requires_incref_handling)); ar << split_id << type_ << requires_incref_handling; } else { gid_serialization_data data; data.gid_ = preprocess_gid(dest_locality_id, requires_incref_handling); data.type_ = type_; data.requires_incref_handling_ = requires_incref_handling; ar.save(data); } }
// serialization void id_type_impl::save(serialization::output_archive& ar, unsigned) const { if(ar.is_future_awaiting()) { preprocess_gid(ar); return; } // Avoid performing side effects if the archive is not saving the // data. if (ar.is_saving()) { id_type_management type = type_; gid_type new_gid; if (unmanaged == type_) { new_gid = *this; } else if(managed_move_credit == type_) { // all credits will be moved to the returned gid new_gid = move_gid(const_cast<id_type_impl&>(*this)); type = managed; } else { new_gid = ar.get_new_gid(*this); HPX_ASSERT(new_gid != invalid_gid); } gid_serialization_data data { new_gid, type }; ar << data; } else { gid_serialization_data data { *this, type_ }; ar << data; } }