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
5d6bb51a
Commit
5d6bb51a
authored
Nov 24, 2019
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add overloads for binary serializer/deserializer
parent
6f341143
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
64 additions
and
9 deletions
+64
-9
libcaf_core/caf/tracing_data.hpp
libcaf_core/caf/tracing_data.hpp
+9
-0
libcaf_core/caf/tracing_data_factory.hpp
libcaf_core/caf/tracing_data_factory.hpp
+5
-0
libcaf_core/src/tracing_data.cpp
libcaf_core/src/tracing_data.cpp
+26
-3
libcaf_core/test/tracing_data.cpp
libcaf_core/test/tracing_data.cpp
+24
-6
No files found.
libcaf_core/caf/tracing_data.hpp
View file @
5d6bb51a
...
...
@@ -34,6 +34,9 @@ public:
/// Writes the content of this object to `sink`.
virtual
error
serialize
(
serializer
&
sink
)
const
=
0
;
/// @copydoc serialize
virtual
error_code
<
sec
>
serialize
(
binary_serializer
&
sink
)
const
=
0
;
};
/// @relates tracing_data
...
...
@@ -42,7 +45,13 @@ using tracing_data_ptr = std::unique_ptr<tracing_data>;
/// @relates tracing_data
error
inspect
(
serializer
&
sink
,
const
tracing_data_ptr
&
x
);
/// @relates tracing_data
error_code
<
sec
>
inspect
(
binary_serializer
&
sink
,
const
tracing_data_ptr
&
x
);
/// @relates tracing_data
error
inspect
(
deserializer
&
source
,
tracing_data_ptr
&
x
);
/// @relates tracing_data
error_code
<
sec
>
inspect
(
binary_deserializer
&
source
,
tracing_data_ptr
&
x
);
}
// namespace caf
libcaf_core/caf/tracing_data_factory.hpp
View file @
5d6bb51a
...
...
@@ -32,6 +32,11 @@ public:
/// @returns the result of `source`.
virtual
error
deserialize
(
deserializer
&
source
,
std
::
unique_ptr
<
tracing_data
>&
dst
)
const
=
0
;
/// @copydoc deserialize
virtual
error_code
<
sec
>
deserialize
(
binary_deserializer
&
source
,
std
::
unique_ptr
<
tracing_data
>&
dst
)
const
=
0
;
};
}
// namespace caf
libcaf_core/src/tracing_data.cpp
View file @
5d6bb51a
...
...
@@ -34,7 +34,10 @@ tracing_data::~tracing_data() {
// nop
}
error
inspect
(
serializer
&
sink
,
const
tracing_data_ptr
&
x
)
{
namespace
{
template
<
class
Serializer
>
auto
inspect_impl
(
Serializer
&
sink
,
const
tracing_data_ptr
&
x
)
{
if
(
x
==
nullptr
)
{
uint8_t
dummy
=
0
;
return
sink
(
dummy
);
...
...
@@ -45,13 +48,15 @@ error inspect(serializer& sink, const tracing_data_ptr& x) {
return
x
->
serialize
(
sink
);
}
error
inspect
(
deserializer
&
source
,
tracing_data_ptr
&
x
)
{
template
<
class
Deserializer
>
typename
Deserializer
::
result_type
inspect_impl
(
Deserializer
&
source
,
tracing_data_ptr
&
x
)
{
uint8_t
dummy
=
0
;
if
(
auto
err
=
source
(
dummy
))
return
err
;
if
(
dummy
==
0
)
{
x
.
reset
();
return
none
;
return
{}
;
}
auto
ctx
=
source
.
context
();
if
(
ctx
==
nullptr
)
...
...
@@ -62,4 +67,22 @@ error inspect(deserializer& source, tracing_data_ptr& x) {
return
tc
->
deserialize
(
source
,
x
);
}
}
// namespace
error
inspect
(
serializer
&
sink
,
const
tracing_data_ptr
&
x
)
{
return
inspect_impl
(
sink
,
x
);
}
error_code
<
sec
>
inspect
(
binary_serializer
&
sink
,
const
tracing_data_ptr
&
x
)
{
return
inspect_impl
(
sink
,
x
);
}
error
inspect
(
deserializer
&
source
,
tracing_data_ptr
&
x
)
{
return
inspect_impl
(
source
,
x
);
}
error_code
<
sec
>
inspect
(
binary_deserializer
&
source
,
tracing_data_ptr
&
x
)
{
return
inspect_impl
(
source
,
x
);
}
}
// namespace caf
libcaf_core/test/tracing_data.cpp
View file @
5d6bb51a
...
...
@@ -26,8 +26,8 @@
#include "caf/actor_profiler.hpp"
#include "caf/binary_deserializer.hpp"
#include "caf/binary_serializer.hpp"
#include "caf/config.hpp"
#include "caf/serializer_impl.hpp"
#include "caf/tracing_data_factory.hpp"
#ifdef CAF_ENABLE_ACTOR_PROFILER
...
...
@@ -49,17 +49,35 @@ public:
error
serialize
(
serializer
&
sink
)
const
override
{
return
sink
(
value
);
}
error_code
<
sec
>
serialize
(
binary_serializer
&
sink
)
const
override
{
return
sink
(
value
);
}
};
class
dummy_tracing_data_factory
:
public
tracing_data_factory
{
public:
error
deserialize
(
deserializer
&
source
,
std
::
unique_ptr
<
tracing_data
>&
dst
)
const
override
{
return
deserialize_impl
(
source
,
dst
);
}
error_code
<
sec
>
deserialize
(
binary_deserializer
&
source
,
std
::
unique_ptr
<
tracing_data
>&
dst
)
const
override
{
return
deserialize_impl
(
source
,
dst
);
}
private:
template
<
class
Deserializer
>
typename
Deserializer
::
result_type
deserialize_impl
(
Deserializer
&
source
,
std
::
unique_ptr
<
tracing_data
>&
dst
)
const
{
string
value
;
if
(
auto
err
=
source
(
value
))
return
err
;
dst
.
reset
(
new
dummy_tracing_data
(
std
::
move
(
value
)));
return
none
;
return
{}
;
}
};
...
...
@@ -174,14 +192,14 @@ CAF_TEST(profilers inject tracing data into asynchronous messages) {
}
CAF_TEST
(
tracing
data
is
serializable
)
{
std
::
vector
<
byte
>
buf
;
serializer_impl
<
std
::
vector
<
byte
>>
sink
{
sys
,
buf
};
byte_buffer
buf
;
binary_serializer
sink
{
sys
,
buf
};
tracing_data_ptr
data
;
tracing_data_ptr
copy
;
data
.
reset
(
new
dummy_tracing_data
(
"iTrace"
));
CAF_CHECK_EQUAL
(
inspect
(
sink
,
data
),
none
);
CAF_CHECK_EQUAL
(
sink
(
data
),
none
);
binary_deserializer
source
{
sys
,
buf
};
CAF_CHECK_EQUAL
(
inspect
(
source
,
copy
),
none
);
CAF_CHECK_EQUAL
(
source
(
copy
),
none
);
CAF_REQUIRE_NOT_EQUAL
(
copy
.
get
(),
nullptr
);
CAF_CHECK_EQUAL
(
dynamic_cast
<
dummy_tracing_data
&>
(
*
copy
).
value
,
"iTrace"
);
}
...
...
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