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
00f1e528
Commit
00f1e528
authored
Sep 05, 2011
by
neverlord
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
any_tuple::tail
parent
ffd73d2a
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
133 additions
and
9 deletions
+133
-9
Makefile.am
Makefile.am
+1
-0
cppa.files
cppa.files
+1
-0
cppa/any_tuple.hpp
cppa/any_tuple.hpp
+4
-0
cppa/detail/abstract_tuple.hpp
cppa/detail/abstract_tuple.hpp
+2
-1
cppa/detail/tuple_vals.hpp
cppa/detail/tuple_vals.hpp
+9
-8
src/abstract_tuple.cpp
src/abstract_tuple.cpp
+21
-0
src/any_tuple.cpp
src/any_tuple.cpp
+81
-0
unit_testing/test__tuple.cpp
unit_testing/test__tuple.cpp
+14
-0
No files found.
Makefile.am
View file @
00f1e528
...
@@ -3,6 +3,7 @@ ACLOCAL_AMFLAGS = -I m4
...
@@ -3,6 +3,7 @@ ACLOCAL_AMFLAGS = -I m4
lib_LTLIBRARIES
=
libcppa.la
lib_LTLIBRARIES
=
libcppa.la
libcppa_la_SOURCES
=
\
libcppa_la_SOURCES
=
\
src/abstract_tuple.cpp
\
src/abstract_type_list.cpp
\
src/abstract_type_list.cpp
\
src/actor_behavior.cpp
\
src/actor_behavior.cpp
\
src/actor_count.cpp
\
src/actor_count.cpp
\
...
...
cppa.files
View file @
00f1e528
...
@@ -211,3 +211,4 @@ cppa/detail/unboxed.hpp
...
@@ -211,3 +211,4 @@ cppa/detail/unboxed.hpp
cppa/detail/matcher_arguments.hpp
cppa/detail/matcher_arguments.hpp
src/matcher_arguments.cpp
src/matcher_arguments.cpp
src/invoke_rules.cpp
src/invoke_rules.cpp
src/abstract_tuple.cpp
cppa/any_tuple.hpp
View file @
00f1e528
...
@@ -18,6 +18,8 @@ class any_tuple
...
@@ -18,6 +18,8 @@ class any_tuple
cow_ptr
<
detail
::
abstract_tuple
>
m_vals
;
cow_ptr
<
detail
::
abstract_tuple
>
m_vals
;
explicit
any_tuple
(
const
cow_ptr
<
detail
::
abstract_tuple
>&
vals
);
public:
public:
//typedef cow_ptr<detail::abstract_tuple> vals_ptr;
//typedef cow_ptr<detail::abstract_tuple> vals_ptr;
...
@@ -54,6 +56,8 @@ class any_tuple
...
@@ -54,6 +56,8 @@ class any_tuple
bool
equal_to
(
const
any_tuple
&
other
)
const
;
bool
equal_to
(
const
any_tuple
&
other
)
const
;
any_tuple
tail
()
const
;
};
};
inline
bool
operator
==
(
const
any_tuple
&
lhs
,
const
any_tuple
&
rhs
)
inline
bool
operator
==
(
const
any_tuple
&
lhs
,
const
any_tuple
&
rhs
)
...
...
cppa/detail/abstract_tuple.hpp
View file @
00f1e528
...
@@ -19,9 +19,10 @@ struct abstract_tuple : ref_counted
...
@@ -19,9 +19,10 @@ struct abstract_tuple : ref_counted
virtual
abstract_tuple
*
copy
()
const
=
0
;
virtual
abstract_tuple
*
copy
()
const
=
0
;
virtual
const
void
*
at
(
size_t
pos
)
const
=
0
;
virtual
const
void
*
at
(
size_t
pos
)
const
=
0
;
virtual
const
util
::
abstract_type_list
&
types
()
const
=
0
;
virtual
const
util
::
abstract_type_list
&
types
()
const
=
0
;
virtual
bool
equal_to
(
const
abstract_tuple
&
other
)
const
=
0
;
virtual
const
uniform_type_info
&
utype_info_at
(
size_t
pos
)
const
=
0
;
virtual
const
uniform_type_info
&
utype_info_at
(
size_t
pos
)
const
=
0
;
virtual
bool
equal_to
(
const
abstract_tuple
&
other
)
const
;
};
};
}
}
// namespace cppa::detail
}
}
// namespace cppa::detail
...
...
cppa/detail/tuple_vals.hpp
View file @
00f1e528
...
@@ -49,44 +49,45 @@ class tuple_vals : public abstract_tuple
...
@@ -49,44 +49,45 @@ class tuple_vals : public abstract_tuple
inline
data_type
&
data_ref
()
{
return
m_data
;
}
inline
data_type
&
data_ref
()
{
return
m_data
;
}
v
irtual
v
oid
*
mutable_at
(
size_t
pos
)
void
*
mutable_at
(
size_t
pos
)
{
{
return
tdata_mutable_at
(
m_data
,
pos
);
return
tdata_mutable_at
(
m_data
,
pos
);
}
}
virtual
size_t
size
()
const
size_t
size
()
const
{
{
return
sizeof
...(
ElementTypes
);
return
sizeof
...(
ElementTypes
);
}
}
virtual
tuple_vals
*
copy
()
const
tuple_vals
*
copy
()
const
{
{
return
new
tuple_vals
(
*
this
);
return
new
tuple_vals
(
*
this
);
}
}
virtual
const
void
*
at
(
size_t
pos
)
const
const
void
*
at
(
size_t
pos
)
const
{
{
return
tdata_at
(
m_data
,
pos
);
return
tdata_at
(
m_data
,
pos
);
}
}
virtual
const
uniform_type_info
&
utype_info_at
(
size_t
pos
)
const
const
uniform_type_info
&
utype_info_at
(
size_t
pos
)
const
{
{
return
m_types
.
at
(
pos
);
return
m_types
.
at
(
pos
);
}
}
virtual
const
util
::
abstract_type_list
&
types
()
const
const
util
::
abstract_type_list
&
types
()
const
{
{
return
m_types
;
return
m_types
;
}
}
virtual
bool
equal_to
(
const
abstract_tuple
&
other
)
const
bool
equal_to
(
const
abstract_tuple
&
other
)
const
{
{
if
(
size
()
!=
other
.
size
())
return
false
;
const
tuple_vals
*
o
=
dynamic_cast
<
const
tuple_vals
*>
(
&
other
);
const
tuple_vals
*
o
=
dynamic_cast
<
const
tuple_vals
*>
(
&
other
);
if
(
o
)
if
(
o
)
{
{
return
m_data
==
(
o
->
m_data
);
return
m_data
==
(
o
->
m_data
);
}
}
return
false
;
return
abstract_tuple
::
equal_to
(
other
)
;
}
}
};
};
...
...
src/abstract_tuple.cpp
0 → 100644
View file @
00f1e528
#include "cppa/detail/abstract_tuple.hpp"
namespace
cppa
{
namespace
detail
{
bool
abstract_tuple
::
equal_to
(
const
abstract_tuple
&
other
)
const
{
if
(
this
==
&
other
)
return
true
;
if
(
size
()
!=
other
.
size
())
return
false
;
for
(
size_t
i
=
0
;
i
<
size
();
++
i
)
{
const
cppa
::
uniform_type_info
&
uti
=
utype_info_at
(
i
);
if
(
uti
!=
other
.
utype_info_at
(
i
))
return
false
;
auto
lhs
=
at
(
i
);
auto
rhs
=
other
.
at
(
i
);
// compare first addresses, then values
if
(
lhs
!=
rhs
&&
!
(
uti
.
equal
(
lhs
,
rhs
)))
return
false
;
}
return
true
;
}
}
}
// namespace cppa::detail
src/any_tuple.cpp
View file @
00f1e528
...
@@ -70,6 +70,77 @@ const cppa::cow_ptr<cppa::detail::abstract_tuple>& s_empty_tuple()
...
@@ -70,6 +70,77 @@ const cppa::cow_ptr<cppa::detail::abstract_tuple>& s_empty_tuple()
return
ptr
;
return
ptr
;
}
}
struct
offset_type_list
:
cppa
::
util
::
abstract_type_list
{
const_iterator
begin
()
const
{
return
m_begin
;
}
offset_type_list
(
const
cppa
::
util
::
abstract_type_list
&
decorated
)
{
auto
i
=
decorated
.
begin
();
if
(
i
!=
decorated
.
end
())
{
++
i
;
}
m_begin
=
i
;
}
private:
cppa
::
util
::
abstract_type_list
::
const_iterator
m_begin
;
};
struct
offset_decorator
:
cppa
::
detail
::
abstract_tuple
{
typedef
cppa
::
cow_ptr
<
cppa
::
detail
::
abstract_tuple
>
ptr_type
;
offset_decorator
(
const
ptr_type
&
decorated
)
:
m_decorated
(
decorated
),
m_type_list
(
decorated
->
types
())
{
}
void
*
mutable_at
(
size_t
pos
)
{
return
m_decorated
->
mutable_at
(
pos
+
1
);
}
size_t
size
()
const
{
return
m_decorated
->
size
()
-
1
;
}
abstract_tuple
*
copy
()
const
{
return
new
offset_decorator
(
m_decorated
);
}
const
void
*
at
(
size_t
pos
)
const
{
return
m_decorated
->
at
(
pos
+
1
);
}
const
cppa
::
util
::
abstract_type_list
&
types
()
const
{
return
m_type_list
;
}
const
cppa
::
uniform_type_info
&
utype_info_at
(
size_t
pos
)
const
{
return
m_decorated
->
utype_info_at
(
pos
+
1
);
}
private:
ptr_type
m_decorated
;
offset_type_list
m_type_list
;
};
}
// namespace <anonymous>
}
// namespace <anonymous>
namespace
cppa
{
namespace
cppa
{
...
@@ -87,12 +158,22 @@ any_tuple::any_tuple(any_tuple&& other) : m_vals(s_empty_tuple())
...
@@ -87,12 +158,22 @@ any_tuple::any_tuple(any_tuple&& other) : m_vals(s_empty_tuple())
m_vals
.
swap
(
other
.
m_vals
);
m_vals
.
swap
(
other
.
m_vals
);
}
}
any_tuple
::
any_tuple
(
const
cow_ptr
<
detail
::
abstract_tuple
>&
vals
)
:
m_vals
(
vals
)
{
}
any_tuple
&
any_tuple
::
operator
=
(
any_tuple
&&
other
)
any_tuple
&
any_tuple
::
operator
=
(
any_tuple
&&
other
)
{
{
m_vals
.
swap
(
other
.
m_vals
);
m_vals
.
swap
(
other
.
m_vals
);
return
*
this
;
return
*
this
;
}
}
any_tuple
any_tuple
::
tail
()
const
{
if
(
size
()
<=
1
)
return
any_tuple
(
s_empty_tuple
());
return
any_tuple
(
new
offset_decorator
(
m_vals
));
}
size_t
any_tuple
::
size
()
const
size_t
any_tuple
::
size
()
const
{
{
return
m_vals
->
size
();
return
m_vals
->
size
();
...
...
unit_testing/test__tuple.cpp
View file @
00f1e528
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
#include "cppa/invoke.hpp"
#include "cppa/invoke.hpp"
#include "cppa/get_view.hpp"
#include "cppa/get_view.hpp"
#include "cppa/any_tuple.hpp"
#include "cppa/any_tuple.hpp"
#include "cppa/to_string.hpp"
#include "cppa/tuple_view.hpp"
#include "cppa/tuple_view.hpp"
#include "cppa/invoke_rules.hpp"
#include "cppa/invoke_rules.hpp"
#include "cppa/intrusive_ptr.hpp"
#include "cppa/intrusive_ptr.hpp"
...
@@ -235,6 +236,19 @@ size_t test__tuple()
...
@@ -235,6 +236,19 @@ size_t test__tuple()
CPPA_CHECK
(
get
<
3
>
(
t1_copy
)
==
get
<
3
>
(
t1
));
CPPA_CHECK
(
get
<
3
>
(
t1_copy
)
==
get
<
3
>
(
t1
));
CPPA_CHECK
(
t1
==
t4
);
CPPA_CHECK
(
t1
==
t4
);
// test any_tuple::tail
any_tuple
at1
=
make_tuple
(
1
,
2
,
3
,
4.0
,
"5"
);
any_tuple
at2
=
make_tuple
(
2
,
3
,
4.0
,
"5"
);
any_tuple
at1_tail
=
at1
.
tail
();
CPPA_CHECK_EQUAL
(
at1
.
size
(),
(
at1_tail
.
size
()
+
1
));
CPPA_CHECK_EQUAL
(
at1_tail
.
size
(),
at2
.
size
());
CPPA_CHECK_EQUAL
(
at1_tail
.
utype_info_at
(
0
),
at2
.
utype_info_at
(
0
));
CPPA_CHECK
((
at2
.
utype_info_at
(
0
).
equal
(
at1_tail
.
at
(
0
),
at2
.
at
(
0
))));
CPPA_CHECK_EQUAL
(
at2
,
at1_tail
);
CPPA_CHECK_EQUAL
(
at1_tail
,
at2
);
return
CPPA_TEST_RESULT
;
return
CPPA_TEST_RESULT
;
}
}
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