Commit c0705e59 authored by Dominik Charousset's avatar Dominik Charousset

maintenance

parent 8f7a794d
...@@ -17,7 +17,7 @@ benchmarks/theron_actor_creation.cpp ...@@ -17,7 +17,7 @@ benchmarks/theron_actor_creation.cpp
benchmarks/theron_mailbox_performance.cpp benchmarks/theron_mailbox_performance.cpp
benchmarks/theron_mixed_case.cpp benchmarks/theron_mixed_case.cpp
benchmarks/utility.hpp benchmarks/utility.hpp
cppa/abstract_actor.hpp cppa/detail/abstract_actor.hpp
cppa/event_based_actor.hpp cppa/event_based_actor.hpp
cppa/actor.hpp cppa/actor.hpp
cppa/actor_proxy.hpp cppa/actor_proxy.hpp
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#define CPPA_ACTOR_PROXY_HPP #define CPPA_ACTOR_PROXY_HPP
#include "cppa/actor.hpp" #include "cppa/actor.hpp"
#include "cppa/abstract_actor.hpp" #include "cppa/detail/abstract_actor.hpp"
namespace cppa { namespace cppa {
...@@ -45,7 +45,7 @@ class actor_proxy : public actor { }; ...@@ -45,7 +45,7 @@ class actor_proxy : public actor { };
#else // CPPA_DOCUMENTATION #else // CPPA_DOCUMENTATION
class actor_proxy : public abstract_actor<actor> { class actor_proxy : public detail::abstract_actor<actor> {
typedef abstract_actor<actor> super; typedef abstract_actor<actor> super;
......
...@@ -109,7 +109,7 @@ class context_switching_actor : public detail::abstract_scheduled_actor { ...@@ -109,7 +109,7 @@ class context_switching_actor : public detail::abstract_scheduled_actor {
util::fiber m_fiber; util::fiber m_fiber;
std::function<void()> m_behavior; std::function<void()> m_behavior;
detail::receive_policy m_recv_policy; detail::receive_policy m_recv_policy;
std::unique_ptr<detail::behavior_stack> m_stack_ptr; std::unique_ptr<detail::behavior_stack> m_bhvr_stack_ptr;
}; };
......
...@@ -51,9 +51,9 @@ ...@@ -51,9 +51,9 @@
#include "cppa/detail/recursive_queue_node.hpp" #include "cppa/detail/recursive_queue_node.hpp"
#include "cppa/intrusive/single_reader_queue.hpp" #include "cppa/intrusive/single_reader_queue.hpp"
namespace cppa { namespace cppa { class self_type; }
class self_type; namespace cppa { namespace detail {
/** /**
* @brief Implements linking and monitoring for actors. * @brief Implements linking and monitoring for actors.
...@@ -273,6 +273,6 @@ class abstract_actor : public Base { ...@@ -273,6 +273,6 @@ class abstract_actor : public Base {
}; };
} // namespace cppa } } // namespace cppa::detail
#endif // CPPA_ABSTRACT_ACTOR_HPP #endif // CPPA_ABSTRACT_ACTOR_HPP
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
#include "cppa/any_tuple.hpp" #include "cppa/any_tuple.hpp"
#include "cppa/scheduler.hpp" #include "cppa/scheduler.hpp"
#include "cppa/local_actor.hpp" #include "cppa/local_actor.hpp"
#include "cppa/abstract_actor.hpp" #include "cppa/detail/abstract_actor.hpp"
#include "cppa/scheduled_actor.hpp" #include "cppa/scheduled_actor.hpp"
#include "cppa/util/fiber.hpp" #include "cppa/util/fiber.hpp"
......
...@@ -59,8 +59,15 @@ class event_based_actor : public detail::abstract_scheduled_actor { ...@@ -59,8 +59,15 @@ class event_based_actor : public detail::abstract_scheduled_actor {
public: public:
/**
* @brief Finishes execution with exit reason
* {@link exit_reason::unallowed_function_call unallowed_function_call}.
*/
void dequeue(behavior&); //override void dequeue(behavior&); //override
/**
* @copydoc dequeue(behavior&)
*/
void dequeue(partial_function&); //override void dequeue(partial_function&); //override
resume_result resume(util::fiber*); //override resume_result resume(util::fiber*); //override
...@@ -70,8 +77,6 @@ class event_based_actor : public detail::abstract_scheduled_actor { ...@@ -70,8 +77,6 @@ class event_based_actor : public detail::abstract_scheduled_actor {
*/ */
virtual void init() = 0; virtual void init() = 0;
virtual void on_exit();
void quit(std::uint32_t reason = exit_reason::normal); void quit(std::uint32_t reason = exit_reason::normal);
void unbecome(); void unbecome();
...@@ -117,11 +122,13 @@ class event_based_actor : public detail::abstract_scheduled_actor { ...@@ -117,11 +122,13 @@ class event_based_actor : public detail::abstract_scheduled_actor {
receive(std::forward<Args>(args)...); receive(std::forward<Args>(args)...);
} }
void do_become(behavior* bhvr, bool has_ownership, bool discard_old_bhvr);
private: private:
inline behavior& current_behavior() { inline behavior& current_behavior() {
CPPA_REQUIRE(m_stack.empty() == false); CPPA_REQUIRE(m_bhvr_stack.empty() == false);
return m_stack.back(); return m_bhvr_stack.back();
} }
// required by detail::nestable_receive_policy // required by detail::nestable_receive_policy
...@@ -130,17 +137,15 @@ class event_based_actor : public detail::abstract_scheduled_actor { ...@@ -130,17 +137,15 @@ class event_based_actor : public detail::abstract_scheduled_actor {
CPPA_REQUIRE(bhvr.timeout().valid()); CPPA_REQUIRE(bhvr.timeout().valid());
m_has_pending_timeout_request = false; m_has_pending_timeout_request = false;
bhvr.handle_timeout(); bhvr.handle_timeout();
if (m_stack.empty() == false) { if (m_bhvr_stack.empty() == false) {
request_timeout(current_behavior().timeout()); request_timeout(current_behavior().timeout());
} }
} }
void do_become(behavior* bhvr, bool has_ownership, bool discard_old_bhvr);
// stack elements are moved to m_erased_stack_elements and erased later // stack elements are moved to m_erased_stack_elements and erased later
// to prevent possible segfaults that can occur if a currently executed // to prevent possible segfaults that can occur if a currently executed
// lambda gets deleted // lambda gets deleted
detail::behavior_stack m_stack; detail::behavior_stack m_bhvr_stack;
detail::receive_policy m_recv_policy; detail::receive_policy m_recv_policy;
}; };
......
...@@ -31,9 +31,6 @@ ...@@ -31,9 +31,6 @@
#ifndef CPPA_FSM_ACTOR_HPP #ifndef CPPA_FSM_ACTOR_HPP
#define CPPA_FSM_ACTOR_HPP #define CPPA_FSM_ACTOR_HPP
#include <type_traits>
#include "cppa/util/rm_ref.hpp"
#include "cppa/event_based_actor.hpp" #include "cppa/event_based_actor.hpp"
namespace cppa { namespace cppa {
...@@ -50,7 +47,7 @@ class fsm_actor : public event_based_actor { ...@@ -50,7 +47,7 @@ class fsm_actor : public event_based_actor {
public: public:
/** /**
* @brief Overrides abstract_event_based_actor::init() and sets * @brief Overrides {@link event_based_actor::init()} and sets
* the initial actor behavior to <tt>Derived::init_state</tt>. * the initial actor behavior to <tt>Derived::init_state</tt>.
*/ */
void init() { void init() {
......
...@@ -53,14 +53,14 @@ namespace { ...@@ -53,14 +53,14 @@ namespace {
/** /**
* @brief Policy tag that causes {@link event_based_actor::become} to * @brief Policy tag that causes {@link event_based_actor::become} to
* discard the current behavior. * discard the current behavior.
* @relates event_based_actor * @relates local_actor
*/ */
constexpr discard_behavior_t discard_behavior = discard_behavior_t(); constexpr discard_behavior_t discard_behavior = discard_behavior_t();
/** /**
* @brief Policy tag that causes {@link event_based_actor::become} to * @brief Policy tag that causes {@link event_based_actor::become} to
* keep the current behavior available. * keep the current behavior available.
* @relates event_based_actor * @relates local_actor
*/ */
constexpr keep_behavior_t keep_behavior = keep_behavior_t(); constexpr keep_behavior_t keep_behavior = keep_behavior_t();
...@@ -226,7 +226,7 @@ class local_actor : public actor { ...@@ -226,7 +226,7 @@ class local_actor : public actor {
*/ */
template<typename... Cases, typename... Args> template<typename... Cases, typename... Args>
inline void become(discard_behavior_t, match_expr<Cases...>&& arg0, Args&&... args) { inline void become(discard_behavior_t, match_expr<Cases...>&& arg0, Args&&... args) {
become(discard_behavior, bhvr_collapse(std::move(arg0), std::forward<Args>(args)...)); become(discard_behavior, match_expr_concat(std::move(arg0), std::forward<Args>(args)...));
} }
/** /**
...@@ -234,18 +234,12 @@ class local_actor : public actor { ...@@ -234,18 +234,12 @@ class local_actor : public actor {
*/ */
template<typename... Cases, typename... Args> template<typename... Cases, typename... Args>
inline void become(keep_behavior_t, match_expr<Cases...>&& arg0, Args&&... args) { inline void become(keep_behavior_t, match_expr<Cases...>&& arg0, Args&&... args) {
become(keep_behavior, bhvr_collapse(std::move(arg0), std::forward<Args>(args)...)); become(keep_behavior, match_expr_concat(std::move(arg0), std::forward<Args>(args)...));
} }
/**
* @brief Sets the actor's behavior. Equal to
* <tt>become(discard_old, arg0, args...)</tt>.
*/
template<typename Arg0, typename... Args>
void become(Arg0&& arg0, Args&&... args);
template<typename... Cases, typename... Args> template<typename... Cases, typename... Args>
inline void become(match_expr<Cases...> arg0, Args&&... args) { inline void become(match_expr<Cases...> arg0, Args&&... args) {
become(discard_behavior, bhvr_collapse(std::move(arg0), std::forward<Args>(args)...)); become(discard_behavior, match_expr_concat(std::move(arg0), std::forward<Args>(args)...));
} }
/** /**
......
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
#include "cppa/pattern.hpp" #include "cppa/pattern.hpp"
#include "cppa/local_actor.hpp" #include "cppa/local_actor.hpp"
#include "cppa/exit_reason.hpp" #include "cppa/exit_reason.hpp"
#include "cppa/abstract_actor.hpp" #include "cppa/detail/abstract_actor.hpp"
#include "cppa/intrusive/singly_linked_list.hpp" #include "cppa/intrusive/singly_linked_list.hpp"
...@@ -67,11 +67,14 @@ class thread_mapped_actor : public local_actor { }; ...@@ -67,11 +67,14 @@ class thread_mapped_actor : public local_actor { };
#else // CPPA_DOCUMENTATION #else // CPPA_DOCUMENTATION
class thread_mapped_actor : public abstract_actor<local_actor> { class self_type;
class thread_mapped_actor : public detail::abstract_actor<local_actor> {
friend class self_type;
friend class detail::receive_policy; friend class detail::receive_policy;
typedef abstract_actor<local_actor> super; typedef detail::abstract_actor<local_actor> super;
public: public:
...@@ -96,7 +99,7 @@ class thread_mapped_actor : public abstract_actor<local_actor> { ...@@ -96,7 +99,7 @@ class thread_mapped_actor : public abstract_actor<local_actor> {
private: private:
detail::receive_policy m_recv_policy; detail::receive_policy m_recv_policy;
std::unique_ptr<detail::behavior_stack> m_stack_ptr; std::unique_ptr<detail::behavior_stack> m_bhvr_stack_ptr;
// required by nestable_receive_policy // required by nestable_receive_policy
static const detail::receive_policy_flag receive_flag = detail::rp_nestable; static const detail::receive_policy_flag receive_flag = detail::rp_nestable;
......
...@@ -146,8 +146,8 @@ resume_result context_switching_actor::resume(util::fiber* from) { ...@@ -146,8 +146,8 @@ resume_result context_switching_actor::resume(util::fiber* from) {
} }
void context_switching_actor::unbecome() { void context_switching_actor::unbecome() {
if (m_stack_ptr) { if (m_bhvr_stack_ptr) {
m_stack_ptr->pop_back(); m_bhvr_stack_ptr->pop_back();
} }
else { else {
quit(); quit();
...@@ -155,13 +155,13 @@ void context_switching_actor::unbecome() { ...@@ -155,13 +155,13 @@ void context_switching_actor::unbecome() {
} }
void context_switching_actor::do_become(behavior* bhvr, bool ownership, bool discard) { void context_switching_actor::do_become(behavior* bhvr, bool ownership, bool discard) {
if (m_stack_ptr) { if (m_bhvr_stack_ptr) {
if (discard) m_stack_ptr->pop_back(); if (discard) m_bhvr_stack_ptr->pop_back();
m_stack_ptr->push_back(bhvr, ownership); m_bhvr_stack_ptr->push_back(bhvr, ownership);
} }
else { else {
m_stack_ptr.reset(new detail::behavior_stack); m_bhvr_stack_ptr.reset(new detail::behavior_stack);
m_stack_ptr->exec(); m_bhvr_stack_ptr->exec();
quit(); quit();
} }
} }
......
...@@ -51,7 +51,7 @@ void event_based_actor::dequeue(partial_function&) { ...@@ -51,7 +51,7 @@ void event_based_actor::dequeue(partial_function&) {
resume_result event_based_actor::resume(util::fiber*) { resume_result event_based_actor::resume(util::fiber*) {
auto done_cb = [&]() { auto done_cb = [&]() {
m_state.store(abstract_scheduled_actor::done); m_state.store(abstract_scheduled_actor::done);
m_stack.clear(); m_bhvr_stack.clear();
on_exit(); on_exit();
}; };
self.set(this); self.set(this);
...@@ -78,8 +78,8 @@ resume_result event_based_actor::resume(util::fiber*) { ...@@ -78,8 +78,8 @@ resume_result event_based_actor::resume(util::fiber*) {
if (m_recv_policy.invoke(this, e, current_behavior())) { if (m_recv_policy.invoke(this, e, current_behavior())) {
// try to match cached message before receiving new ones // try to match cached message before receiving new ones
do { do {
m_stack.cleanup(); m_bhvr_stack.cleanup();
if (m_stack.empty()) { if (m_bhvr_stack.empty()) {
done_cb(); done_cb();
return resume_result::actor_done; return resume_result::actor_done;
} }
...@@ -103,15 +103,15 @@ void event_based_actor::do_become(behavior* bhvr, ...@@ -103,15 +103,15 @@ void event_based_actor::do_become(behavior* bhvr,
bool discard_old_bhvr) { bool discard_old_bhvr) {
reset_timeout(); reset_timeout();
request_timeout(bhvr->timeout()); request_timeout(bhvr->timeout());
if (discard_old_bhvr) m_stack.pop_back(); if (discard_old_bhvr) m_bhvr_stack.pop_back();
m_stack.push_back(bhvr, has_ownership); m_bhvr_stack.push_back(bhvr, has_ownership);
} }
void event_based_actor::quit(std::uint32_t reason) { void event_based_actor::quit(std::uint32_t reason) {
if (reason == exit_reason::normal) { if (reason == exit_reason::normal) {
cleanup(exit_reason::normal); cleanup(exit_reason::normal);
m_stack.clear(); m_bhvr_stack.clear();
m_stack.cleanup(); m_bhvr_stack.cleanup();
} }
else { else {
abstract_scheduled_actor::quit(reason); abstract_scheduled_actor::quit(reason);
...@@ -119,9 +119,7 @@ void event_based_actor::quit(std::uint32_t reason) { ...@@ -119,9 +119,7 @@ void event_based_actor::quit(std::uint32_t reason) {
} }
void event_based_actor::unbecome() { void event_based_actor::unbecome() {
m_stack.pop_back(); m_bhvr_stack.pop_back();
} }
void event_based_actor::on_exit() { }
} // namespace cppa } // namespace cppa
...@@ -97,7 +97,7 @@ class scheduler_helper { ...@@ -97,7 +97,7 @@ class scheduler_helper {
}; };
void scheduler_helper::time_emitter(scheduler_helper::ptr_type m_self) { void scheduler_helper::time_emitter(scheduler_helper::ptr_type m_self) {
typedef abstract_actor<local_actor> impl_type; typedef detail::abstract_actor<local_actor> impl_type;
typedef std::unique_ptr<detail::recursive_queue_node> queue_node_ptr; typedef std::unique_ptr<detail::recursive_queue_node> queue_node_ptr;
// setup & local variables // setup & local variables
self.set(m_self.get()); self.set(m_self.get());
......
...@@ -109,8 +109,8 @@ detail::filter_result thread_mapped_actor::filter_msg(const any_tuple& msg) { ...@@ -109,8 +109,8 @@ detail::filter_result thread_mapped_actor::filter_msg(const any_tuple& msg) {
} }
void thread_mapped_actor::unbecome() { void thread_mapped_actor::unbecome() {
if (m_stack_ptr) { if (m_bhvr_stack_ptr) {
m_stack_ptr->pop_back(); m_bhvr_stack_ptr->pop_back();
} }
else { else {
quit(); quit();
...@@ -118,13 +118,13 @@ void thread_mapped_actor::unbecome() { ...@@ -118,13 +118,13 @@ void thread_mapped_actor::unbecome() {
} }
void thread_mapped_actor::do_become(behavior* ptr, bool owns_ptr, bool discard){ void thread_mapped_actor::do_become(behavior* ptr, bool owns_ptr, bool discard){
if (m_stack_ptr) { if (m_bhvr_stack_ptr) {
if (discard) m_stack_ptr->pop_back(); if (discard) m_bhvr_stack_ptr->pop_back();
m_stack_ptr->push_back(ptr, owns_ptr); m_bhvr_stack_ptr->push_back(ptr, owns_ptr);
} }
else { else {
m_stack_ptr.reset(new detail::behavior_stack); m_bhvr_stack_ptr.reset(new detail::behavior_stack);
m_stack_ptr->exec(); m_bhvr_stack_ptr->exec();
quit(); quit();
} }
} }
......
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