Commit ff1ff1f5 authored by neverlord's avatar neverlord

changed operator, to non-member function

parent a9300af4
......@@ -49,6 +49,8 @@ namespace cppa {
class behavior
{
friend behavior operator,(partial_function&& lhs, behavior&& rhs);
behavior(behavior const&) = delete;
behavior& operator=(behavior const&) = delete;
......
......@@ -44,13 +44,16 @@ class behavior;
class partial_function
{
partial_function(partial_function const&) = delete;
partial_function& operator=(partial_function const&) = delete;
public:
typedef std::unique_ptr<detail::invokable> invokable_ptr;
partial_function() = default;
partial_function(partial_function&& other);
partial_function& operator=(partial_function&& other);
partial_function(invokable_ptr&& ptr);
......@@ -70,13 +73,6 @@ class partial_function
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:
// terminates recursion
......@@ -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
#endif // PARTIAL_FUNCTION_HPP
......@@ -35,14 +35,21 @@
namespace cppa {
partial_function::partial_function(invokable_ptr&& ptr)
{
m_funs.push_back(std::move(ptr));
}
partial_function::partial_function(partial_function&& other)
: 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&
......@@ -110,10 +117,11 @@ detail::intermediate* partial_function::get_intermediate(any_tuple const& value)
return nullptr;
}
behavior partial_function::operator,(behavior&& arg)
behavior operator,(partial_function&& lhs, behavior&& rhs)
{
behavior bhvr{std::move(arg)};
bhvr.get_partial_function().m_funs = std::move(m_funs);
behavior bhvr{rhs.m_timeout, std::move(rhs.m_timeout_handler)};
bhvr.get_partial_function().splice(std::move(rhs.get_partial_function()),
std::move(lhs));
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