Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
actor-incubator
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
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-incubator
Commits
f742ac1c
Commit
f742ac1c
authored
Apr 17, 2019
by
Hauke Goldhammer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add the changes requested in the comments of the last commits
parent
4d9f8aca
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
34 additions
and
37 deletions
+34
-37
libcaf_bb/caf/bb/stream_reader.hpp
libcaf_bb/caf/bb/stream_reader.hpp
+15
-16
libcaf_bb/caf/policy/tokenized_integer_reader.hpp
libcaf_bb/caf/policy/tokenized_integer_reader.hpp
+6
-6
libcaf_bb/test/stream_reader.cpp
libcaf_bb/test/stream_reader.cpp
+8
-9
libcaf_bb/test/tokenized_integer_reader.cpp
libcaf_bb/test/tokenized_integer_reader.cpp
+5
-6
No files found.
libcaf_bb/caf/bb/stream_reader.hpp
View file @
f742ac1c
...
@@ -39,14 +39,14 @@ struct stream_reader_state {
...
@@ -39,14 +39,14 @@ struct stream_reader_state {
// nop
// nop
}
}
void
init
(
std
::
unique_ptr
<
InputStream
>
src_stream
)
{
void
init
(
std
::
unique_ptr
<
InputStream
>
input
)
{
stream
=
std
::
move
(
src_stream
);
this
->
input
=
std
::
move
(
input
);
}
}
// -- properties -------------------------------------------------------------
// -- properties -------------------------------------------------------------
size_t
at_end
()
const
{
size_t
at_end
()
const
{
return
!
(
*
stream
);
return
!
(
*
input
);
}
}
// -- member variables -------------------------------------------------------
// -- member variables -------------------------------------------------------
...
@@ -54,9 +54,9 @@ struct stream_reader_state {
...
@@ -54,9 +54,9 @@ struct stream_reader_state {
/// Gives this actor a useful name in CAF logs.
/// Gives this actor a useful name in CAF logs.
const
char
*
name
;
const
char
*
name
;
///
S
tream we are about to stream
///
Input s
tream we are about to stream
// TODO: change after having raised the minimum GCC version to 5.
// TODO: change after having raised the minimum GCC version to 5.
std
::
unique_ptr
<
InputStream
>
stream
;
std
::
unique_ptr
<
InputStream
>
input
;
/// Caches the line we are about to parse.
/// Caches the line we are about to parse.
std
::
string
line
;
std
::
string
line
;
...
@@ -69,25 +69,24 @@ using stream_source_type = stateful_actor<stream_reader_state<InputStream>>;
...
@@ -69,25 +69,24 @@ using stream_source_type = stateful_actor<stream_reader_state<InputStream>>;
/// Streams the content of given 'src_stream' line by line using the given
/// Streams the content of given 'src_stream' line by line using the given
/// policy to all given stream sinks.
/// policy to all given stream sinks.
template
<
class
Policy
,
class
InputStream
,
class
Handle
,
class
...
Handles
>
template
<
class
Policy
,
class
InputStream
,
class
Handle
,
class
...
Handles
>
behavior
stream_reader
(
stream_source_type
<
InputStream
>*
self
,
void
stream_reader
(
stream_source_type
<
InputStream
>*
self
,
std
::
unique_ptr
<
InputStream
>
src_stream
,
Handle
sink
,
std
::
unique_ptr
<
InputStream
>
input
,
Handle
sink
,
Handles
...
sinks
)
{
Handles
...
sinks
)
{
using
value_type
=
typename
Policy
::
value_type
;
using
value_type
=
typename
Policy
::
value_type
;
self
->
state
.
init
(
std
::
move
(
src_stream
));
self
->
state
.
init
(
std
::
move
(
input
));
// Fail early if we got nothing to stream.
// Fail early if we got nothing to stream.
if
(
self
->
state
.
at_end
())
if
(
self
->
state
.
at_end
())
return
{}
;
self
->
quit
()
;
// Spin up stream manager and connect the first sink.
// Spin up stream manager and connect the first sink.
auto
src
=
self
->
make_source
(
auto
src
=
self
->
make_source
(
std
::
move
(
sink
),
std
::
move
(
sink
),
[
&
](
unit_t
&
)
{
[
&
](
Policy
&
pol
)
{
// nop
// nop
},
},
[
self
](
unit_t
&
,
downstream
<
value_type
>&
out
,
size_t
hint
)
{
[
self
](
Policy
&
pol
,
downstream
<
value_type
>&
out
,
size_t
hint
)
{
auto
&
st
=
self
->
state
;
auto
&
st
=
self
->
state
;
Policy
pol
;
size_t
i
=
0
;
size_t
i
=
0
;
while
(
i
<
hint
&&
getline
(
*
(
st
.
stream
),
st
.
line
))
{
while
(
i
<
hint
&&
getline
(
*
(
st
.
input
),
st
.
line
))
{
if
(
auto
count
=
pol
(
st
.
line
,
out
))
{
if
(
auto
count
=
pol
(
st
.
line
,
out
))
{
i
+=
*
count
;
i
+=
*
count
;
}
else
{
}
else
{
...
@@ -95,10 +94,10 @@ behavior stream_reader(stream_source_type<InputStream>* self,
...
@@ -95,10 +94,10 @@ behavior stream_reader(stream_source_type<InputStream>* self,
}
}
}
}
},
},
[
self
](
const
unit_t
&
)
{
return
self
->
state
.
at_end
();
});
[
self
](
const
Policy
&
pol
)
{
return
self
->
state
.
at_end
();
});
// Add the remaining sinks.
// Add the remaining sinks.
unit
(
src
.
ptr
()
->
add_outbound_path
(
sinks
)...);
unit
(
src
.
ptr
()
->
add_outbound_path
(
sinks
)...);
return
{}
;
self
->
quit
()
;
}
}
}
// namespace bb
}
// namespace bb
...
...
libcaf_bb/caf/
bb
/tokenized_integer_reader.hpp
→
libcaf_bb/caf/
policy
/tokenized_integer_reader.hpp
View file @
f742ac1c
...
@@ -25,22 +25,22 @@
...
@@ -25,22 +25,22 @@
#include "caf/behavior.hpp"
#include "caf/behavior.hpp"
#include "caf/event_based_actor.hpp"
#include "caf/event_based_actor.hpp"
#include "caf/pec.hpp"
#include "caf/stateful_actor.hpp"
#include "caf/stateful_actor.hpp"
#include "caf/string_algorithms.hpp"
#include "caf/string_algorithms.hpp"
#include "caf/unit.hpp"
#include "caf/unit.hpp"
#include "caf/pec.hpp"
namespace
caf
{
namespace
caf
{
namespace
bb
{
namespace
policy
{
///
The Policy defines how the stream_reader pares a line of the given stream to
///
Parses whitespace-separated integers from input strings to 'ValueType' and
///
integers
.
///
pushes generated integers to a downstream
.
template
<
class
ValueType
=
int32_t
>
template
<
class
ValueType
=
int32_t
>
class
tokenized_integer_reader
{
class
tokenized_integer_reader
{
public:
public:
using
value_type
=
ValueType
;
using
value_type
=
ValueType
;
/// Returns
number of produced element
s or an error.
/// Returns
the number of parsed integer
s or an error.
expected
<
size_t
>
operator
()(
const
std
::
string
&
line
,
expected
<
size_t
>
operator
()(
const
std
::
string
&
line
,
downstream
<
value_type
>
out
)
{
downstream
<
value_type
>
out
)
{
size_t
count
=
0
;
size_t
count
=
0
;
...
@@ -72,5 +72,5 @@ public:
...
@@ -72,5 +72,5 @@ public:
}
}
};
};
}
// namespace
bb
}
// namespace
policy
}
// namespace caf
}
// namespace caf
libcaf_bb/test/stream_reader.cpp
View file @
f742ac1c
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
#define CAF_SUITE stream_reader
#define CAF_SUITE stream_reader
#include "caf/bb/stream_reader.hpp"
#include "caf/bb/stream_reader.hpp"
#include "caf/
bb
/tokenized_integer_reader.hpp"
#include "caf/
policy
/tokenized_integer_reader.hpp"
#include "caf/test/dsl.hpp"
#include "caf/test/dsl.hpp"
...
@@ -36,7 +36,7 @@ using namespace caf;
...
@@ -36,7 +36,7 @@ using namespace caf;
namespace
{
namespace
{
using
stream_type
=
std
::
istringstream
;
using
stream_type
=
std
::
istringstream
;
using
value_type
=
bb
::
tokenized_integer_reader
<>::
value_type
;
using
value_type
=
policy
::
tokenized_integer_reader
<>::
value_type
;
TESTEE_SETUP
();
TESTEE_SETUP
();
...
@@ -53,7 +53,7 @@ TESTEE(stream_reader_sink) {
...
@@ -53,7 +53,7 @@ TESTEE(stream_reader_sink) {
[
=
](
unit_t
&
)
{
[
=
](
unit_t
&
)
{
// nop
// nop
},
},
//
Consumer
//
consume values
[
=
](
unit_t
&
,
value_type
val
)
{
[
=
](
unit_t
&
,
value_type
val
)
{
self
->
state
.
vec
.
emplace_back
(
std
::
move
(
val
));
self
->
state
.
vec
.
emplace_back
(
std
::
move
(
val
));
},
},
...
@@ -76,8 +76,7 @@ TESTEE(stream_monitor) {
...
@@ -76,8 +76,7 @@ TESTEE(stream_monitor) {
self
->
set_down_handler
([
=
](
const
down_msg
&
dm
)
{
self
->
set_down_handler
([
=
](
const
down_msg
&
dm
)
{
CAF_CHECK_EQUAL
(
dm
.
source
,
self
->
state
.
streamer
);
CAF_CHECK_EQUAL
(
dm
.
source
,
self
->
state
.
streamer
);
if
(
dm
.
reason
)
if
(
dm
.
reason
)
CAF_CHECK_EQUAL
(
dm
.
reason
,
CAF_CHECK_EQUAL
(
dm
.
reason
,
pec
::
unexpected_character
);
pec
::
unexpected_character
);
});
});
return
{[
=
](
join_atom
,
actor
streamer
)
{
return
{[
=
](
join_atom
,
actor
streamer
)
{
...
@@ -88,7 +87,7 @@ TESTEE(stream_monitor) {
...
@@ -88,7 +87,7 @@ TESTEE(stream_monitor) {
struct
config
:
actor_system_config
{
struct
config
:
actor_system_config
{
config
()
{
config
()
{
add_message_type
<
value_type
>
(
"value_type"
);
// nop
}
}
};
};
...
@@ -107,7 +106,7 @@ CAF_TEST(stream_to_sink) {
...
@@ -107,7 +106,7 @@ CAF_TEST(stream_to_sink) {
1254
,
1
,
20
,
4
,
56
,
78
,
95
};
1254
,
1
,
20
,
4
,
56
,
78
,
95
};
auto
sink
=
sys
.
spawn
(
stream_reader_sink
);
auto
sink
=
sys
.
spawn
(
stream_reader_sink
);
auto
src
auto
src
=
sys
.
spawn
(
bb
::
stream_reader
<
bb
::
tokenized_integer_reader
<
value_type
>
,
=
sys
.
spawn
(
bb
::
stream_reader
<
policy
::
tokenized_integer_reader
<
value_type
>
,
stream_type
,
actor
>
,
stream_type
,
actor
>
,
std
::
move
(
ptr_test_stream
),
sink
);
std
::
move
(
ptr_test_stream
),
sink
);
auto
mon
=
sys
.
spawn
(
stream_monitor
);
auto
mon
=
sys
.
spawn
(
stream_monitor
);
...
@@ -128,7 +127,7 @@ CAF_TEST(stream_to_sinks) {
...
@@ -128,7 +127,7 @@ CAF_TEST(stream_to_sinks) {
auto
snk2
=
sys
.
spawn
(
stream_reader_sink
);
auto
snk2
=
sys
.
spawn
(
stream_reader_sink
);
auto
snk3
=
sys
.
spawn
(
stream_reader_sink
);
auto
snk3
=
sys
.
spawn
(
stream_reader_sink
);
auto
src
auto
src
=
sys
.
spawn
(
bb
::
stream_reader
<
bb
::
tokenized_integer_reader
<
value_type
>
,
=
sys
.
spawn
(
bb
::
stream_reader
<
policy
::
tokenized_integer_reader
<
value_type
>
,
stream_type
,
actor
,
actor
,
actor
>
,
stream_type
,
actor
,
actor
,
actor
>
,
std
::
move
(
ptr_test_stream
),
snk1
,
snk2
,
snk3
);
std
::
move
(
ptr_test_stream
),
snk1
,
snk2
,
snk3
);
auto
mon
=
sys
.
spawn
(
stream_monitor
);
auto
mon
=
sys
.
spawn
(
stream_monitor
);
...
@@ -149,7 +148,7 @@ CAF_TEST(error_stream_to_sink) {
...
@@ -149,7 +148,7 @@ CAF_TEST(error_stream_to_sink) {
new
stream_type
(
test_stringvalues
)};
new
stream_type
(
test_stringvalues
)};
auto
sink
=
sys
.
spawn
(
stream_reader_sink
);
auto
sink
=
sys
.
spawn
(
stream_reader_sink
);
auto
src
auto
src
=
sys
.
spawn
(
bb
::
stream_reader
<
bb
::
tokenized_integer_reader
<
value_type
>
,
=
sys
.
spawn
(
bb
::
stream_reader
<
policy
::
tokenized_integer_reader
<
value_type
>
,
stream_type
,
actor
>
,
stream_type
,
actor
>
,
std
::
move
(
ptr_test_stream
),
sink
);
std
::
move
(
ptr_test_stream
),
sink
);
auto
mon
=
sys
.
spawn
(
stream_monitor
);
auto
mon
=
sys
.
spawn
(
stream_monitor
);
...
...
libcaf_bb/test/tokenized_integer_reader.cpp
View file @
f742ac1c
...
@@ -18,7 +18,7 @@
...
@@ -18,7 +18,7 @@
#define CAF_SUITE tokenized_integer_reader
#define CAF_SUITE tokenized_integer_reader
#include "caf/
bb
/tokenized_integer_reader.hpp"
#include "caf/
policy
/tokenized_integer_reader.hpp"
#include "caf/test/dsl.hpp"
#include "caf/test/dsl.hpp"
...
@@ -29,7 +29,7 @@ using namespace caf;
...
@@ -29,7 +29,7 @@ using namespace caf;
namespace
{
namespace
{
using
value_type
=
bb
::
tokenized_integer_reader
<>::
value_type
;
using
value_type
=
policy
::
tokenized_integer_reader
<>::
value_type
;
struct
fixture
{};
struct
fixture
{};
...
@@ -38,7 +38,7 @@ struct fixture {};
...
@@ -38,7 +38,7 @@ struct fixture {};
CAF_TEST_FIXTURE_SCOPE
(
tokenized_integer_reader_tests
,
fixture
)
CAF_TEST_FIXTURE_SCOPE
(
tokenized_integer_reader_tests
,
fixture
)
CAF_TEST
(
int_policy
)
{
CAF_TEST
(
int_policy
)
{
bb
::
tokenized_integer_reader
<
value_type
>
pol
;
policy
::
tokenized_integer_reader
<
value_type
>
pol
;
std
::
deque
<
value_type
>
q
;
std
::
deque
<
value_type
>
q
;
std
::
deque
<
value_type
>
test
{
1
,
2
,
3
,
4
};
std
::
deque
<
value_type
>
test
{
1
,
2
,
3
,
4
};
downstream
<
value_type
>
out
(
q
);
downstream
<
value_type
>
out
(
q
);
...
@@ -48,13 +48,12 @@ CAF_TEST(int_policy) {
...
@@ -48,13 +48,12 @@ CAF_TEST(int_policy) {
}
}
CAF_TEST
(
error_int_policy
)
{
CAF_TEST
(
error_int_policy
)
{
bb
::
tokenized_integer_reader
<
value_type
>
pol
;
policy
::
tokenized_integer_reader
<
value_type
>
pol
;
std
::
deque
<
value_type
>
q
;
std
::
deque
<
value_type
>
q
;
downstream
<
value_type
>
out
(
q
);
downstream
<
value_type
>
out
(
q
);
std
::
string
test_line
=
"1 r 3 4"
;
std
::
string
test_line
=
"1 r 3 4"
;
auto
count
=
pol
(
test_line
,
out
);
auto
count
=
pol
(
test_line
,
out
);
CAF_CHECK_EQUAL
(
count
.
error
(),
CAF_CHECK_EQUAL
(
count
.
error
(),
pec
::
unexpected_character
);
pec
::
unexpected_character
);
std
::
string
test_line2
=
"1 -2247483648 3 4"
;
std
::
string
test_line2
=
"1 -2247483648 3 4"
;
count
=
pol
(
test_line2
,
out
);
count
=
pol
(
test_line2
,
out
);
CAF_CHECK_EQUAL
(
count
.
error
(),
pec
::
exponent_underflow
);
CAF_CHECK_EQUAL
(
count
.
error
(),
pec
::
exponent_underflow
);
...
...
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