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