Commit bb953534 authored by Dominik Charousset's avatar Dominik Charousset

Rename `policies` to `actor_policies`

parent 236a1fb2
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
#include "cppa/spawn.hpp" #include "cppa/spawn.hpp"
#include "cppa/config.hpp" #include "cppa/config.hpp"
#include "cppa/extend.hpp" #include "cppa/extend.hpp"
#include "cppa/policy.hpp"
#include "cppa/channel.hpp" #include "cppa/channel.hpp"
#include "cppa/message.hpp" #include "cppa/message.hpp"
#include "cppa/node_id.hpp" #include "cppa/node_id.hpp"
......
/******************************************************************************\
* ___ __ *
* /\_ \ __/\ \ *
* \//\ \ /\_\ \ \____ ___ _____ _____ __ *
* \ \ \ \/\ \ \ '__`\ /'___\/\ '__`\/\ '__`\ /'__`\ *
* \_\ \_\ \ \ \ \L\ \/\ \__/\ \ \L\ \ \ \L\ \/\ \L\.\_ *
* /\____\\ \_\ \_,__/\ \____\\ \ ,__/\ \ ,__/\ \__/.\_\ *
* \/____/ \/_/\/___/ \/____/ \ \ \/ \ \ \/ \/__/\/_/ *
* \ \_\ \ \_\ *
* \/_/ \/_/ *
* *
* Copyright (C) 2011 - 2014 *
* Dominik Charousset <dominik.charousset (at) haw-hamburg.de> *
* *
* Distributed under the Boost Software License, Version 1.0. See *
* accompanying file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt *
\******************************************************************************/
#ifndef CPPA_POLICY_HPP
#define CPPA_POLICY_HPP
#include "cppa/policy/policies.hpp"
#include "cppa/policy/no_resume.hpp"
#include "cppa/policy/prioritizing.hpp"
#include "cppa/policy/no_scheduling.hpp"
#include "cppa/policy/invoke_policy.hpp"
#include "cppa/policy/nestable_invoke.hpp"
#include "cppa/policy/not_prioritizing.hpp"
#include "cppa/policy/sequential_invoke.hpp"
#include "cppa/policy/event_based_resume.hpp"
#include "cppa/policy/cooperative_scheduling.hpp"
#endif // CPPA_POLICY_HPP
...@@ -22,24 +22,40 @@ ...@@ -22,24 +22,40 @@
namespace cppa { namespace cppa {
namespace policy { namespace policy {
template<class SchedulingPolicy, class PriorityPolicy, class ResumePolicy, /**
class InvokePolicy> * @brief A container for actor-related policies.
class policies { */
template<class SchedulingPolicy,
class PriorityPolicy,
class ResumePolicy,
class InvokePolicy>
class actor_policies {
public: public:
using scheduling_policy = SchedulingPolicy; using scheduling_policy = SchedulingPolicy;
using priority_policy = PriorityPolicy; using priority_policy = PriorityPolicy;
using resume_policy = ResumePolicy; using resume_policy = ResumePolicy;
using invoke_policy = InvokePolicy; using invoke_policy = InvokePolicy;
scheduling_policy& get_scheduling_policy() { return m_scheduling_policy; } inline scheduling_policy& get_scheduling_policy() {
return m_scheduling_policy;
}
priority_policy& get_priority_policy() { return m_priority_policy; } inline priority_policy& get_priority_policy() {
return m_priority_policy;
}
resume_policy& get_resume_policy() { return m_resume_policy; } inline resume_policy& get_resume_policy() {
return m_resume_policy;
}
invoke_policy& get_invoke_policy() { return m_invoke_policy; } inline invoke_policy& get_invoke_policy() {
return m_invoke_policy;
}
private: private:
......
...@@ -21,13 +21,22 @@ ...@@ -21,13 +21,22 @@
#include <type_traits> #include <type_traits>
#include "cppa/policy.hpp"
#include "cppa/scheduler.hpp" #include "cppa/scheduler.hpp"
#include "cppa/spawn_fwd.hpp" #include "cppa/spawn_fwd.hpp"
#include "cppa/typed_actor.hpp" #include "cppa/typed_actor.hpp"
#include "cppa/spawn_options.hpp" #include "cppa/spawn_options.hpp"
#include "cppa/typed_event_based_actor.hpp" #include "cppa/typed_event_based_actor.hpp"
#include "cppa/policy/no_resume.hpp"
#include "cppa/policy/prioritizing.hpp"
#include "cppa/policy/no_scheduling.hpp"
#include "cppa/policy/actor_policies.hpp"
#include "cppa/policy/nestable_invoke.hpp"
#include "cppa/policy/not_prioritizing.hpp"
#include "cppa/policy/sequential_invoke.hpp"
#include "cppa/policy/event_based_resume.hpp"
#include "cppa/policy/cooperative_scheduling.hpp"
#include "cppa/detail/logging.hpp" #include "cppa/detail/logging.hpp"
#include "cppa/detail/type_traits.hpp" #include "cppa/detail/type_traits.hpp"
#include "cppa/detail/make_counted.hpp" #include "cppa/detail/make_counted.hpp"
...@@ -46,30 +55,44 @@ class spawn_as_is {}; ...@@ -46,30 +55,44 @@ class spawn_as_is {};
template<class C, spawn_options Os, typename BeforeLaunch, typename... Ts> template<class C, spawn_options Os, typename BeforeLaunch, typename... Ts>
intrusive_ptr<C> spawn_impl(execution_unit* eu, BeforeLaunch before_launch_fun, intrusive_ptr<C> spawn_impl(execution_unit* eu, BeforeLaunch before_launch_fun,
Ts&&... args) { Ts&&... args) {
static_assert(!std::is_base_of<blocking_actor, C>::value || static_assert( !std::is_base_of<blocking_actor, C>::value
has_blocking_api_flag(Os), || has_blocking_api_flag(Os),
"C is derived type of blocking_actor but " "C is derived type of blocking_actor but "
"blocking_api_flag is missing"); "blocking_api_flag is missing");
static_assert(is_unbound(Os), static_assert(is_unbound(Os),
"top-level spawns cannot have monitor or link flag"); "top-level spawns cannot have monitor or link flag");
CPPA_LOGF_TRACE("spawn " << detail::demangle<C>()); CPPA_LOGF_TRACE("spawn " << detail::demangle<C>());
using scheduling_policy = typename std::conditional < has_detach_flag(Os) || using scheduling_policy = typename std::conditional<
has_blocking_api_flag(Os), has_detach_flag(Os) || has_blocking_api_flag(Os),
policy::no_scheduling, policy::cooperative_scheduling > ::type; policy::no_scheduling,
policy::cooperative_scheduling
>::type;
using priority_policy = typename std::conditional< using priority_policy = typename std::conditional<
has_priority_aware_flag(Os), policy::prioritizing, has_priority_aware_flag(Os),
policy::not_prioritizing>::type; policy::prioritizing,
using resume_policy = policy::not_prioritizing
typename std::conditional<has_blocking_api_flag(Os), policy::no_resume, >::type;
policy::event_based_resume>::type; using resume_policy = typename std::conditional<
has_blocking_api_flag(Os),
policy::no_resume,
policy::event_based_resume
>::type;
using invoke_policy = typename std::conditional< using invoke_policy = typename std::conditional<
has_blocking_api_flag(Os), policy::nestable_invoke, has_blocking_api_flag(Os),
policy::sequential_invoke>::type; policy::nestable_invoke,
using policies = policy::policies<scheduling_policy, priority_policy, policy::sequential_invoke
resume_policy, invoke_policy>; >::type;
using actor_impl = using policy_token = policy::actor_policies<
typename std::conditional<std::is_base_of<spawn_as_is, C>::value, C, scheduling_policy,
detail::proper_actor<C, policies>>::type; priority_policy,
resume_policy,
invoke_policy
>;
using actor_impl = typename std::conditional<
std::is_base_of<spawn_as_is, C>::value,
C,
detail::proper_actor<C, policy_token>
>::type;
auto ptr = detail::make_counted<actor_impl>(std::forward<Ts>(args)...); auto ptr = detail::make_counted<actor_impl>(std::forward<Ts>(args)...);
CPPA_LOGF_DEBUG("spawned actor with ID " << ptr->id()); CPPA_LOGF_DEBUG("spawned actor with ID " << ptr->id());
CPPA_PUSH_AID(ptr->id()); CPPA_PUSH_AID(ptr->id());
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include <condition_variable> #include <condition_variable>
#include "cppa/on.hpp" #include "cppa/on.hpp"
#include "cppa/policy.hpp"
#include "cppa/anything.hpp" #include "cppa/anything.hpp"
#include "cppa/to_string.hpp" #include "cppa/to_string.hpp"
#include "cppa/scheduler.hpp" #include "cppa/scheduler.hpp"
...@@ -31,6 +30,12 @@ ...@@ -31,6 +30,12 @@
#include "cppa/scoped_actor.hpp" #include "cppa/scoped_actor.hpp"
#include "cppa/system_messages.hpp" #include "cppa/system_messages.hpp"
#include "cppa/policy/no_resume.hpp"
#include "cppa/policy/no_scheduling.hpp"
#include "cppa/policy/actor_policies.hpp"
#include "cppa/policy/nestable_invoke.hpp"
#include "cppa/policy/not_prioritizing.hpp"
#include "cppa/detail/logging.hpp" #include "cppa/detail/logging.hpp"
#include "cppa/detail/proper_actor.hpp" #include "cppa/detail/proper_actor.hpp"
#include "cppa/detail/actor_registry.hpp" #include "cppa/detail/actor_registry.hpp"
...@@ -48,16 +53,18 @@ using hrc = std::chrono::high_resolution_clock; ...@@ -48,16 +53,18 @@ using hrc = std::chrono::high_resolution_clock;
using time_point = hrc::time_point; using time_point = hrc::time_point;
using timer_actor_policies = using timer_actor_policies = policy::actor_policies<
policy::policies<policy::no_scheduling, policy::not_prioritizing, policy::no_scheduling,
policy::no_resume, policy::nestable_invoke>; policy::not_prioritizing,
policy::no_resume,
policy::nestable_invoke
>;
struct delayed_msg { struct delayed_msg {
actor_addr from; actor_addr from;
channel to; channel to;
message_id mid; message_id mid;
message msg; message msg;
}; };
inline void deliver(delayed_msg& dm) { inline void deliver(delayed_msg& dm) {
...@@ -72,8 +79,8 @@ inline void insert_dmsg(Map& storage, const duration& d, Ts&&... vs) { ...@@ -72,8 +79,8 @@ inline void insert_dmsg(Map& storage, const duration& d, Ts&&... vs) {
storage.insert(std::make_pair(std::move(tout), std::move(dmsg))); storage.insert(std::make_pair(std::move(tout), std::move(dmsg)));
} }
class timer_actor final class timer_actor final : public detail::proper_actor<blocking_actor,
: public detail::proper_actor<blocking_actor, timer_actor_policies> { timer_actor_policies> {
public: public:
...@@ -103,10 +110,10 @@ class timer_actor final ...@@ -103,10 +110,10 @@ class timer_actor final
insert_dmsg(messages, d, std::move(from), std::move(to), mid, insert_dmsg(messages, d, std::move(from), std::move(to), mid,
std::move(tup)); std::move(tup));
}, },
on(atom("DIE")) >> [&] { done = true; }, others() >> [&]() { on(atom("DIE")) >> [&] { done = true; }, others() >> [&] {
#ifdef CPPA_DEBUG_MODE # ifdef CPPA_DEBUG_MODE
std::cerr << "coordinator::timer_loop: UNKNOWN MESSAGE: " std::cerr << "coordinator::timer_loop: UNKNOWN MESSAGE: "
<< to_string(msg_ptr->msg) << std::endl; << to_string(msg_ptr->msg) << std::endl;
# endif # endif
}); });
// loop // loop
...@@ -147,14 +154,12 @@ void printer_loop(blocking_actor* self) { ...@@ -147,14 +154,12 @@ void printer_loop(blocking_actor* self) {
line.clear(); line.clear();
} }
} }
}; };
auto flush_if_needed = [](std::string& str) { auto flush_if_needed = [](std::string& str) {
if (str.back() == '\n') { if (str.back() == '\n') {
std::cout << str << std::flush; std::cout << str << std::flush;
str.clear(); str.clear();
} }
}; };
bool running = true; bool running = true;
self->receive_while([&] { return running; })( self->receive_while([&] { return running; })(
......
...@@ -16,9 +16,14 @@ ...@@ -16,9 +16,14 @@
* accompanying file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt * * accompanying file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt *
\******************************************************************************/ \******************************************************************************/
#include "cppa/policy.hpp"
#include "cppa/scoped_actor.hpp" #include "cppa/scoped_actor.hpp"
#include "cppa/policy/no_resume.hpp"
#include "cppa/policy/no_scheduling.hpp"
#include "cppa/policy/actor_policies.hpp"
#include "cppa/policy/nestable_invoke.hpp"
#include "cppa/policy/not_prioritizing.hpp"
#include "cppa/detail/singletons.hpp" #include "cppa/detail/singletons.hpp"
#include "cppa/detail/proper_actor.hpp" #include "cppa/detail/proper_actor.hpp"
#include "cppa/detail/actor_registry.hpp" #include "cppa/detail/actor_registry.hpp"
...@@ -33,11 +38,10 @@ struct impl : blocking_actor { ...@@ -33,11 +38,10 @@ struct impl : blocking_actor {
blocking_actor* alloc() { blocking_actor* alloc() {
using namespace policy; using namespace policy;
return new detail::proper_actor<impl, return new detail::proper_actor<impl, actor_policies<no_scheduling,
policies<no_scheduling, not_prioritizing,
not_prioritizing, no_resume,
no_resume, nestable_invoke>>;
nestable_invoke>>;
} }
} // namespace <anonymous> } // namespace <anonymous>
......
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