{"action":"created","comment":{"url":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls/comments/36659153","id":36659153,"diff_hunk":"@@ -9,698 +10,343 @@\n #if !defined(HPX_PARCELSET_PARCEL_MAR_26_2008_1051AM)\n #define HPX_PARCELSET_PARCEL_MAR_26_2008_1051AM\n \n-#include <hpx/hpx_fwd.hpp>\n+#include <hpx/config.hpp>\n #include <hpx/exception.hpp>\n-#include <hpx/runtime/actions/component_action.hpp>\n+#include <hpx/runtime/actions/transfer_action.hpp>\n+#if defined(HPX_DEBUG)\n #include <hpx/runtime/components/component_type.hpp>\n+#endif\n #include <hpx/runtime/naming/name.hpp>\n #include <hpx/runtime/naming/address.hpp>\n-#include <hpx/runtime/parcelset/policies/message_handler.hpp>\n-#include <hpx/runtime/serialization/binary_filter.hpp>\n-#include <hpx/runtime/serialization/serialize.hpp>\n+#include <hpx/runtime/serialization/input_archive.hpp>\n+#include <hpx/runtime/serialization/output_archive.hpp>\n+#include <hpx/traits/is_bitwise_serializable.hpp>\n+#include <hpx/traits/is_action.hpp>\n+#include <hpx/traits/is_continuation.hpp>\n #include <hpx/util/assert.hpp>\n-#include <hpx/traits/serialize_as_future.hpp>\n \n #include <boost/intrusive_ptr.hpp>\n #include <boost/detail/atomic_count.hpp>\n \n+#include <memory>\n+\n #include <hpx/config/warnings_prefix.hpp>\n \n-///////////////////////////////////////////////////////////////////////////////\n-//  parcel serialization format version\n-#define HPX_PARCEL_VERSION 0x80\n+namespace hpx { namespace serialization\n+{\n+    struct binary_filter;\n+}}\n+namespace hpx { namespace parcelset { namespace policies\n+{\n+    struct message_handler;\n+}}}\n \n-///////////////////////////////////////////////////////////////////////////////\n namespace hpx { namespace parcelset\n {\n-    class HPX_EXPORT parcel;\n-\n-    namespace detail\n+    class HPX_EXPORT parcel\n     {\n-        ///////////////////////////////////////////////////////////////////////////\n-        class HPX_EXPORT parcel_data\n-        {\n-        public:\n-            parcel_data()\n-              : count_(0)\n-            {}\n-\n-            parcel_data(actions::base_action* act)\n-              : count_(0), action_(act)\n-            {}\n-\n-            parcel_data(actions::action_type act)\n-              : count_(0), action_(act)\n-            {}\n-\n-            parcel_data(actions::base_action* act,\n-                   actions::continuation* do_after)\n-              : count_(0),\n-                action_(act), continuation_(do_after)\n-            {}\n+        HPX_MOVABLE_BUT_NOT_COPYABLE(parcel);\n+    public:\n \n-            parcel_data(actions::base_action* act,\n-                    actions::continuation_type do_after)\n-              : count_(0),\n-                action_(act), continuation_(do_after)\n+        struct data\n+        {\n+            data()\n+              : start_time_(0),\n+                creation_time_(0),\n+                has_source_id_(false)\n             {}\n \n-            virtual ~parcel_data() {}\n-\n-            virtual bool is_multi_destination() const = 0;\n-            virtual std::size_t size() const = 0;\n-\n-            ///\n-            virtual void set_start_time(double starttime) = 0;\n-            virtual double get_start_time() const = 0;\n-            virtual double get_creation_time() const = 0;\n-\n-            /// get and set the destination id\n-            virtual naming::id_type* get_destinations() = 0;\n-            virtual naming::id_type const* get_destinations() const = 0;\n-            virtual void set_destination(naming::id_type const& dest) = 0;\n-#if defined(HPX_SUPPORT_MULTIPLE_PARCEL_DESTINATIONS)\n-            virtual void set_destinations(std::vector<naming::id_type> const& dests) = 0;\n-#endif\n-            /// get and set the destination address\n-            virtual naming::address* get_destination_addrs() = 0;\n-            virtual naming::address const* get_destination_addrs() const = 0;\n-            virtual void set_destination_addr(naming::address const& addr) = 0;\n-#if defined(HPX_SUPPORT_MULTIPLE_PARCEL_DESTINATIONS)\n-            virtual void set_destination_addrs(std::vector<naming::address> const& addrs) = 0;\n-#endif\n-            virtual boost::uint32_t get_destination_locality_id() const = 0;\n-            virtual naming::gid_type const& get_destination_locality() const = 0;\n-\n-            virtual naming::gid_type get_parcel_id() const = 0;\n-            virtual void set_parcel_id(naming::gid_type const& id) = 0;\n-\n-            virtual bool does_termination_detection() const = 0;\n-\n-            virtual void wait_for_futures() = 0;\n-\n-            // default copy constructor is ok\n-            // default assignment operator is ok\n-\n-            /// get and set the source locality/component id\n-            naming::id_type& get_source()\n-            {\n-                return source_id_;\n-            }\n-            naming::id_type const& get_source() const\n-            {\n-                return source_id_;\n-            }\n-            void set_source(naming::id_type const& source_id)\n-            {\n-                source_id_ = source_id;\n-            }\n-\n-            actions::action_type get_action() const\n-            {\n-                return action_;\n-            }\n-\n-            actions::continuation_type get_continuation() const\n-            {\n-                return continuation_;\n-            }\n-\n-            threads::thread_priority get_thread_priority() const\n-            {\n-                HPX_ASSERT(action_);\n-                return action_->get_thread_priority();\n-            }\n-\n-            serialization::binary_filter* get_serialization_filter(parcelset::parcel const& p) const\n-            {\n-                return action_->get_serialization_filter(p);\n-            }\n-\n-            policies::message_handler* get_message_handler(\n-                parcelset::parcelhandler* ph, locality const& loc,\n-                parcelset::parcel const& p) const\n+            template <typename Archive>\n+            void serialize(Archive &ar, unsigned)\n             {\n-                return action_->get_message_handler(ph, loc, p);\n+                ar & parcel_id_;\n+                ar & start_time_;\n+                ar & creation_time_;\n+                ar & has_source_id_;\n             }\n \n-        protected:\n-            void save(serialization::output_archive& ar, bool has_source_id, bool has_continuation) const;\n-\n-            void load(serialization::input_archive& ar, bool has_source_id, bool has_continuation);\n-\n-        private:\n-            friend void intrusive_ptr_add_ref(parcel_data* p);\n-            friend void intrusive_ptr_release(parcel_data* p);\n+            naming::gid_type parcel_id_;\n+            double start_time_;\n+            double creation_time_;\n \n-            boost::detail::atomic_count count_;\n-\n-        protected:\n-            naming::id_type source_id_;\n-            actions::action_type action_;\n-            actions::continuation_type continuation_;\n+            bool has_source_id_;\n         };\n \n-        /// support functions for boost::intrusive_ptr\n-        inline void intrusive_ptr_add_ref(parcel_data* p)\n-        {\n-            ++p->count_;\n-        }\n+        parcel() {}\n \n-        inline void intrusive_ptr_release(parcel_data* p)\n+        template <\n+            typename Action\n+          , typename...Args\n+          , typename Enable = typename std::enable_if<traits::is_action<Action>::value>::type\n+          >\n+        parcel(\n+            naming::id_type const& dests,\n+            naming::address const& addrs,\n+            Action,\n+            Args &&... args\n+        )\n+#if defined(HPX_SUPPORT_MULTIPLE_PARCEL_DESTINATIONS)\n+          : dests_(1, dests),\n+            addrs_(1, addrs),\n+#else\n+          : dests_(dests),\n+            addrs_(addrs),\n+#endif\n+            action_(new actions::transfer_action<Action>(std::forward<Args>(args)...))\n         {\n-            if (0 == --p->count_)\n-                delete p;\n+            HPX_ASSERT(components::types_are_compatible(\n+                action_->get_component_type(), addrs.type_));\n         }\n \n-        ///////////////////////////////////////////////////////////////////////\n-        // part of the parcel data is stored in a contigious memory area, which\n-        // helps improving serialization times\n-\n-        // single-destination buffer\n-        class single_destination_parcel_data : public parcel_data\n-        {\n-        public:\n-            single_destination_parcel_data()\n-            {\n-                data_.start_time_ = 0;\n-                data_.creation_time_ = 0;\n-                data_.has_source_id_ = 0;\n-                data_.has_continuation_ = 0;\n-            }\n-\n-            single_destination_parcel_data(naming::id_type const& apply_to,\n-                    naming::address const& addr, actions::base_action* act)\n-              : parcel_data(act)\n-              , dest_(apply_to)\n-              , addr_(addr)\n-            {\n-                data_.start_time_ = 0;\n-                data_.creation_time_ = 0;\n-                data_.has_source_id_ = 0;\n-                data_.has_continuation_ = 0;\n-\n-                HPX_ASSERT(components::types_are_compatible(\n-                    act->get_component_type(), addr.type_));\n-            }\n-\n-            single_destination_parcel_data(naming::id_type const& apply_to,\n-                    naming::address const& addr, actions::base_action* act,\n-                   actions::continuation* do_after)\n-              : parcel_data(act, do_after)\n-              , dest_(apply_to)\n-              , addr_(addr)\n-            {\n-                data_.start_time_ = 0;\n-                data_.creation_time_ = 0;\n-                data_.has_source_id_ = 0;\n-                data_.has_continuation_ = do_after ? 1 : 0;\n-\n-                HPX_ASSERT(components::types_are_compatible(\n-                    act->get_component_type(), addr.type_));\n-            }\n-\n-            single_destination_parcel_data(naming::id_type const& apply_to,\n-                    naming::address const& addr, actions::base_action* act,\n-                    actions::continuation_type do_after)\n-              : parcel_data(act, do_after)\n-              , dest_(apply_to)\n-              , addr_(addr)\n-            {\n-                data_.start_time_ = 0;\n-                data_.creation_time_ = 0;\n-                data_.has_source_id_ = 0;\n-                data_.has_continuation_ = do_after ? 1 : 0;\n-\n-                HPX_ASSERT(components::types_are_compatible(\n-                    act->get_component_type(), addr.type_));\n-            }\n-\n-            bool is_multi_destination() const { return false; }\n-            std::size_t size() const { return 1ul; }\n-\n-            ///\n-            void set_start_time(double starttime)\n-            {\n-                data_.start_time_ = starttime;\n-                if (std::abs(data_.creation_time_) < 1e-10)\n-                    data_.creation_time_ = starttime;\n-            }\n-            double get_start_time() const\n-            {\n-                return data_.start_time_;\n-            }\n-            double get_creation_time() const\n-            {\n-                return data_.creation_time_;\n-            }\n-\n-            /// get and set the destination id\n-            naming::id_type* get_destinations()\n-            {\n-                return &dest_;\n-            }\n-            naming::id_type const* get_destinations() const\n-            {\n-                return &dest_;\n-            }\n-            void set_destination(naming::id_type const& dest)\n-            {\n-                dest_ = dest;\n-            }\n #if defined(HPX_SUPPORT_MULTIPLE_PARCEL_DESTINATIONS)\n-            void set_destinations(std::vector<naming::id_type> const& dests)\n-            {\n-                HPX_ASSERT(false);\n-            }\n-#endif\n-            /// get and set the destination address\n-            naming::address* get_destination_addrs()\n-            {\n-                return &addr_;\n-            }\n-            naming::address const* get_destination_addrs() const\n-            {\n-                return &addr_;\n-            }\n-            void set_destination_addr(naming::address const& addr)\n-            {\n-                addr_ = addr;\n-            }\n-#if defined(HPX_SUPPORT_MULTIPLE_PARCEL_DESTINATIONS)\n-            void set_destination_addrs(std::vector<naming::address> const& addrs)\n-            {\n-                HPX_ASSERT(false);\n-            }\n-#endif\n-            boost::uint32_t get_destination_locality_id() const\n-            {\n-                return naming::get_locality_id_from_id(dest_);\n-            }\n-\n-            ///\n-            naming::gid_type const& get_destination_locality() const\n-            {\n-                return addr_.locality_;\n-            }\n-\n-            naming::gid_type get_parcel_id() const\n-            {\n-                return data_.parcel_id_;\n-            }\n-            void set_parcel_id(naming::gid_type const& id)\n-            {\n-                data_.parcel_id_ = id;\n-            }\n-\n-            bool does_termination_detection() const\n-            {\n-                return this->get_action()->does_termination_detection();\n-            }\n-\n-            void wait_for_futures()\n-            {\n-                actions::continuation_type const& cont = this->get_continuation();\n-                if (cont)\n-                    cont->wait_for_futures();\n-                this->get_action()->wait_for_futures();\n-            }\n-\n-            void save(serialization::output_archive& ar) const;\n-\n-            void load(serialization::input_archive& ar);\n-\n-        private:\n-            friend std::ostream& operator<< (std::ostream& os,\n-                single_destination_parcel_data const& req);\n-\n-            // the parcel data is wrapped into a separate struct to simplify\n-            // serialization\n-            struct parcel_buffer\n+        template <\n+            typename Action\n+          , typename...Args\n+          , typename Enable = typename std::enable_if<traits::is_action<Action>::value>::type\n+          >\n+        parcel(\n+            std::vector<naming::id_type> const& dests,\n+            std::vector<naming::address> const& addrs,\n+            Action,\n+            Args &&... args\n+        )\n+          : dests_(dests),\n+            addrs_(addrs),\n+            action_(new actions::transfer_action<Action>(std::forward<Args>(args)...))\n+        {\n+            HPX_ASSERT(dests_.size() == addrs_.size());\n+#if defined(HPX_DEBUG)\n+            if (!dests_.empty() && addrs_[0].locality_)\n             {\n-                // actual parcel data\n-                naming::gid_type parcel_id_;\n-                double start_time_;\n-                double creation_time_;\n-\n-                // data needed just for serialization purposes\n-                boost::uint64_t dest_size_;\n-                mutable boost::uint8_t has_source_id_;\n-                boost::uint8_t has_continuation_;\n-\n-                template <class Archive>\n-                void serialize(Archive& ar, unsigned int)\n+                // all destinations have to be on the same locality\n+                naming::gid_type dest = destination_locality();\n+                for (std::size_t i = 1; i != addrs_.size(); ++i)\n                 {\n-                  ar & parcel_id_ & start_time_ &\n-                    creation_time_ & dest_size_ &\n-                    has_source_id_ & has_continuation_;\n+                    HPX_ASSERT(dest == addrs_[i].locality_);\n                 }\n-            };\n-\n-            parcel_buffer data_;\n-\n-            // other parcel data\n-            naming::id_type dest_;\n-            naming::address addr_;\n-        };\n-\n-#if defined(HPX_SUPPORT_MULTIPLE_PARCEL_DESTINATIONS)\n-        ///////////////////////////////////////////////////////////////////////\n-        // multi-destination parcel buffer\n-        class multi_destination_parcel_data : public parcel_data\n-        {\n-        public:\n-            multi_destination_parcel_data()\n-            {\n-                data_.start_time_ = 0;\n-                data_.creation_time_ = 0;\n-                data_.dest_size_ = 0;\n-                data_.has_source_id_ = 0;\n-                data_.has_continuation_ = 0;\n-            }\n \n-            multi_destination_parcel_data(\n-                    std::vector<naming::id_type> const& apply_to,\n-                    std::vector<naming::address> const& addrs,\n-                    actions::action_type act)\n-              : parcel_data(act)\n-              , dests_(apply_to)\n-              , addrs_(addrs)\n-            {\n-                data_.start_time_ = 0;\n-                data_.creation_time_ = 0;\n-                data_.dest_size_ = apply_to.size();\n-                data_.has_source_id_ = 0;\n-                data_.has_continuation_ = 0;\n-\n-#if defined(HPX_DEBUG)\n-                HPX_ASSERT(dests_.size() == addrs_.size());\n-                if (!dests_.empty() && addrs[0].locality_)\n+                // all destination component types are properly matched\n+                int comptype = action_->get_component_type();\n+                for (std::size_t i = 0; i != addrs_.size(); ++i)\n                 {\n-                    // all destinations have to be on the same locality\n-                    naming::gid_type dest = get_destination_locality();\n-                    for (std::size_t i = 1; i != addrs.size(); ++i)\n-                    {\n-                        HPX_ASSERT(dest == addrs[i].locality_);\n-                    }\n-\n-                    // all destination component types are properly matched\n-                    int comptype = act->get_component_type();\n-                    for (std::size_t i = 0; i != addrs.size(); ++i)\n-                    {\n-                        HPX_ASSERT(components::types_are_compatible(\n-                            comptype, addrs[i].type_));\n-                    }\n-                    HPX_UNUSED(comptype);\n+                    HPX_ASSERT(components::types_are_compatible(\n+                        comptype, addrs[i].type_));\n                 }\n-#endif\n-            }\n-\n-            bool is_multi_destination() const { return true; }\n-            std::size_t size() const { return data_.dest_size_; }\n-\n-            ///\n-            void set_start_time(double starttime)\n-            {\n-                data_.start_time_ = starttime;\n-                if (std::abs(data_.creation_time_) < 1e-10)\n-                    data_.creation_time_ = starttime;\n-            }\n-            double get_start_time() const\n-            {\n-                return data_.start_time_;\n-            }\n-            double get_creation_time() const\n-            {\n-                return data_.creation_time_;\n-            }\n-\n-            /// get and set the destination id\n-            naming::id_type* get_destinations()\n-            {\n-                return dests_.data();\n-            }\n-            naming::id_type const* get_destinations() const\n-            {\n-                return dests_.data();\n-            }\n-            void set_destination(naming::id_type const& dest)\n-            {\n-                HPX_ASSERT(false);\n-            }\n-            void set_destinations(std::vector<naming::id_type> const& dests)\n-            {\n-                dests_ = dests;\n-            }\n-\n-            /// get and set the destination address\n-            naming::address* get_destination_addrs()\n-            {\n-                return addrs_.data();\n-            }\n-            naming::address const* get_destination_addrs() const\n-            {\n-                return addrs_.data();\n-            }\n-            void set_destination_addr(naming::address const& addr)\n-            {\n-                HPX_ASSERT(false);\n+                HPX_UNUSED(comptype);\n             }\n-#if defined(HPX_SUPPORT_MULTIPLE_PARCEL_DESTINATIONS)\n-            void set_destination_addrs(std::vector<naming::address> const& addrs)\n-            {\n-                addrs_ = addrs;\n-            }\n-#endif\n-            boost::uint32_t get_destination_locality_id() const\n-            {\n-                return naming::get_locality_id_from_id(dests_[0]);\n-            }\n-\n-            ///\n-            naming::gid_type const& get_destination_locality() const\n-            {\n-                HPX_ASSERT(!addrs_.empty());\n-                return addrs_[0].locality_;\n-            }\n-\n-            naming::gid_type get_parcel_id() const\n-            {\n-                return data_.parcel_id_;\n-            }\n-            void set_parcel_id(naming::gid_type const& id)\n-            {\n-                data_.parcel_id_ = id;\n-            }\n-\n-            void save(serialization::output_archive& ar) const;\n-\n-            void load(serialization::input_archive& ar);\n-\n-        private:\n-            friend std::ostream& operator<< (std::ostream& os,\n-                multi_destination_parcel_data const& req);\n-\n-            // the parcel data is wrapped into a separate struct to simplify\n-            // serialization\n-            struct parcel_buffer\n-            {\n-                // actual parcel data\n-                naming::gid_type parcel_id_;\n-                double start_time_;\n-                double creation_time_;\n-\n-                // data needed just for serialization purposes\n-                boost::uint64_t dest_size_;\n-                mutable boost::uint8_t has_source_id_;\n-                boost::uint8_t has_continuation_;\n-\n-                template <class Archive>\n-                void serialize(Archive& ar, unsigned int)\n-                {\n-                  ar & parcel_id_ & start_time_ &\n-                    creation_time_ & dest_size_ &\n-                    has_source_id_ & has_continuation_;\n-                }\n-            };\n-            parcel_buffer data_;\n-\n-            // more parcel data\n-            std::vector<naming::id_type> dests_;\n-            std::vector<naming::address> addrs_;\n-        };\n #endif\n-    }\n-\n-    ///////////////////////////////////////////////////////////////////////////\n-    class HPX_EXPORT parcel\n-    {\n-    public:\n-        parcel() {}\n-\n-        parcel(naming::id_type const& apply_to,\n-                naming::address const& addrs, actions::base_action* act)\n-          : data_(new detail::single_destination_parcel_data(apply_to, addrs, act))\n-        {\n         }\n+#endif\n \n+        template <\n+            typename Continuation\n+          , typename Action\n+          , typename...Args\n+          , typename Enable\n+                = typename std::enable_if<\n+                    traits::is_action<Action>::value\n+                 && traits::is_continuation<Continuation>::value\n+                 && !std::is_same<\n+                        Continuation\n+                      , std::unique_ptr<actions::continuation>\n+                    >::value\n+                >::type\n+          >\n+        parcel(\n+            naming::id_type const& dests,\n+            naming::address const& addrs,\n+            Continuation && cont,\n+            Action,\n+            Args &&... args\n+        )\n #if defined(HPX_SUPPORT_MULTIPLE_PARCEL_DESTINATIONS)\n-        parcel(std::vector<naming::id_type> const& apply_to,\n-                std::vector<naming::address> const& addrs,\n-                actions::action_type act)\n-          : data_(new detail::multi_destination_parcel_data(apply_to, addrs, act))\n-        {\n-        }\n+          : dests_(1, dests),\n+            addrs_(1, addrs),\n+#else\n+          : dests_(dests),\n+            addrs_(addrs),\n #endif\n-\n-        parcel(naming::id_type const& apply_to,\n-                naming::address const& addrs, actions::base_action* act,\n-                actions::continuation* do_after)\n-          : data_(new detail::single_destination_parcel_data(apply_to, addrs, act, do_after))\n+            cont_(\n+                new typename util::decay<Continuation>::type(std::forward<Continuation>(cont))\n+            ),\n+            action_(new actions::transfer_action<Action>(std::forward<Args>(args)...))\n+        {\n+            HPX_ASSERT(components::types_are_compatible(\n+                action_->get_component_type(), this->addrs()[0].type_\n+            ));\n+        }\n+\n+        template <\n+            typename Action\n+          , typename...Args\n+          , typename Enable\n+                = typename std::enable_if<\n+                    traits::is_action<Action>::value\n+                >::type\n+          >\n+        parcel(\n+            naming::id_type const& dests,\n+            naming::address const& addrs,\n+            std::unique_ptr<actions::continuation> cont,\n+            Action,\n+            Args &&... args\n+        )\n+#if defined(HPX_SUPPORT_MULTIPLE_PARCEL_DESTINATIONS)\n+          : dests_(1, dests),\n+            addrs_(1, addrs),\n+#else\n+          : dests_(dests),\n+            addrs_(addrs),\n+#endif\n+            cont_(std::move(cont)),\n+            action_(new actions::transfer_action<Action>(std::forward<Args>(args)...))\n         {\n+            HPX_ASSERT(components::types_are_compatible(\n+                action_->get_component_type(), this->addrs()[0].type_\n+            ));\n         }\n \n-        parcel(naming::id_type const& apply_to,\n-                naming::address const& addrs, actions::base_action* act,\n-                actions::continuation_type do_after)\n-          : data_(new detail::single_destination_parcel_data(apply_to, addrs, act, do_after))\n-        {\n-        }\n+        parcel(parcel && other)\n+          : data_(std::move(other.data_)),\n+            source_id_(std::move(other.source_id_)),\n+            dests_(std::move(other.dests_)),\n+            addrs_(std::move(other.addrs_)),\n+            cont_(std::move(other.cont_)),\n+            action_(std::move(other.action_))\n+       {}","path":"hpx/runtime/parcelset/parcel.hpp","position":726,"original_position":726,"commit_id":"eeb3c716e238756c98e96d54d0dc5686773d0257","original_commit_id":"eeb3c716e238756c98e96d54d0dc5686773d0257","user":{"login":"sithhell","id":53655,"avatar_url":"https://avatars.githubusercontent.com/u/53655?v=3","gravatar_id":"","url":"https://api.github.com/users/sithhell","html_url":"https://github.com/sithhell","followers_url":"https://api.github.com/users/sithhell/followers","following_url":"https://api.github.com/users/sithhell/following{/other_user}","gists_url":"https://api.github.com/users/sithhell/gists{/gist_id}","starred_url":"https://api.github.com/users/sithhell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sithhell/subscriptions","organizations_url":"https://api.github.com/users/sithhell/orgs","repos_url":"https://api.github.com/users/sithhell/repos","events_url":"https://api.github.com/users/sithhell/events{/privacy}","received_events_url":"https://api.github.com/users/sithhell/received_events","type":"User","site_admin":false},"body":"I will check again if everything still works with removing it. While making those changes I needed it at least one point in time. Do we have `parcel(parcel && other) = default` available?","created_at":"2015-08-10T17:30:26Z","updated_at":"2015-08-10T17:30:26Z","html_url":"https://github.com/STEllAR-GROUP/hpx/pull/1711#discussion_r36659153","pull_request_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls/1711","_links":{"self":{"href":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls/comments/36659153"},"html":{"href":"https://github.com/STEllAR-GROUP/hpx/pull/1711#discussion_r36659153"},"pull_request":{"href":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls/1711"}}},"pull_request":{"url":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls/1711","id":42019154,"html_url":"https://github.com/STEllAR-GROUP/hpx/pull/1711","diff_url":"https://github.com/STEllAR-GROUP/hpx/pull/1711.diff","patch_url":"https://github.com/STEllAR-GROUP/hpx/pull/1711.patch","issue_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/issues/1711","number":1711,"state":"open","locked":false,"title":"Simplify parcel","user":{"login":"sithhell","id":53655,"avatar_url":"https://avatars.githubusercontent.com/u/53655?v=3","gravatar_id":"","url":"https://api.github.com/users/sithhell","html_url":"https://github.com/sithhell","followers_url":"https://api.github.com/users/sithhell/followers","following_url":"https://api.github.com/users/sithhell/following{/other_user}","gists_url":"https://api.github.com/users/sithhell/gists{/gist_id}","starred_url":"https://api.github.com/users/sithhell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sithhell/subscriptions","organizations_url":"https://api.github.com/users/sithhell/orgs","repos_url":"https://api.github.com/users/sithhell/repos","events_url":"https://api.github.com/users/sithhell/events{/privacy}","received_events_url":"https://api.github.com/users/sithhell/received_events","type":"User","site_admin":false},"body":"This PR simplifies `hpx::parcelset::parcel` this includes:\r\n- Removing `shared_ptr` and `intrusive_ptr` inside of parcel\r\n- Making `parcel` move only, due to `std::unique_ptr` member\r\n- Removing `action_manager` to reduce latencies and avoid copies\r\n- Removing `hpx::actions::continuation_type` and `hpx::actions::action_type`\r\n- Some fly-by-changes for removing some hpx_fwd.hpp includes","created_at":"2015-08-10T13:23:20Z","updated_at":"2015-08-10T17:30:26Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3c813a1a26a1963e13ca2cfa9901f270c6389574","assignee":null,"milestone":{"url":"https://api.github.com/repos/STEllAR-GROUP/hpx/milestones/24","html_url":"https://github.com/STEllAR-GROUP/hpx/milestones/0.9.11","labels_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/milestones/24/labels","id":997180,"number":24,"title":"0.9.11","description":"","creator":{"login":"hkaiser","id":568063,"avatar_url":"https://avatars.githubusercontent.com/u/568063?v=3","gravatar_id":"","url":"https://api.github.com/users/hkaiser","html_url":"https://github.com/hkaiser","followers_url":"https://api.github.com/users/hkaiser/followers","following_url":"https://api.github.com/users/hkaiser/following{/other_user}","gists_url":"https://api.github.com/users/hkaiser/gists{/gist_id}","starred_url":"https://api.github.com/users/hkaiser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hkaiser/subscriptions","organizations_url":"https://api.github.com/users/hkaiser/orgs","repos_url":"https://api.github.com/users/hkaiser/repos","events_url":"https://api.github.com/users/hkaiser/events{/privacy}","received_events_url":"https://api.github.com/users/hkaiser/received_events","type":"User","site_admin":false},"open_issues":45,"closed_issues":257,"state":"open","created_at":"2015-02-26T15:57:10Z","updated_at":"2015-08-10T17:01:19Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls/1711/commits","review_comments_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls/1711/comments","review_comment_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls/comments{/number}","comments_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/issues/1711/comments","statuses_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/statuses/eeb3c716e238756c98e96d54d0dc5686773d0257","head":{"label":"STEllAR-GROUP:simplify_parcel","ref":"simplify_parcel","sha":"eeb3c716e238756c98e96d54d0dc5686773d0257","user":{"login":"STEllAR-GROUP","id":1780988,"avatar_url":"https://avatars.githubusercontent.com/u/1780988?v=3","gravatar_id":"","url":"https://api.github.com/users/STEllAR-GROUP","html_url":"https://github.com/STEllAR-GROUP","followers_url":"https://api.github.com/users/STEllAR-GROUP/followers","following_url":"https://api.github.com/users/STEllAR-GROUP/following{/other_user}","gists_url":"https://api.github.com/users/STEllAR-GROUP/gists{/gist_id}","starred_url":"https://api.github.com/users/STEllAR-GROUP/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/STEllAR-GROUP/subscriptions","organizations_url":"https://api.github.com/users/STEllAR-GROUP/orgs","repos_url":"https://api.github.com/users/STEllAR-GROUP/repos","events_url":"https://api.github.com/users/STEllAR-GROUP/events{/privacy}","received_events_url":"https://api.github.com/users/STEllAR-GROUP/received_events","type":"Organization","site_admin":false},"repo":{"id":4455628,"name":"hpx","full_name":"STEllAR-GROUP/hpx","owner":{"login":"STEllAR-GROUP","id":1780988,"avatar_url":"https://avatars.githubusercontent.com/u/1780988?v=3","gravatar_id":"","url":"https://api.github.com/users/STEllAR-GROUP","html_url":"https://github.com/STEllAR-GROUP","followers_url":"https://api.github.com/users/STEllAR-GROUP/followers","following_url":"https://api.github.com/users/STEllAR-GROUP/following{/other_user}","gists_url":"https://api.github.com/users/STEllAR-GROUP/gists{/gist_id}","starred_url":"https://api.github.com/users/STEllAR-GROUP/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/STEllAR-GROUP/subscriptions","organizations_url":"https://api.github.com/users/STEllAR-GROUP/orgs","repos_url":"https://api.github.com/users/STEllAR-GROUP/repos","events_url":"https://api.github.com/users/STEllAR-GROUP/events{/privacy}","received_events_url":"https://api.github.com/users/STEllAR-GROUP/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/STEllAR-GROUP/hpx","description":"A general purpose C++ runtime system for parallel and distributed applications of any scale","fork":false,"url":"https://api.github.com/repos/STEllAR-GROUP/hpx","forks_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/forks","keys_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/teams","hooks_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/hooks","issue_events_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/issues/events{/number}","events_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/events","assignees_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/assignees{/user}","branches_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/branches{/branch}","tags_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/tags","blobs_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/git/refs{/sha}","trees_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/statuses/{sha}","languages_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/languages","stargazers_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/stargazers","contributors_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/contributors","subscribers_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/subscribers","subscription_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/subscription","commits_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/commits{/sha}","git_commits_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/git/commits{/sha}","comments_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/comments{/number}","issue_comment_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/issues/comments{/number}","contents_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/contents/{+path}","compare_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/merges","archive_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/downloads","issues_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/issues{/number}","pulls_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls{/number}","milestones_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/milestones{/number}","notifications_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/labels{/name}","releases_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/releases{/id}","created_at":"2012-05-26T15:02:39Z","updated_at":"2015-07-22T13:19:09Z","pushed_at":"2015-08-10T15:54:46Z","git_url":"git://github.com/STEllAR-GROUP/hpx.git","ssh_url":"git@github.com:STEllAR-GROUP/hpx.git","clone_url":"https://github.com/STEllAR-GROUP/hpx.git","svn_url":"https://github.com/STEllAR-GROUP/hpx","homepage":"http://stellar-group.org/libraries/hpx","size":426405,"stargazers_count":318,"watchers_count":318,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":97,"mirror_url":null,"open_issues_count":110,"forks":97,"open_issues":110,"watchers":318,"default_branch":"master"}},"base":{"label":"STEllAR-GROUP:master","ref":"master","sha":"44ed9dfeacdb3d775f8efc7101580620e87bfb41","user":{"login":"STEllAR-GROUP","id":1780988,"avatar_url":"https://avatars.githubusercontent.com/u/1780988?v=3","gravatar_id":"","url":"https://api.github.com/users/STEllAR-GROUP","html_url":"https://github.com/STEllAR-GROUP","followers_url":"https://api.github.com/users/STEllAR-GROUP/followers","following_url":"https://api.github.com/users/STEllAR-GROUP/following{/other_user}","gists_url":"https://api.github.com/users/STEllAR-GROUP/gists{/gist_id}","starred_url":"https://api.github.com/users/STEllAR-GROUP/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/STEllAR-GROUP/subscriptions","organizations_url":"https://api.github.com/users/STEllAR-GROUP/orgs","repos_url":"https://api.github.com/users/STEllAR-GROUP/repos","events_url":"https://api.github.com/users/STEllAR-GROUP/events{/privacy}","received_events_url":"https://api.github.com/users/STEllAR-GROUP/received_events","type":"Organization","site_admin":false},"repo":{"id":4455628,"name":"hpx","full_name":"STEllAR-GROUP/hpx","owner":{"login":"STEllAR-GROUP","id":1780988,"avatar_url":"https://avatars.githubusercontent.com/u/1780988?v=3","gravatar_id":"","url":"https://api.github.com/users/STEllAR-GROUP","html_url":"https://github.com/STEllAR-GROUP","followers_url":"https://api.github.com/users/STEllAR-GROUP/followers","following_url":"https://api.github.com/users/STEllAR-GROUP/following{/other_user}","gists_url":"https://api.github.com/users/STEllAR-GROUP/gists{/gist_id}","starred_url":"https://api.github.com/users/STEllAR-GROUP/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/STEllAR-GROUP/subscriptions","organizations_url":"https://api.github.com/users/STEllAR-GROUP/orgs","repos_url":"https://api.github.com/users/STEllAR-GROUP/repos","events_url":"https://api.github.com/users/STEllAR-GROUP/events{/privacy}","received_events_url":"https://api.github.com/users/STEllAR-GROUP/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/STEllAR-GROUP/hpx","description":"A general purpose C++ runtime system for parallel and distributed applications of any scale","fork":false,"url":"https://api.github.com/repos/STEllAR-GROUP/hpx","forks_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/forks","keys_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/teams","hooks_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/hooks","issue_events_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/issues/events{/number}","events_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/events","assignees_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/assignees{/user}","branches_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/branches{/branch}","tags_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/tags","blobs_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/git/refs{/sha}","trees_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/statuses/{sha}","languages_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/languages","stargazers_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/stargazers","contributors_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/contributors","subscribers_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/subscribers","subscription_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/subscription","commits_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/commits{/sha}","git_commits_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/git/commits{/sha}","comments_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/comments{/number}","issue_comment_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/issues/comments{/number}","contents_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/contents/{+path}","compare_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/merges","archive_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/downloads","issues_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/issues{/number}","pulls_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls{/number}","milestones_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/milestones{/number}","notifications_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/labels{/name}","releases_url":"https://api.github.com/repos/STEllAR-GROUP/hpx/releases{/id}","created_at":"2012-05-26T15:02:39Z","updated_at":"2015-07-22T13:19:09Z","pushed_at":"2015-08-10T15:54:46Z","git_url":"git://github.com/STEllAR-GROUP/hpx.git","ssh_url":"git@github.com:STEllAR-GROUP/hpx.git","clone_url":"https://github.com/STEllAR-GROUP/hpx.git","svn_url":"https://github.com/STEllAR-GROUP/hpx","homepage":"http://stellar-group.org/libraries/hpx","size":426405,"stargazers_count":318,"watchers_count":318,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":97,"mirror_url":null,"open_issues_count":110,"forks":97,"open_issues":110,"watchers":318,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls/1711"},"html":{"href":"https://github.com/STEllAR-GROUP/hpx/pull/1711"},"issue":{"href":"https://api.github.com/repos/STEllAR-GROUP/hpx/issues/1711"},"comments":{"href":"https://api.github.com/repos/STEllAR-GROUP/hpx/issues/1711/comments"},"review_comments":{"href":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls/1711/comments"},"review_comment":{"href":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/STEllAR-GROUP/hpx/pulls/1711/commits"},"statuses":{"href":"https://api.github.com/repos/STEllAR-GROUP/hpx/statuses/eeb3c716e238756c98e96d54d0dc5686773d0257"}}}}