Commit fa6707df authored by Dominik Charousset's avatar Dominik Charousset

Homogenize actor constructors

parent 415bed8f
......@@ -250,9 +250,6 @@ protected:
/// Creates a new actor instance.
explicit abstract_actor(actor_config& cfg);
/// Creates a new actor instance.
explicit abstract_actor(int flags = 0);
private:
// prohibit copies, assigments, and heap allocations
void* operator new(size_t);
......
......@@ -24,6 +24,7 @@
#include "caf/fwd.hpp"
#include "caf/input_range.hpp"
#include "caf/abstract_channel.hpp"
namespace caf {
......@@ -31,15 +32,20 @@ class actor_config {
public:
execution_unit* host;
int flags;
input_range<const group>* groups = nullptr;
input_range<const group>* groups;
std::function<behavior (local_actor*)> init_fun;
explicit actor_config(execution_unit* ptr = nullptr,
int preset_flags = 0)
explicit actor_config(execution_unit* ptr = nullptr)
: host(ptr),
flags(preset_flags) {
flags(abstract_channel::is_abstract_actor_flag),
groups(nullptr) {
// nop
}
inline actor_config& add_flag(int x) {
flags |= x;
return *this;
}
};
} // namespace caf
......
......@@ -34,7 +34,7 @@ namespace caf {
/// or different hardware, or in a separate process.
class actor_proxy : public monitorable_actor {
public:
actor_proxy();
explicit actor_proxy(actor_config& cfg);
~actor_proxy();
......
......@@ -38,7 +38,7 @@ class event_based_actor : public abstract_event_based_actor<behavior, true> {
public:
using super = abstract_event_based_actor<behavior, true>;
event_based_actor(actor_config& cfg);
explicit event_based_actor(actor_config& cfg);
~event_based_actor();
......
......@@ -32,7 +32,7 @@ class forwarding_actor_proxy : public actor_proxy {
public:
using forwarding_stack = std::vector<strong_actor_ptr>;
forwarding_actor_proxy(actor parent);
forwarding_actor_proxy(actor_config& cfg, actor parent);
~forwarding_actor_proxy();
......
......@@ -479,10 +479,6 @@ public:
// handle `ptr` in an event-based actor, not suitable to be called in a loop
virtual void exec_single_event(execution_unit* ctx, mailbox_element_ptr& ptr);
local_actor();
local_actor(int init_flags);
local_actor(actor_config& sys);
void intrusive_ptr_add_ref_impl() override;
......
......@@ -78,9 +78,6 @@ protected:
/// Creates a new actor instance.
explicit monitorable_actor(actor_config& cfg);
/// Creates a new actor instance.
explicit monitorable_actor(int flags);
/****************************************************************************
* here be dragons: end of public interface *
****************************************************************************/
......
......@@ -40,7 +40,7 @@ template <class State, class Base = event_based_actor>
class stateful_actor : public Base {
public:
template <class... Ts>
stateful_actor(actor_config& cfg, Ts&&... xs)
explicit stateful_actor(actor_config& cfg, Ts&&... xs)
: Base(cfg, std::forward<Ts>(xs)...),
state(state_) {
if (detail::is_serializable<State>::value)
......
......@@ -41,7 +41,7 @@ public:
using base_type =
abstract_event_based_actor<typed_behavior<Sigs...>, true>;
typed_event_based_actor(actor_config& cfg) : base_type(cfg) {
explicit typed_event_based_actor(actor_config& cfg) : base_type(cfg) {
// nop
}
......
......@@ -68,10 +68,6 @@ abstract_actor::abstract_actor(actor_config& cfg)
// nop
}
abstract_actor::abstract_actor(int flags) : abstract_channel(flags) {
// nop
}
actor_addr abstract_actor::address() const {
return actor_addr{actor_control_block::from(this)};
}
......
......@@ -74,7 +74,7 @@ inline void insert_dmsg(Map& storage, const duration& d, Ts&&... xs) {
class timer_actor : public blocking_actor {
public:
timer_actor(actor_config& cfg) : blocking_actor(cfg) {
explicit timer_actor(actor_config& cfg) : blocking_actor(cfg) {
// nop
}
......
......@@ -28,8 +28,7 @@
namespace caf {
actor_proxy::actor_proxy()
: monitorable_actor(abstract_channel::is_abstract_actor()) {
actor_proxy::actor_proxy(actor_config& cfg) : monitorable_actor(cfg) {
// nop
}
......
......@@ -34,7 +34,7 @@ namespace caf {
namespace decorator {
adapter::adapter(strong_actor_ptr decorated, message msg)
: monitorable_actor(is_abstract_actor_flag | is_actor_bind_decorator_flag),
: monitorable_actor(actor_config{}.add_flag(is_actor_bind_decorator_flag)),
decorated_(std::move(decorated)),
merger_(std::move(msg)) {
// bound actor has dependency on the decorated actor by default;
......
......@@ -26,8 +26,8 @@
namespace caf {
blocking_actor::blocking_actor(actor_config& sys) : super(sys) {
is_blocking(true);
blocking_actor::blocking_actor(actor_config& sys)
: super(sys.add_flag(local_actor::is_blocking_flag)) {
set_default_handler(skip);
}
......
......@@ -26,7 +26,9 @@
namespace caf {
forwarding_actor_proxy::forwarding_actor_proxy(actor mgr) : manager_(mgr) {
forwarding_actor_proxy::forwarding_actor_proxy(actor_config& cfg, actor mgr)
: actor_proxy(cfg),
manager_(mgr) {
CAF_ASSERT(mgr != invalid_actor);
}
......
......@@ -75,22 +75,6 @@ local_actor::local_actor(actor_config& cfg)
join(grp);
}
local_actor::local_actor()
: monitorable_actor(abstract_channel::is_abstract_actor_flag),
planned_exit_reason_(exit_reason::not_exited),
timeout_id_(0),
unexpected_handler_(print_and_drop) {
// nop
}
local_actor::local_actor(int init_flags)
: monitorable_actor(init_flags),
planned_exit_reason_(exit_reason::not_exited),
timeout_id_(0),
unexpected_handler_(print_and_drop) {
// nop
}
local_actor::~local_actor() {
// nop
}
......
......@@ -90,12 +90,6 @@ monitorable_actor::monitorable_actor(actor_config& cfg)
// nop
}
monitorable_actor::monitorable_actor(int init_flags)
: abstract_actor(init_flags),
exit_reason_(exit_reason::not_exited) {
// nop
}
optional<exit_reason> monitorable_actor::handle(const std::exception_ptr& eptr) {
std::unique_lock<std::mutex> guard{mtx_};
for (auto i = attachables_head_.get(); i != nullptr; i = i->next.get()) {
......
......@@ -30,7 +30,7 @@ namespace decorator {
sequencer::sequencer(strong_actor_ptr f, strong_actor_ptr g,
message_types_set msg_types)
: monitorable_actor(is_abstract_actor_flag | is_actor_dot_decorator_flag),
: monitorable_actor(actor_config{}.add_flag(is_actor_dot_decorator_flag)),
f_(std::move(f)),
g_(std::move(g)),
msg_types_(std::move(msg_types)) {
......
......@@ -115,7 +115,7 @@ behavior fan_out_fan_in(stateful_actor<splitter_state>* self,
splitter::splitter(std::vector<strong_actor_ptr> workers,
message_types_set msg_types)
: monitorable_actor(is_abstract_actor_flag | is_actor_dot_decorator_flag),
: monitorable_actor(actor_config{}.add_flag(is_actor_dot_decorator_flag)),
workers_(std::move(workers)),
msg_types_(std::move(msg_types)) {
// composed actor has dependency on constituent actors by default;
......
......@@ -209,7 +209,7 @@ public:
protected:
void init_broker();
abstract_broker(actor_config& cfg);
explicit abstract_broker(actor_config& cfg);
using doorman_map = std::unordered_map<accept_handle, intrusive_ptr<doorman>>;
......
......@@ -138,7 +138,7 @@ class basp_broker : public stateful_actor<basp_broker_state, broker> {
public:
using super = stateful_actor<basp_broker_state, broker>;
basp_broker(actor_config& cfg);
explicit basp_broker(actor_config& cfg);
behavior make_behavior() override;
resume_result resume(execution_unit*, size_t) override;
void exec_single_event(execution_unit*, mailbox_element_ptr&) override;
......
......@@ -63,7 +63,7 @@ public:
void initialize() override;
broker(actor_config& cfg);
explicit broker(actor_config& cfg);
protected:
virtual behavior make_behavior();
......
......@@ -205,7 +205,7 @@ public:
return super::add_tcp_doorman(fd);
}
typed_broker(actor_config& cfg) : super(cfg) {
explicit typed_broker(actor_config& cfg) : super(cfg) {
// nop
}
......
......@@ -86,8 +86,9 @@ strong_actor_ptr basp_broker_state::make_proxy(node_id nid, actor_id aid) {
// create proxy and add functor that will be called if we
// receive a kill_proxy_instance message
auto mm = &system().middleman();
actor_config cfg;
auto res = make_actor<forwarding_actor_proxy, strong_actor_ptr>(
aid, nid, &(self->home_system()), self);
aid, nid, &(self->home_system()), cfg, self);
auto selfptr = actor_cast<strong_actor_ptr>(self);
res->get()->attach_functor([=](exit_reason rsn) {
mm->backend().post([=] {
......
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