Commit 2ab19718 authored by Dominik Charousset's avatar Dominik Charousset

maintenance

parent e43e9bf6
......@@ -107,77 +107,6 @@ match_expr_convert(const Arg0& arg0, const Args&... args) {
return {match_expr_concat(arg0, args...)};
}
/*
/ *
* @brief Concatenates a match expression and a timeout specification
* represented by an rvalue behavior object.
* /
template<typename F, typename... Lhs>
behavior operator,(const match_expr<Lhs...>& lhs, timeout_definition<F>&& rhs) {
CPPA_REQUIRE(rhs.get_partial_function().undefined());
rhs.get_partial_function() = lhs;
return std::move(rhs);
}
template<typename Arg0>
behavior bhvr_collapse(Arg0&& arg) {
return {std::forward<Arg0>(arg)};
}
template<typename Arg0, typename Arg1, typename... Args>
behavior bhvr_collapse(Arg0&& arg0, Arg1&& arg1, Args&&... args) {
return bhvr_collapse((std::forward<Arg0>(arg0), std::forward<Arg1>(arg1)),
std::forward<Args>(args)...);
}
template<typename... Args>
typename std::enable_if<
util::disjunction<std::is_same<behavior, Args>...>::value,
behavior
>::type
match_expr_concat(Args&&... args) {
return bhvr_collapse(std::forward<Args>(args)...);
}
template<typename... Args>
typename std::enable_if<
util::disjunction<
std::is_same<
behavior,
typename util::rm_ref<Args>::type
>...
>::value == false,
partial_function
>::type
match_expr_concat(Args&&... args) {
return mexpr_concat_convert(std::forward<Args>(args)...);
}
inline partial_function match_expr_concat(partial_function&& pfun) {
return std::move(pfun);
}
inline behavior match_expr_concat(behavior&& bhvr) {
return std::move(bhvr);
}
namespace detail {
template<typename... Ts>
struct select_bhvr {
static constexpr bool timed =
util::disjunction<std::is_same<behavior, Ts>...>::value;
typedef typename util::if_else_c<timed,
behavior,
util::wrapped<partial_function> >::type
type;
};
} // namespace detail
*/
} // namespace cppa
#endif // CPPA_BEHAVIOR_HPP
......@@ -46,8 +46,11 @@ namespace cppa {
class scheduler;
class local_scheduler;
struct discard_behavior_t { };
struct keep_behavior_t { };
template<bool DiscardOld>
struct behavior_policy { static const bool discard_old = DiscardOld; };
typedef behavior_policy<false> keep_behavior;
typedef behavior_policy<true > discard_behavior_t;
// doxygen doesn't parse anonymous namespaces correctly
#ifndef CPPA_DOCUMENTATION
......@@ -254,17 +257,13 @@ class local_actor : public actor {
/**
* @brief Sets the actor's behavior.
*/
template<typename... Cases, typename... Args>
inline void become(discard_behavior_t, match_expr<Cases...>&& arg0, Args&&... args) {
become(discard_behavior, match_expr_convert(std::move(arg0), std::forward<Args>(args)...));
}
/**
* @brief Sets the actor's behavior.
*/
template<typename... Cases, typename... Args>
inline void become(keep_behavior_t, match_expr<Cases...>&& arg0, Args&&... args) {
become(keep_behavior, match_expr_convert(std::move(arg0), std::forward<Args>(args)...));
template<bool DiscardOld, typename Arg0, typename Arg1, typename... Args>
void become(behavior_policy<DiscardOld>,
Arg0&& arg0, Arg1&& arg1, Args&&... args) {
do_become(match_expr_convert(std::forward<Arg0>(arg0),
std::forward<Arg1>(arg1),
std::forward<Args>(args)...),
DiscardOld);
}
/**
......
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