Commit ff1ff1f5 authored by neverlord's avatar neverlord

changed operator, to non-member function

parent a9300af4
...@@ -49,6 +49,8 @@ namespace cppa { ...@@ -49,6 +49,8 @@ namespace cppa {
class behavior class behavior
{ {
friend behavior operator,(partial_function&& lhs, behavior&& rhs);
behavior(behavior const&) = delete; behavior(behavior const&) = delete;
behavior& operator=(behavior const&) = delete; behavior& operator=(behavior const&) = delete;
......
...@@ -44,13 +44,16 @@ class behavior; ...@@ -44,13 +44,16 @@ class behavior;
class partial_function class partial_function
{ {
partial_function(partial_function const&) = delete;
partial_function& operator=(partial_function const&) = delete;
public: public:
typedef std::unique_ptr<detail::invokable> invokable_ptr; typedef std::unique_ptr<detail::invokable> invokable_ptr;
partial_function() = default; partial_function() = default;
partial_function(partial_function&& other); partial_function(partial_function&& other);
partial_function& operator=(partial_function&& other);
partial_function(invokable_ptr&& ptr); partial_function(invokable_ptr&& ptr);
...@@ -70,13 +73,6 @@ class partial_function ...@@ -70,13 +73,6 @@ class partial_function
return splice(std::forward<Args>(args)...); return splice(std::forward<Args>(args)...);
} }
inline partial_function operator,(partial_function&& arg)
{
return std::move(splice(std::move(arg)));
}
behavior operator,(behavior&& arg);
private: private:
// terminates recursion // terminates recursion
...@@ -97,6 +93,14 @@ class partial_function ...@@ -97,6 +93,14 @@ class partial_function
}; };
inline partial_function operator,(partial_function&& lhs,
partial_function&& rhs)
{
return std::move(lhs.splice(std::move(rhs)));
}
behavior operator,(partial_function&& lhs, behavior&& rhs);
} // namespace cppa } // namespace cppa
#endif // PARTIAL_FUNCTION_HPP #endif // PARTIAL_FUNCTION_HPP
...@@ -35,14 +35,21 @@ ...@@ -35,14 +35,21 @@
namespace cppa { namespace cppa {
partial_function::partial_function(invokable_ptr&& ptr)
{
m_funs.push_back(std::move(ptr));
}
partial_function::partial_function(partial_function&& other) partial_function::partial_function(partial_function&& other)
: m_funs(std::move(other.m_funs)) : m_funs(std::move(other.m_funs))
{ {
} }
partial_function::partial_function(invokable_ptr&& ptr) partial_function& partial_function::operator=(partial_function&& other)
{ {
m_funs.push_back(std::move(ptr)); m_funs = std::move(other.m_funs);
m_cache.clear();
return *this;
} }
auto partial_function::get_cache_entry(any_tuple const& value) -> cache_entry& auto partial_function::get_cache_entry(any_tuple const& value) -> cache_entry&
...@@ -110,10 +117,11 @@ detail::intermediate* partial_function::get_intermediate(any_tuple const& value) ...@@ -110,10 +117,11 @@ detail::intermediate* partial_function::get_intermediate(any_tuple const& value)
return nullptr; return nullptr;
} }
behavior partial_function::operator,(behavior&& arg) behavior operator,(partial_function&& lhs, behavior&& rhs)
{ {
behavior bhvr{std::move(arg)}; behavior bhvr{rhs.m_timeout, std::move(rhs.m_timeout_handler)};
bhvr.get_partial_function().m_funs = std::move(m_funs); bhvr.get_partial_function().splice(std::move(rhs.get_partial_function()),
std::move(lhs));
return bhvr; return bhvr;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment