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
27959b35
Commit
27959b35
authored
Aug 16, 2018
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Support function pointers in deep_to_string
parent
0858179b
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
41 additions
and
19 deletions
+41
-19
libcaf_core/caf/detail/stringification_inspector.hpp
libcaf_core/caf/detail/stringification_inspector.hpp
+27
-19
libcaf_core/test/deep_to_string.cpp
libcaf_core/test/deep_to_string.cpp
+14
-0
No files found.
libcaf_core/caf/detail/stringification_inspector.hpp
View file @
27959b35
...
@@ -19,7 +19,6 @@
...
@@ -19,7 +19,6 @@
#pragma once
#pragma once
#include <chrono>
#include <chrono>
#include <functional>
#include <string>
#include <string>
#include <type_traits>
#include <type_traits>
#include <vector>
#include <vector>
...
@@ -64,7 +63,7 @@ public:
...
@@ -64,7 +63,7 @@ public:
template
<
class
...
Ts
>
template
<
class
...
Ts
>
void
operator
()(
Ts
&&
...
xs
)
{
void
operator
()(
Ts
&&
...
xs
)
{
traverse
(
std
::
forward
<
Ts
>
(
xs
)
...);
traverse
(
xs
...);
}
}
/// Prints a separator to the result string.
/// Prints a separator to the result string.
...
@@ -201,9 +200,8 @@ public:
...
@@ -201,9 +200,8 @@ public:
}
}
template
<
class
T
>
template
<
class
T
>
enable_if_t
<
std
::
is_pointer
<
T
>::
value
enable_if_t
<!
std
::
is_same
<
decay_t
<
T
>
,
void
>::
value
>
&&
!
std
::
is_same
<
decay_t
<
T
>
,
void
>::
value
>
consume
(
T
*&
ptr
)
{
consume
(
T
ptr
)
{
if
(
ptr
)
{
if
(
ptr
)
{
result_
+=
'*'
;
result_
+=
'*'
;
consume
(
*
ptr
);
consume
(
*
ptr
);
...
@@ -275,55 +273,65 @@ public:
...
@@ -275,55 +273,65 @@ public:
}
}
template
<
class
T
,
class
...
Ts
>
template
<
class
T
,
class
...
Ts
>
void
traverse
(
meta
::
hex_formatted_t
,
T
&
x
,
Ts
&
&
...
xs
)
{
void
traverse
(
const
meta
::
hex_formatted_t
&
,
const
T
&
x
,
const
Ts
&
...
xs
)
{
sep
();
sep
();
append_hex
(
result_
,
reinterpret_cast
<
uint8_t
*>
(
deconst
(
x
).
data
()),
append_hex
(
result_
,
reinterpret_cast
<
uint8_t
*>
(
deconst
(
x
).
data
()),
x
.
size
());
x
.
size
());
traverse
(
std
::
forward
<
Ts
>
(
xs
)
...);
traverse
(
xs
...);
}
}
template
<
class
T
,
class
...
Ts
>
template
<
class
T
,
class
...
Ts
>
void
traverse
(
meta
::
omittable_if_none_t
,
T
&
x
,
Ts
&
&
...
xs
)
{
void
traverse
(
const
meta
::
omittable_if_none_t
&
,
const
T
&
x
,
const
Ts
&
...
xs
)
{
if
(
x
!=
none
)
{
if
(
x
!=
none
)
{
sep
();
sep
();
consume
(
x
);
consume
(
x
);
}
}
traverse
(
std
::
forward
<
Ts
>
(
xs
)
...);
traverse
(
xs
...);
}
}
template
<
class
T
,
class
...
Ts
>
template
<
class
T
,
class
...
Ts
>
void
traverse
(
meta
::
omittable_if_empty_t
,
T
&
x
,
Ts
&&
...
xs
)
{
void
traverse
(
const
meta
::
omittable_if_empty_t
&
,
const
T
&
x
,
const
Ts
&
...
xs
)
{
if
(
!
x
.
empty
())
{
if
(
!
x
.
empty
())
{
sep
();
sep
();
consume
(
x
);
consume
(
x
);
}
}
traverse
(
std
::
forward
<
Ts
>
(
xs
)
...);
traverse
(
xs
...);
}
}
template
<
class
T
,
class
...
Ts
>
template
<
class
T
,
class
...
Ts
>
void
traverse
(
meta
::
omittable_t
,
T
&
,
Ts
&
&
...
xs
)
{
void
traverse
(
const
meta
::
omittable_t
&
,
const
T
&
,
const
Ts
&
...
xs
)
{
traverse
(
std
::
forward
<
Ts
>
(
xs
)
...);
traverse
(
xs
...);
}
}
template
<
class
...
Ts
>
template
<
class
...
Ts
>
void
traverse
(
meta
::
type_name_t
x
,
Ts
&
&
...
xs
)
{
void
traverse
(
const
meta
::
type_name_t
&
x
,
const
Ts
&
...
xs
)
{
sep
();
sep
();
result_
+=
x
.
value
;
result_
+=
x
.
value
;
result_
+=
'('
;
result_
+=
'('
;
traverse
(
std
::
forward
<
Ts
>
(
xs
)
...);
traverse
(
xs
...);
result_
+=
')'
;
result_
+=
')'
;
}
}
template
<
class
...
Ts
>
template
<
class
...
Ts
>
void
traverse
(
const
meta
::
annotation
&
,
Ts
&
&
...
xs
)
{
void
traverse
(
const
meta
::
annotation
&
,
const
Ts
&
...
xs
)
{
traverse
(
std
::
forward
<
Ts
>
(
xs
)
...);
traverse
(
xs
...);
}
}
template
<
class
T
,
class
...
Ts
>
template
<
class
T
,
class
...
Ts
>
enable_if_t
<!
meta
::
is_annotation
<
T
>::
value
>
traverse
(
T
&&
x
,
Ts
&&
...
xs
)
{
enable_if_t
<!
meta
::
is_annotation
<
T
>::
value
&&
!
is_callable
<
T
>::
value
>
traverse
(
const
T
&
x
,
const
Ts
&
...
xs
)
{
sep
();
sep
();
consume
(
deconst
(
x
));
consume
(
deconst
(
x
));
traverse
(
std
::
forward
<
Ts
>
(
xs
)...);
traverse
(
xs
...);
}
template
<
class
T
,
class
...
Ts
>
enable_if_t
<!
meta
::
is_annotation
<
T
>::
value
&&
is_callable
<
T
>::
value
>
traverse
(
const
T
&
,
const
Ts
&
...
xs
)
{
sep
();
result_
+=
"<fun>"
;
traverse
(
xs
...);
}
}
private:
private:
...
...
libcaf_core/test/deep_to_string.cpp
View file @
27959b35
...
@@ -24,6 +24,14 @@
...
@@ -24,6 +24,14 @@
using
namespace
caf
;
using
namespace
caf
;
namespace
{
void
foobar
()
{
// nop
}
}
// namespace <anonymous>
CAF_TEST
(
timespans
)
{
CAF_TEST
(
timespans
)
{
CAF_CHECK_EQUAL
(
deep_to_string
(
timespan
{
1
}),
"1ns"
);
CAF_CHECK_EQUAL
(
deep_to_string
(
timespan
{
1
}),
"1ns"
);
CAF_CHECK_EQUAL
(
deep_to_string
(
timespan
{
1000
}),
"1us"
);
CAF_CHECK_EQUAL
(
deep_to_string
(
timespan
{
1000
}),
"1us"
);
...
@@ -31,3 +39,9 @@ CAF_TEST(timespans) {
...
@@ -31,3 +39,9 @@ CAF_TEST(timespans) {
CAF_CHECK_EQUAL
(
deep_to_string
(
timespan
{
1000000000
}),
"1s"
);
CAF_CHECK_EQUAL
(
deep_to_string
(
timespan
{
1000000000
}),
"1s"
);
CAF_CHECK_EQUAL
(
deep_to_string
(
timespan
{
60000000000
}),
"1min"
);
CAF_CHECK_EQUAL
(
deep_to_string
(
timespan
{
60000000000
}),
"1min"
);
}
}
CAF_TEST
(
pointers
)
{
auto
i
=
42
;
CAF_CHECK_EQUAL
(
deep_to_string
(
&
i
),
"*42"
);
CAF_CHECK_EQUAL
(
deep_to_string
(
foobar
),
"<fun>"
);
}
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