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
47f19c7a
Commit
47f19c7a
authored
Feb 20, 2015
by
Marian Triebe
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Prevent nested message views
Closes #233
parent
17a0506b
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
29 additions
and
29 deletions
+29
-29
libcaf_core/caf/detail/decorated_tuple.hpp
libcaf_core/caf/detail/decorated_tuple.hpp
+9
-12
libcaf_core/src/decorated_tuple.cpp
libcaf_core/src/decorated_tuple.cpp
+16
-16
libcaf_core/src/message.cpp
libcaf_core/src/message.cpp
+4
-1
No files found.
libcaf_core/caf/detail/decorated_tuple.hpp
View file @
47f19c7a
...
...
@@ -48,14 +48,7 @@ class decorated_tuple : public message_data {
using
pointer
=
message_data
::
ptr
;
// creates a typed subtuple from `d` with mapping `v`
static
inline
pointer
create
(
pointer
d
,
vector_type
v
)
{
return
pointer
{
new
decorated_tuple
(
std
::
move
(
d
),
std
::
move
(
v
))};
}
// creates a typed subtuple from `d` with an offset
static
inline
pointer
create
(
pointer
d
,
size_t
offset
)
{
return
pointer
{
new
decorated_tuple
(
std
::
move
(
d
),
offset
)};
}
static
pointer
create
(
pointer
d
,
vector_type
v
);
void
*
mutable_at
(
size_t
pos
)
override
;
...
...
@@ -74,6 +67,14 @@ class decorated_tuple : public message_data {
uint16_t
type_nr_at
(
size_t
pos
)
const
override
;
const
pointer
&
decorated
()
const
{
return
m_decorated
;
}
const
vector_type
&
mapping
()
const
{
return
m_mapping
;
}
private:
pointer
m_decorated
;
...
...
@@ -82,10 +83,6 @@ class decorated_tuple : public message_data {
void
init
();
void
init
(
size_t
);
decorated_tuple
(
pointer
,
size_t
);
decorated_tuple
(
pointer
,
vector_type
&&
);
decorated_tuple
(
const
decorated_tuple
&
)
=
default
;
...
...
libcaf_core/src/decorated_tuple.cpp
View file @
47f19c7a
...
...
@@ -22,6 +22,22 @@
namespace
caf
{
namespace
detail
{
using
vector_type
=
std
::
vector
<
size_t
>
;
using
pointer
=
message_data
::
ptr
;
pointer
decorated_tuple
::
create
(
pointer
d
,
vector_type
v
)
{
auto
ptr
=
dynamic_cast
<
const
decorated_tuple
*>
(
d
.
get
());
if
(
ptr
)
{
d
=
ptr
->
decorated
();
auto
&
pmap
=
ptr
->
mapping
();
for
(
size_t
i
=
0
;
i
<
v
.
size
();
++
i
)
{
v
[
i
]
=
pmap
[
v
[
i
]];
}
}
return
pointer
{
new
decorated_tuple
(
std
::
move
(
d
),
std
::
move
(
v
))};
}
void
*
decorated_tuple
::
mutable_at
(
size_t
pos
)
{
CAF_REQUIRE
(
pos
<
size
());
return
m_decorated
->
mutable_at
(
m_mapping
[
pos
]);
...
...
@@ -68,16 +84,6 @@ void decorated_tuple::init() {
}
}
void
decorated_tuple
::
init
(
size_t
offset
)
{
if
(
offset
<
m_decorated
->
size
())
{
size_t
i
=
offset
;
size_t
new_size
=
m_decorated
->
size
()
-
offset
;
m_mapping
.
resize
(
new_size
);
std
::
generate
(
m_mapping
.
begin
(),
m_mapping
.
end
(),
[
&
]
{
return
i
++
;
});
}
init
();
}
decorated_tuple
::
decorated_tuple
(
pointer
d
,
vector_type
&&
v
)
:
m_decorated
(
std
::
move
(
d
)),
m_mapping
(
std
::
move
(
v
)),
...
...
@@ -85,11 +91,5 @@ decorated_tuple::decorated_tuple(pointer d, vector_type&& v)
init
();
}
decorated_tuple
::
decorated_tuple
(
pointer
d
,
size_t
offset
)
:
m_decorated
(
std
::
move
(
d
)),
m_type_token
(
0xFFFFFFFF
)
{
init
(
offset
);
}
}
// namespace detail
}
// namespace caf
libcaf_core/src/message.cpp
View file @
47f19c7a
...
...
@@ -86,7 +86,10 @@ message message::drop(size_t n) const {
if
(
n
>=
size
())
{
return
message
{};
}
return
message
{
detail
::
decorated_tuple
::
create
(
m_vals
,
n
)};
std
::
vector
<
size_t
>
mapping
(
size
()
-
n
);
size_t
i
=
n
;
std
::
generate
(
mapping
.
begin
(),
mapping
.
end
(),
[
&
]
{
return
i
++
;
});
return
message
{
detail
::
decorated_tuple
::
create
(
m_vals
,
mapping
)};
}
message
message
::
drop_right
(
size_t
n
)
const
{
...
...
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