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
19af9398
Commit
19af9398
authored
Mar 11, 2011
by
neverlord
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
debugging
parent
1620b8ab
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
235 additions
and
162 deletions
+235
-162
Makefile.rules
Makefile.rules
+3
-0
cppa.creator.user
cppa.creator.user
+4
-4
cppa/detail/ref_counted_impl.hpp
cppa/detail/ref_counted_impl.hpp
+2
-2
cppa/intrusive_ptr.hpp
cppa/intrusive_ptr.hpp
+12
-3
cppa/message.hpp
cppa/message.hpp
+6
-3
cppa/uniform_type_info.hpp
cppa/uniform_type_info.hpp
+1
-1
cppa/util/singly_linked_list.hpp
cppa/util/singly_linked_list.hpp
+10
-0
src/deserializer.cpp
src/deserializer.cpp
+1
-1
src/mock_scheduler.cpp
src/mock_scheduler.cpp
+8
-3
src/uniform_type_info.cpp
src/uniform_type_info.cpp
+142
-123
unit_testing/main.cpp
unit_testing/main.cpp
+1
-0
unit_testing/test.hpp
unit_testing/test.hpp
+0
-4
unit_testing/test__atom.cpp
unit_testing/test__atom.cpp
+1
-0
unit_testing/test__local_group.cpp
unit_testing/test__local_group.cpp
+43
-17
unit_testing/test__serialization.cpp
unit_testing/test__serialization.cpp
+1
-1
No files found.
Makefile.rules
0 → 100644
View file @
19af9398
CXX
=
/opt/local/bin/g++-mp-4.5
CXXFLAGS
=
-std
=
c++0x
-pedantic
-Wall
-Wextra
-g
-O0
-I
/opt/local/include/
LIBS
=
-L
/opt/local/lib
-lboost_thread-mt
cppa.creator.user
View file @
19af9398
...
...
@@ -60,15 +60,15 @@
<valuemap
type=
"QVariantMap"
>
<value
key=
"ProjectExplorer.BuildConfiguration.DisplayName"
type=
"QString"
>
all
</value>
<valuelist
key=
"abstractProcess.Environment"
type=
"QVariantList"
>
<value
type=
"QString"
>
Apple_PubSub_Socket_Render=/tmp/launch-
gSC9AO
/Render
</value>
<value
type=
"QString"
>
Apple_PubSub_Socket_Render=/tmp/launch-
Ii2KqP
/Render
</value>
<value
type=
"QString"
>
COMMAND_MODE=unix2003
</value>
<value
type=
"QString"
>
DISPLAY=/tmp/launch-
1vsPWG
/org.x:0
</value>
<value
type=
"QString"
>
DISPLAY=/tmp/launch-
6FAyZP
/org.x:0
</value>
<value
type=
"QString"
>
HOME=/Users/neverlord
</value>
<value
type=
"QString"
>
LOGNAME=neverlord
</value>
<value
type=
"QString"
>
PATH=/usr/bin:/bin:/usr/sbin:/sbin
</value>
<value
type=
"QString"
>
SHELL=/bin/bash
</value>
<value
type=
"QString"
>
SSH_AUTH_SOCK=/tmp/launch-
H5MBik
/Listeners
</value>
<value
type=
"QString"
>
TMPDIR=/var/folders/
SE/SEReyCW0H-yDPCnNCe8mN+
+++TI/-Tmp-/
</value>
<value
type=
"QString"
>
SSH_AUTH_SOCK=/tmp/launch-
vifjfO
/Listeners
</value>
<value
type=
"QString"
>
TMPDIR=/var/folders/
1p/1p6iuPgbH7GoDkrjrT20tU
+++TI/-Tmp-/
</value>
<value
type=
"QString"
>
USER=neverlord
</value>
<value
type=
"QString"
>
__CF_USER_TEXT_ENCODING=0x1F5:0:3
</value>
</valuelist>
...
...
cppa/detail/ref_counted_impl.hpp
View file @
19af9398
...
...
@@ -21,9 +21,9 @@ class ref_counted_impl
inline
void
ref
()
{
++
m_rc
;
}
inline
bool
deref
()
{
return
(
--
m_rc
>
0
)
;
}
inline
bool
deref
()
{
return
--
m_rc
>
0
;
}
inline
bool
unique
()
{
return
(
m_rc
==
1
)
;
}
inline
bool
unique
()
{
return
m_rc
==
1
;
}
};
...
...
cppa/intrusive_ptr.hpp
View file @
19af9398
...
...
@@ -44,7 +44,13 @@ class intrusive_ptr : detail::comparable<intrusive_ptr<T>, T*>,
set_ptr
(
const_cast
<
Y
*>
(
other
.
get
()));
}
~
intrusive_ptr
()
{
if
(
m_ptr
&&
!
m_ptr
->
deref
())
delete
m_ptr
;
}
~
intrusive_ptr
()
{
if
(
m_ptr
&&
!
m_ptr
->
deref
())
{
delete
m_ptr
;
}
}
T
*
get
()
{
return
m_ptr
;
}
...
...
@@ -71,8 +77,11 @@ class intrusive_ptr : detail::comparable<intrusive_ptr<T>, T*>,
intrusive_ptr
&
operator
=
(
const
intrusive_ptr
&
other
)
{
intrusive_ptr
tmp
(
other
);
swap
(
tmp
);
if
(
get
()
!=
other
.
get
())
{
intrusive_ptr
tmp
(
other
);
swap
(
tmp
);
}
return
*
this
;
}
...
...
cppa/message.hpp
View file @
19af9398
...
...
@@ -23,7 +23,10 @@ class message
const
untyped_tuple
data
;
content
(
const
actor
&
s
,
const
message_receiver
&
r
,
const
untyped_tuple
&
ut
)
:
sender
(
s
),
receiver
(
r
),
data
(
ut
)
:
ref_counted
(),
sender
(
s
),
receiver
(
r
),
data
(
ut
)
{
}
~
content
()
{
}
};
...
...
@@ -41,8 +44,8 @@ class message
message
(
const
actor
&
from
,
const
message_receiver
&
to
,
const
untyped_tuple
&
ut
)
:
m_content
(
new
content
(
from
,
to
,
ut
))
{
}
message
(
const
actor
&
from
,
const
message_receiver
&
to
,
untyped_tuple
&&
ut
)
:
m_content
(
new
content
(
from
,
to
,
std
::
move
(
ut
)))
{
}
//
message(const actor& from, const message_receiver& to, untyped_tuple&& ut)
//
: m_content(new content(from, to, std::move(ut))) { }
message
()
:
m_content
(
new
content
(
0
,
0
,
tuple
<
int
>
(
0
)))
{
}
...
...
cppa/uniform_type_info.hpp
View file @
19af9398
...
...
@@ -61,7 +61,7 @@ CPPA_ANNOUNCE(std::uint64_t);
CPPA_ANNOUNCE(float);
CPPA_ANNOUNCE(double);
CPPA_ANNOUNCE(long double);
*/
CPPA_ANNOUNCE(std::string);
*/
#endif // UNIFORM_TYPE_INFO_HPP
cppa/util/singly_linked_list.hpp
View file @
19af9398
...
...
@@ -18,6 +18,16 @@ class singly_linked_list
singly_linked_list
()
:
m_head
(
0
),
m_tail
(
0
)
{
}
~
singly_linked_list
()
{
while
(
m_head
)
{
T
*
next
=
m_head
->
next
;
delete
m_head
;
m_head
=
next
;
}
}
inline
bool
empty
()
const
{
return
m_head
==
0
;
}
void
push_back
(
element_type
*
what
)
...
...
src/deserializer.cpp
View file @
19af9398
...
...
@@ -18,6 +18,6 @@ cppa::deserializer& operator>>(cppa::deserializer& d, std::string& str)
d
.
read
(
str_size
,
cbuf
);
cbuf
[
str_size
]
=
0
;
str
=
cbuf
;
delete
cbuf
;
delete
[]
cbuf
;
return
d
;
}
src/mock_scheduler.cpp
View file @
19af9398
...
...
@@ -11,7 +11,7 @@ struct actor_message
{
actor_message
*
next
;
cppa
::
message
msg
;
actor_message
(
const
cppa
::
message
&
from
)
:
msg
(
from
)
{
}
actor_message
(
const
cppa
::
message
&
from
)
:
next
(
0
),
msg
(
from
)
{
}
};
struct
actor_impl
;
...
...
@@ -31,6 +31,11 @@ struct actor_impl : cppa::detail::actor_private
actor_impl
(
cppa
::
detail
::
behavior
*
b
=
0
)
:
m_behavior
(
b
)
{
}
~
actor_impl
()
{
if
(
m_behavior
)
delete
m_behavior
;
}
virtual
void
enqueue_msg
(
const
cppa
::
message
&
msg
)
{
mailbox
.
push_back
(
new
actor_message
(
msg
));
...
...
@@ -98,7 +103,6 @@ struct actor_ptr
{
cppa
::
intrusive_ptr
<
actor_impl
>
m_impl
;
actor_ptr
(
actor_impl
*
ai
)
:
m_impl
(
ai
)
{
}
actor_ptr
(
actor_ptr
&&
other
)
:
m_impl
(
std
::
move
(
other
.
m_impl
))
{
}
actor_ptr
(
const
actor_ptr
&
)
=
default
;
void
operator
()()
{
...
...
@@ -131,7 +135,8 @@ actor spawn_impl(behavior* actor_behavior)
{
actor_ptr
aptr
(
new
actor_impl
(
actor_behavior
));
boost
::
thread
(
aptr
).
detach
();
return
actor
(
std
::
move
(
aptr
.
m_impl
));
return
actor
(
aptr
.
m_impl
);
// return actor(std::move(aptr.m_impl));
}
}
}
// namespace cppa::detail
src/uniform_type_info.cpp
View file @
19af9398
#include <limits>
#include <vector>
#include <string>
#include <memory>
#include <cstdint>
#include <cassert>
#include <iostream>
#include <algorithm>
#include <stdexcept>
#include <atomic>
#include "cppa/config.hpp"
#include "cppa/uniform_type_info.hpp"
...
...
@@ -23,29 +27,53 @@ typedef std::map<std::string, std::string> string_map;
template
<
int
Size
,
bool
IsSigned
>
struct
int_helper
{
};
template
<
>
struct
int_helper
<
1
,
true
>
{
static
const
char
*
name
;
};
const
char
*
int_helper
<
1
,
true
>::
name
=
"int8_t"
;
template
<
>
struct
int_helper
<
1
,
true
>
{
static
std
::
string
name
()
{
return
"@i8"
;
}
};
template
<
>
struct
int_helper
<
2
,
true
>
{
static
const
char
*
name
;
};
const
char
*
int_helper
<
2
,
true
>::
name
=
"int16_t"
;
template
<
>
struct
int_helper
<
2
,
true
>
{
static
std
::
string
name
()
{
return
"@i16"
;
}
};
template
<
>
struct
int_helper
<
4
,
true
>
{
static
const
char
*
name
;
};
const
char
*
int_helper
<
4
,
true
>::
name
=
"int32_t"
;
template
<
>
struct
int_helper
<
4
,
true
>
{
static
std
::
string
name
()
{
return
"@i32"
;
}
};
template
<
>
struct
int_helper
<
8
,
true
>
{
static
const
char
*
name
;
};
const
char
*
int_helper
<
8
,
true
>::
name
=
"int64_t"
;
template
<
>
struct
int_helper
<
8
,
true
>
{
static
std
::
string
name
()
{
return
"@i64"
;
}
};
template
<
>
struct
int_helper
<
1
,
false
>
{
static
const
char
*
name
;
};
const
char
*
int_helper
<
1
,
false
>::
name
=
"uint8_t"
;
template
<
>
struct
int_helper
<
1
,
false
>
{
static
std
::
string
name
()
{
return
"@u8"
;
}
};
template
<
>
struct
int_helper
<
2
,
false
>
{
static
const
char
*
name
;
};
const
char
*
int_helper
<
2
,
false
>::
name
=
"uint16_t"
;
template
<
>
struct
int_helper
<
2
,
false
>
{
static
std
::
string
name
()
{
return
"@u16"
;
}
};
template
<
>
struct
int_helper
<
4
,
false
>
{
static
const
char
*
name
;
};
const
char
*
int_helper
<
4
,
false
>::
name
=
"uint32_t"
;
template
<
>
struct
int_helper
<
4
,
false
>
{
static
std
::
string
name
()
{
return
"@u32"
;
}
};
template
<
>
struct
int_helper
<
8
,
false
>
{
static
const
char
*
name
;
};
const
char
*
int_helper
<
8
,
false
>::
name
=
"uint64_t"
;
template
<
>
struct
int_helper
<
8
,
false
>
{
static
std
::
string
name
()
{
return
"@u64"
;
}
};
template
<
typename
T
>
struct
uniform_int
:
int_helper
<
sizeof
(
T
),
std
::
numeric_limits
<
T
>::
is_signed
>
{};
...
...
@@ -56,13 +84,12 @@ std::map<std::string, cppa::utype*>* ut_map = 0;
template
<
typename
T
>
std
::
string
raw_name
()
{
std
::
string
result
;
size_t
size
;
int
status
;
char
*
undecorated
=
abi
::
__cxa_demangle
(
typeid
(
T
).
name
(),
NULL
,
&
size
,
&
status
);
assert
(
status
==
0
);
result
=
undecorated
;
std
::
string
result
(
undecorated
,
size
)
;
free
(
undecorated
);
return
result
;
}
...
...
@@ -74,147 +101,120 @@ const char* raw_name()
}
#endif
string_map
*
btm_ptr
=
0
;
//string_map* btm_ptr = 0;
std
::
unique_ptr
<
string_map
>
btm_ptr
;
const
string_map
&
builtin_type_mappings
()
{
if
(
!
btm_ptr
)
{
btm_ptr
=
new
string_map
string_map
*
value
=
new
string_map
{
{
raw_name
<
char
>
(),
uniform_int
<
char
>::
name
},
uniform_int
<
char
>::
name
()
},
{
raw_name
<
signed
char
>
(),
uniform_int
<
signed
char
>::
name
},
uniform_int
<
signed
char
>::
name
()
},
{
raw_name
<
unsigned
char
>
(),
uniform_int
<
unsigned
char
>::
name
},
uniform_int
<
unsigned
char
>::
name
()
},
{
raw_name
<
short
>
(),
uniform_int
<
short
>::
name
},
uniform_int
<
short
>::
name
()
},
{
raw_name
<
signed
short
>
(),
uniform_int
<
signed
short
>::
name
},
uniform_int
<
signed
short
>::
name
()
},
{
raw_name
<
unsigned
short
>
(),
uniform_int
<
unsigned
short
>::
name
},
uniform_int
<
unsigned
short
>::
name
()
},
{
raw_name
<
short
int
>
(),
uniform_int
<
short
int
>::
name
},
uniform_int
<
short
int
>::
name
()
},
{
raw_name
<
signed
short
int
>
(),
uniform_int
<
signed
short
int
>::
name
},
uniform_int
<
signed
short
int
>::
name
()
},
{
raw_name
<
unsigned
short
int
>
(),
uniform_int
<
unsigned
short
int
>::
name
},
uniform_int
<
unsigned
short
int
>::
name
()
},
{
raw_name
<
int
>
(),
uniform_int
<
int
>::
name
},
uniform_int
<
int
>::
name
()
},
{
raw_name
<
signed
int
>
(),
uniform_int
<
signed
int
>::
name
},
uniform_int
<
signed
int
>::
name
()
},
{
raw_name
<
unsigned
int
>
(),
uniform_int
<
unsigned
int
>::
name
},
uniform_int
<
unsigned
int
>::
name
()
},
{
raw_name
<
long
>
(),
uniform_int
<
long
>::
name
},
uniform_int
<
long
>::
name
()
},
{
raw_name
<
signed
long
>
(),
uniform_int
<
signed
long
>::
name
},
uniform_int
<
signed
long
>::
name
()
},
{
raw_name
<
unsigned
long
>
(),
uniform_int
<
unsigned
long
>::
name
},
uniform_int
<
unsigned
long
>::
name
()
},
{
raw_name
<
long
int
>
(),
uniform_int
<
long
int
>::
name
},
uniform_int
<
long
int
>::
name
()
},
{
raw_name
<
signed
long
int
>
(),
uniform_int
<
signed
long
int
>::
name
},
uniform_int
<
signed
long
int
>::
name
()
},
{
raw_name
<
unsigned
long
int
>
(),
uniform_int
<
unsigned
long
int
>::
name
},
uniform_int
<
unsigned
long
int
>::
name
()
},
{
raw_name
<
long
long
>
(),
uniform_int
<
long
long
>::
name
},
uniform_int
<
long
long
>::
name
()
},
{
raw_name
<
signed
long
long
>
(),
uniform_int
<
signed
long
long
>::
name
},
uniform_int
<
signed
long
long
>::
name
()
},
{
raw_name
<
unsigned
long
long
>
(),
uniform_int
<
unsigned
long
long
>::
name
},
// GCC dosn't return a standard compliant name for the std::string typedef
# ifdef CPPA_GCC
{
raw_name
<
std
::
string
>
(),
"std::basic_string<char,std::char_traits<char>,std::allocator<char>>"
}
# endif
uniform_int
<
unsigned
long
long
>::
name
()
},
{
raw_name
<
std
::
string
>
(),
"@str"
},
{
raw_name
<
std
::
w
string
>
(),
"@wstr"
}
// "std::basic_string<char,std::char_traits<char>,std::allocator<char>>" }
};
btm_ptr
.
reset
(
value
);
return
*
btm_ptr
;
}
else
{
return
*
btm_ptr
;
}
return
*
btm_ptr
;
}
}
// namespace <anonymous>
namespace
cppa
{
namespace
detail
{
std
::
string
demangle
(
const
char
*
type_nam
e
)
std
::
string
demangle
_impl
(
const
char
*
begin
,
const
char
*
end
,
size_t
siz
e
)
{
std
::
string
result
;
# ifdef CPPA_WINDOWS
result
=
type_name
;
std
::
vector
<
std
::
string
>
needles
;
needles
.
push_back
(
"class "
);
needles
.
push_back
(
"struct "
);
// the VC++ compiler adds "class " and "struct " before a type names
for
(
size_t
i
=
0
;
i
<
needles
.
size
();
++
i
)
// demangling of a template?
const
char
*
pos
=
std
::
find
(
begin
,
end
,
'<'
);
if
(
pos
==
end
)
{
const
std
::
string
&
needle
=
needles
[
i
];
bool
string_changed
=
false
;
do
{
// result is our haystack
size_t
pos
=
result
.
find
(
needle
);
if
(
pos
!=
std
::
string
::
npos
)
{
result
.
erase
(
pos
,
needle
.
size
());
string_changed
=
true
;
}
else
string_changed
=
false
;
}
while
(
string_changed
);
return
std
::
string
(
begin
,
size
);
}
# elif defined(CPPA_GCC)
size_t
size
;
int
status
;
char
*
undecorated
=
abi
::
__cxa_demangle
(
type_name
,
NULL
,
&
size
,
&
status
);
assert
(
status
==
0
);
result
=
undecorated
;
free
(
undecorated
);
# else
# error "Unsupported plattform"
# endif
// template class?
std
::
string
::
size_type
pos
=
result
.
find
(
'<'
);
if
(
pos
!=
std
::
string
::
npos
)
else
{
// map every single template argument to uniform names
// skip leading '<'
++
pos
;
std
::
string
processed_name
(
result
,
0
,
pos
);
processed_name
.
reserve
(
result
.
size
());
std
::
string
processed
(
begin
,
pos
);
std
::
string
tmp
;
//
replace all simple type names
for
(
std
::
string
::
size_type
p
=
pos
;
p
<
result
.
size
();
++
p
)
//
skip leading '<'
for
(
++
pos
;
pos
!=
end
;
++
pos
)
{
switch
(
result
[
p
])
char
c
=
*
pos
;
switch
(
c
)
{
case
','
:
case
'>'
:
case
'<'
:
case
','
:
case
'>'
:
case
'<'
:
{
// erase trailing whitespaces
while
(
!
tmp
.
empty
()
&&
tmp
[
tmp
.
size
()
-
1
]
==
' '
)
while
(
!
tmp
.
empty
()
&&
(
*
(
tmp
.
rbegin
())
==
' '
)
)
{
tmp
.
eras
e
(
tmp
.
size
()
-
1
);
tmp
.
resiz
e
(
tmp
.
size
()
-
1
);
}
auto
i
=
builtin_type_mappings
().
find
(
tmp
);
if
(
i
!=
builtin_type_mappings
().
end
())
{
processed
_name
+=
i
->
second
;
processed
+=
i
->
second
;
}
else
{
processed
_name
+=
tmp
;
processed
+=
tmp
;
}
}
processed
_name
+=
result
[
p
]
;
processed
+=
c
;
tmp
.
clear
();
break
;
case
' '
:
case
' '
:
if
(
tmp
==
"class"
||
tmp
==
"struct"
)
{
tmp
.
clear
();
...
...
@@ -226,38 +226,57 @@ std::string demangle(const char* type_name)
}
break
;
default:
tmp
+=
result
[
p
]
;
default:
tmp
+=
c
;
break
;
}
}
/*
if (!m_complex_mappings.empty())
return
processed
;
}
}
std
::
string
demangle
(
const
char
*
decorated_type_name
)
{
# ifdef CPPA_WINDOWS
result
=
type_name
;
std
::
vector
<
std
::
string
>
needles
;
needles
.
push_back
(
"class "
);
needles
.
push_back
(
"struct "
);
// the VC++ compiler adds "class " and "struct " before a type names
for
(
size_t
i
=
0
;
i
<
needles
.
size
();
++
i
)
{
const
std
::
string
&
needle
=
needles
[
i
];
bool
string_changed
=
false
;
do
{
// perform a lookup for complex types, such as template types
for (string_map::const_iterator i = m_complex_mappings.begin();
i != m_complex_mappings.end();
++i)
// result is our haystack
size_t
pos
=
result
.
find
(
needle
);
if
(
pos
!=
std
::
string
::
npos
)
{
const std::string& needle = i->first;
std::string::size_type x = processed_name.find(needle);
if (x != std::string::npos)
{
processed_name.replace(x, needle.size(), i->second);
}
result
.
erase
(
pos
,
needle
.
size
());
string_changed
=
true
;
}
else
string_changed
=
false
;
}
*/
result
=
processed_name
;
while
(
string_changed
);
}
else
# elif defined(CPPA_GCC)
size_t
size
=
0
;
int
status
=
0
;
char
*
undecorated
=
abi
::
__cxa_demangle
(
decorated_type_name
,
NULL
,
&
size
,
&
status
);
assert
(
status
==
0
);
std
::
string
result
=
demangle_impl
(
undecorated
,
undecorated
+
size
,
size
);
free
(
undecorated
);
# else
# error "Unsupported plattform"
# endif
// template class?
auto
i
=
builtin_type_mappings
().
find
(
result
);
if
(
i
!=
builtin_type_mappings
().
end
())
{
auto
i
=
builtin_type_mappings
().
find
(
result
);
if
(
i
!=
builtin_type_mappings
().
end
())
{
result
=
i
->
second
;
}
result
=
i
->
second
;
}
return
result
;
}
...
...
unit_testing/main.cpp
View file @
19af9398
...
...
@@ -26,6 +26,7 @@ using std::endl;
int
main
(
int
argc
,
char
**
c_argv
)
{
std
::
vector
<
std
::
string
>
argv
;
for
(
int
i
=
1
;
i
<
argc
;
++
i
)
{
...
...
unit_testing/test.hpp
View file @
19af9398
...
...
@@ -34,10 +34,6 @@ if ((lhs_loc) != (rhs_loc)) \
++error_count; \
} ((void) 0)
unsigned
int
hash_of
(
const
char
*
what
,
int
what_length
);
unsigned
int
hash_of
(
const
std
::
string
&
what
);
std
::
size_t
test__type_list
();
std
::
size_t
test__a_matches_b
();
std
::
size_t
test__atom
();
...
...
unit_testing/test__atom.cpp
View file @
19af9398
...
...
@@ -3,6 +3,7 @@
#include <iostream>
#include "test.hpp"
#include "hash_of.hpp"
#include "cppa/util.hpp"
using
std
::
cout
;
...
...
unit_testing/test__local_group.cpp
View file @
19af9398
#include "test.hpp"
#include "hash_of.hpp"
#include "cppa/on.hpp"
#include "cppa/spawn.hpp"
...
...
@@ -124,11 +125,19 @@ group_table<100> m_groups;
}
// namespace <anonymous>
namespace
{
intrusive_ptr
<
group
>
local_group
=
new
group
;
}
struct
{
intrusive_ptr
<
group
>
operator
/
(
const
std
::
string
&
group_name
)
intrusive_ptr
<
group
>
operator
/
(
const
std
::
string
&
/*group_name*/
)
{
return
m_groups
[
group_name
];
return
local_group
;
// return m_groups[group_name];
}
}
local
;
...
...
@@ -159,15 +168,29 @@ struct storage
};
template
<
typename
...
Args
>
void
send
(
std
::
list
<
actor
>&
actors
,
const
Args
&
...
args
)
{
for
(
auto
i
=
actors
.
begin
();
i
!=
actors
.
end
();
++
i
)
{
i
->
send
(
args
...);
}
}
void
foo_actor
()
{
auto
x
=
(
local
/
"foobar"
)
->
subscribe
(
this_actor
());
receive
(
on
<
int
,
int
,
int
>
()
>>
[]()
{
reply
(
23.
f
);
});
receive
(
on
<
int
>
()
>>
[](
int
i
)
{
reply
(
i
);
});
// auto x = (local/"foobar")->subscribe(this_actor());
auto
rules
=
(
on
<
int
,
int
,
int
>
()
>>
[]()
{
reply
(
23.
f
);
},
on
<
int
>
()
>>
[](
int
i
)
{
reply
(
i
);
}
);
receive
(
rules
);
receive
(
rules
);
// reply(1);
}
std
::
size_t
test__local_group
()
...
...
@@ -188,29 +211,32 @@ std::size_t test__local_group()
*/
auto
g
=
local
/
"foobar"
;
// auto g = local/"foobar";
std
::
list
<
actor
>
m_slaves
;
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
spawn
(
foo_actor
).
send
(
1
,
2
,
3
);
m_slaves
.
push_back
(
spawn
(
foo_actor
)
);
}
send
(
m_slaves
,
1
,
2
,
3
);
send
(
m_slaves
,
1
);
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
receive
(
on
<
float
>
()
>>
[]()
{
});
}
g
->
send
(
1
);
//
g->send(1);
int
result
=
0
;
auto
rule
=
on
<
int
>
()
>>
[
&
result
](
int
x
)
{
result
+=
x
;
};
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
receive
(
rule
);
receive
(
on
<
int
>
()
>>
[
&
result
](
int
x
)
{
result
+=
x
;
});
}
CPPA_CHECK_EQUAL
(
result
,
5
);
...
...
unit_testing/test__serialization.cpp
View file @
19af9398
...
...
@@ -195,7 +195,7 @@ struct obj_types : util::abstract_type_list
~
obj_types
()
{
delete
m_arr
;
delete
[]
m_arr
;
}
virtual
std
::
size_t
size
()
const
{
return
m_size
;
}
...
...
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