Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
c0705e59
Commit
c0705e59
authored
Jun 19, 2012
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
maintenance
parent
8f7a794d
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
57 additions
and
60 deletions
+57
-60
cppa.files
cppa.files
+1
-1
cppa/actor_proxy.hpp
cppa/actor_proxy.hpp
+2
-2
cppa/context_switching_actor.hpp
cppa/context_switching_actor.hpp
+1
-1
cppa/detail/abstract_actor.hpp
cppa/detail/abstract_actor.hpp
+3
-3
cppa/detail/abstract_scheduled_actor.hpp
cppa/detail/abstract_scheduled_actor.hpp
+1
-1
cppa/event_based_actor.hpp
cppa/event_based_actor.hpp
+13
-8
cppa/fsm_actor.hpp
cppa/fsm_actor.hpp
+1
-4
cppa/local_actor.hpp
cppa/local_actor.hpp
+5
-11
cppa/thread_mapped_actor.hpp
cppa/thread_mapped_actor.hpp
+7
-4
src/context_switching_actor.cpp
src/context_switching_actor.cpp
+7
-7
src/event_based_actor.cpp
src/event_based_actor.cpp
+8
-10
src/scheduler.cpp
src/scheduler.cpp
+1
-1
src/thread_mapped_actor.cpp
src/thread_mapped_actor.cpp
+7
-7
No files found.
cppa.files
View file @
c0705e59
...
...
@@ -17,7 +17,7 @@ benchmarks/theron_actor_creation.cpp
benchmarks/theron_mailbox_performance.cpp
benchmarks/theron_mixed_case.cpp
benchmarks/utility.hpp
cppa/abstract_actor.hpp
cppa/
detail/
abstract_actor.hpp
cppa/event_based_actor.hpp
cppa/actor.hpp
cppa/actor_proxy.hpp
...
...
cppa/actor_proxy.hpp
View file @
c0705e59
...
...
@@ -32,7 +32,7 @@
#define CPPA_ACTOR_PROXY_HPP
#include "cppa/actor.hpp"
#include "cppa/abstract_actor.hpp"
#include "cppa/
detail/
abstract_actor.hpp"
namespace
cppa
{
...
...
@@ -45,7 +45,7 @@ class actor_proxy : public actor { };
#else // CPPA_DOCUMENTATION
class
actor_proxy
:
public
abstract_actor
<
actor
>
{
class
actor_proxy
:
public
detail
::
abstract_actor
<
actor
>
{
typedef
abstract_actor
<
actor
>
super
;
...
...
cppa/context_switching_actor.hpp
View file @
c0705e59
...
...
@@ -109,7 +109,7 @@ class context_switching_actor : public detail::abstract_scheduled_actor {
util
::
fiber
m_fiber
;
std
::
function
<
void
()
>
m_behavior
;
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
;
};
...
...
cppa/abstract_actor.hpp
→
cppa/
detail/
abstract_actor.hpp
View file @
c0705e59
...
...
@@ -51,9 +51,9 @@
#include "cppa/detail/recursive_queue_node.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.
...
...
@@ -273,6 +273,6 @@ class abstract_actor : public Base {
};
}
// namespace cppa
}
}
// namespace cppa::detail
#endif // CPPA_ABSTRACT_ACTOR_HPP
cppa/detail/abstract_scheduled_actor.hpp
View file @
c0705e59
...
...
@@ -38,7 +38,7 @@
#include "cppa/any_tuple.hpp"
#include "cppa/scheduler.hpp"
#include "cppa/local_actor.hpp"
#include "cppa/abstract_actor.hpp"
#include "cppa/
detail/
abstract_actor.hpp"
#include "cppa/scheduled_actor.hpp"
#include "cppa/util/fiber.hpp"
...
...
cppa/event_based_actor.hpp
View file @
c0705e59
...
...
@@ -59,8 +59,15 @@ class event_based_actor : public detail::abstract_scheduled_actor {
public:
/**
* @brief Finishes execution with exit reason
* {@link exit_reason::unallowed_function_call unallowed_function_call}.
*/
void
dequeue
(
behavior
&
);
//override
/**
* @copydoc dequeue(behavior&)
*/
void
dequeue
(
partial_function
&
);
//override
resume_result
resume
(
util
::
fiber
*
);
//override
...
...
@@ -70,8 +77,6 @@ class event_based_actor : public detail::abstract_scheduled_actor {
*/
virtual
void
init
()
=
0
;
virtual
void
on_exit
();
void
quit
(
std
::
uint32_t
reason
=
exit_reason
::
normal
);
void
unbecome
();
...
...
@@ -117,11 +122,13 @@ class event_based_actor : public detail::abstract_scheduled_actor {
receive
(
std
::
forward
<
Args
>
(
args
)...);
}
void
do_become
(
behavior
*
bhvr
,
bool
has_ownership
,
bool
discard_old_bhvr
);
private:
inline
behavior
&
current_behavior
()
{
CPPA_REQUIRE
(
m_stack
.
empty
()
==
false
);
return
m_stack
.
back
();
CPPA_REQUIRE
(
m_
bhvr_
stack
.
empty
()
==
false
);
return
m_
bhvr_
stack
.
back
();
}
// required by detail::nestable_receive_policy
...
...
@@ -130,17 +137,15 @@ class event_based_actor : public detail::abstract_scheduled_actor {
CPPA_REQUIRE
(
bhvr
.
timeout
().
valid
());
m_has_pending_timeout_request
=
false
;
bhvr
.
handle_timeout
();
if
(
m_stack
.
empty
()
==
false
)
{
if
(
m_
bhvr_
stack
.
empty
()
==
false
)
{
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
// to prevent possible segfaults that can occur if a currently executed
// lambda gets deleted
detail
::
behavior_stack
m_stack
;
detail
::
behavior_stack
m_
bhvr_
stack
;
detail
::
receive_policy
m_recv_policy
;
};
...
...
cppa/fsm_actor.hpp
View file @
c0705e59
...
...
@@ -31,9 +31,6 @@
#ifndef CPPA_FSM_ACTOR_HPP
#define CPPA_FSM_ACTOR_HPP
#include <type_traits>
#include "cppa/util/rm_ref.hpp"
#include "cppa/event_based_actor.hpp"
namespace
cppa
{
...
...
@@ -50,7 +47,7 @@ class fsm_actor : public event_based_actor {
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>.
*/
void
init
()
{
...
...
cppa/local_actor.hpp
View file @
c0705e59
...
...
@@ -53,14 +53,14 @@ namespace {
/**
* @brief Policy tag that causes {@link event_based_actor::become} to
* discard the current behavior.
* @relates
event_based
_actor
* @relates
local
_actor
*/
constexpr
discard_behavior_t
discard_behavior
=
discard_behavior_t
();
/**
* @brief Policy tag that causes {@link event_based_actor::become} to
* keep the current behavior available.
* @relates
event_based
_actor
* @relates
local
_actor
*/
constexpr
keep_behavior_t
keep_behavior
=
keep_behavior_t
();
...
...
@@ -226,7 +226,7 @@ class local_actor : public actor {
*/
template
<
typename
...
Cases
,
typename
...
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 {
*/
template
<
typename
...
Cases
,
typename
...
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
>
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
)...));
}
/**
...
...
cppa/thread_mapped_actor.hpp
View file @
c0705e59
...
...
@@ -47,7 +47,7 @@
#include "cppa/pattern.hpp"
#include "cppa/local_actor.hpp"
#include "cppa/exit_reason.hpp"
#include "cppa/abstract_actor.hpp"
#include "cppa/
detail/
abstract_actor.hpp"
#include "cppa/intrusive/singly_linked_list.hpp"
...
...
@@ -67,11 +67,14 @@ class thread_mapped_actor : public local_actor { };
#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
;
typedef
abstract_actor
<
local_actor
>
super
;
typedef
detail
::
abstract_actor
<
local_actor
>
super
;
public:
...
...
@@ -96,7 +99,7 @@ class thread_mapped_actor : public abstract_actor<local_actor> {
private:
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
static
const
detail
::
receive_policy_flag
receive_flag
=
detail
::
rp_nestable
;
...
...
src/context_switching_actor.cpp
View file @
c0705e59
...
...
@@ -146,8 +146,8 @@ resume_result context_switching_actor::resume(util::fiber* from) {
}
void
context_switching_actor
::
unbecome
()
{
if
(
m_stack_ptr
)
{
m_stack_ptr
->
pop_back
();
if
(
m_
bhvr_
stack_ptr
)
{
m_
bhvr_
stack_ptr
->
pop_back
();
}
else
{
quit
();
...
...
@@ -155,13 +155,13 @@ void context_switching_actor::unbecome() {
}
void
context_switching_actor
::
do_become
(
behavior
*
bhvr
,
bool
ownership
,
bool
discard
)
{
if
(
m_stack_ptr
)
{
if
(
discard
)
m_stack_ptr
->
pop_back
();
m_stack_ptr
->
push_back
(
bhvr
,
ownership
);
if
(
m_
bhvr_
stack_ptr
)
{
if
(
discard
)
m_
bhvr_
stack_ptr
->
pop_back
();
m_
bhvr_
stack_ptr
->
push_back
(
bhvr
,
ownership
);
}
else
{
m_stack_ptr
.
reset
(
new
detail
::
behavior_stack
);
m_stack_ptr
->
exec
();
m_
bhvr_
stack_ptr
.
reset
(
new
detail
::
behavior_stack
);
m_
bhvr_
stack_ptr
->
exec
();
quit
();
}
}
...
...
src/event_based_actor.cpp
View file @
c0705e59
...
...
@@ -51,7 +51,7 @@ void event_based_actor::dequeue(partial_function&) {
resume_result
event_based_actor
::
resume
(
util
::
fiber
*
)
{
auto
done_cb
=
[
&
]()
{
m_state
.
store
(
abstract_scheduled_actor
::
done
);
m_stack
.
clear
();
m_
bhvr_
stack
.
clear
();
on_exit
();
};
self
.
set
(
this
);
...
...
@@ -78,8 +78,8 @@ resume_result event_based_actor::resume(util::fiber*) {
if
(
m_recv_policy
.
invoke
(
this
,
e
,
current_behavior
()))
{
// try to match cached message before receiving new ones
do
{
m_stack
.
cleanup
();
if
(
m_stack
.
empty
())
{
m_
bhvr_
stack
.
cleanup
();
if
(
m_
bhvr_
stack
.
empty
())
{
done_cb
();
return
resume_result
::
actor_done
;
}
...
...
@@ -103,15 +103,15 @@ void event_based_actor::do_become(behavior* bhvr,
bool
discard_old_bhvr
)
{
reset_timeout
();
request_timeout
(
bhvr
->
timeout
());
if
(
discard_old_bhvr
)
m_stack
.
pop_back
();
m_stack
.
push_back
(
bhvr
,
has_ownership
);
if
(
discard_old_bhvr
)
m_
bhvr_
stack
.
pop_back
();
m_
bhvr_
stack
.
push_back
(
bhvr
,
has_ownership
);
}
void
event_based_actor
::
quit
(
std
::
uint32_t
reason
)
{
if
(
reason
==
exit_reason
::
normal
)
{
cleanup
(
exit_reason
::
normal
);
m_stack
.
clear
();
m_stack
.
cleanup
();
m_
bhvr_
stack
.
clear
();
m_
bhvr_
stack
.
cleanup
();
}
else
{
abstract_scheduled_actor
::
quit
(
reason
);
...
...
@@ -119,9 +119,7 @@ void event_based_actor::quit(std::uint32_t reason) {
}
void
event_based_actor
::
unbecome
()
{
m_stack
.
pop_back
();
m_
bhvr_
stack
.
pop_back
();
}
void
event_based_actor
::
on_exit
()
{
}
}
// namespace cppa
src/scheduler.cpp
View file @
c0705e59
...
...
@@ -97,7 +97,7 @@ class scheduler_helper {
};
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
;
// setup & local variables
self
.
set
(
m_self
.
get
());
...
...
src/thread_mapped_actor.cpp
View file @
c0705e59
...
...
@@ -109,8 +109,8 @@ detail::filter_result thread_mapped_actor::filter_msg(const any_tuple& msg) {
}
void
thread_mapped_actor
::
unbecome
()
{
if
(
m_stack_ptr
)
{
m_stack_ptr
->
pop_back
();
if
(
m_
bhvr_
stack_ptr
)
{
m_
bhvr_
stack_ptr
->
pop_back
();
}
else
{
quit
();
...
...
@@ -118,13 +118,13 @@ void thread_mapped_actor::unbecome() {
}
void
thread_mapped_actor
::
do_become
(
behavior
*
ptr
,
bool
owns_ptr
,
bool
discard
){
if
(
m_stack_ptr
)
{
if
(
discard
)
m_stack_ptr
->
pop_back
();
m_stack_ptr
->
push_back
(
ptr
,
owns_ptr
);
if
(
m_
bhvr_
stack_ptr
)
{
if
(
discard
)
m_
bhvr_
stack_ptr
->
pop_back
();
m_
bhvr_
stack_ptr
->
push_back
(
ptr
,
owns_ptr
);
}
else
{
m_stack_ptr
.
reset
(
new
detail
::
behavior_stack
);
m_stack_ptr
->
exec
();
m_
bhvr_
stack_ptr
.
reset
(
new
detail
::
behavior_stack
);
m_
bhvr_
stack_ptr
->
exec
();
quit
();
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment