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
47a6fd15
Commit
47a6fd15
authored
Feb 16, 2015
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improve documentation of `message_builder`
parent
086d5127
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
55 additions
and
30 deletions
+55
-30
libcaf_core/caf/message_builder.hpp
libcaf_core/caf/message_builder.hpp
+32
-26
libcaf_core/src/message_builder.cpp
libcaf_core/src/message_builder.cpp
+23
-4
No files found.
libcaf_core/caf/message_builder.hpp
View file @
47a6fd15
...
...
@@ -17,8 +17,8 @@
* http://www.boost.org/LICENSE_1_0.txt. *
******************************************************************************/
#ifndef CAF_
OBJECT_ARRAY
_HPP
#define CAF_
OBJECT_ARRAY
_HPP
#ifndef CAF_
MESSAGE_BUILDER
_HPP
#define CAF_
MESSAGE_BUILDER
_HPP
#include <vector>
...
...
@@ -26,19 +26,18 @@
#include "caf/message_handler.hpp"
#include "caf/uniform_type_info.hpp"
#include "caf/detail/message_data.hpp"
namespace
caf
{
/**
* Provides a convenient interface
to create a {@link message}
* Provides a convenient interface
for createing `message` objects
* from a series of values using the member function `append`.
*/
class
message_builder
{
public:
message_builder
();
message_builder
(
const
message_builder
&
)
=
delete
;
message_builder
&
operator
=
(
const
message_builder
&
)
=
delete
;
message_builder
();
~
message_builder
();
/**
...
...
@@ -51,7 +50,7 @@ class message_builder {
}
/**
* Adds `what` to the elements of the
internal
buffer.
* Adds `what` to the elements of the buffer.
*/
message_builder
&
append
(
uniform_value
what
);
...
...
@@ -72,7 +71,7 @@ class message_builder {
}
/**
* Adds `what` to the elements of the
internal
buffer.
* Adds `what` to the elements of the buffer.
*/
template
<
class
T
>
message_builder
&
append
(
T
what
)
{
...
...
@@ -80,43 +79,50 @@ class message_builder {
}
/**
* Converts the internal buffer to an actual message object.
*
* It is worth mentioning that a call to `to_message` does neither
* invalidate the `message_builder` instance nor clears the internal
* buffer. However, calling any non-const member function afterwards
* can cause the `message_builder` to detach its data, i.e.,
* copy it if there is more than one reference to it.
* Converts the buffer to an actual message object without
* invalidating this message builder (nor clearing it).
*/
message
to_message
()
const
;
/**
* Converts the buffer to an actual message object and transfers
* ownership of the data to it, leaving this object in an invalid state.
* @warning Calling *any* member function on this object afterwards
* is undefined behavior (dereferencing a `nullptr`)
*/
message
to_message
();
message
move_
to_message
();
inline
message
filter
(
message_handler
f
)
{
/**
* @copydoc message::filter
*/
inline
message
filter
(
message_handler
f
)
const
{
return
to_message
().
filter
(
f
);
}
inline
message
::
cli_res
filter_cli
(
std
::
vector
<
message
::
cli_arg
>
args
)
{
/**
* @copydoc message::filter_cli
*/
inline
message
::
cli_res
filter_cli
(
std
::
vector
<
message
::
cli_arg
>
args
)
const
{
return
to_message
().
filter_cli
(
std
::
move
(
args
));
}
/**
*
Convenience function for `to_message().apply(handler).
*
@copydoc message::apply
*/
inline
optional
<
message
>
apply
(
message_handler
handler
)
{
return
to_message
().
apply
(
std
::
move
(
handler
));
}
optional
<
message
>
apply
(
message_handler
handler
);
/**
* Removes all elements from the
internal
buffer.
* Removes all elements from the buffer.
*/
void
clear
();
/**
* Returns whether the
internal
buffer is empty.
* Returns whether the buffer is empty.
*/
bool
empty
()
const
;
/**
* Returns the number of elements in the
internal
buffer.
* Returns the number of elements in the buffer.
*/
size_t
size
()
const
;
...
...
@@ -146,4 +152,4 @@ class message_builder {
}
// namespace caf
#endif // CAF_
OBJECT_ARRAY
_HPP
#endif // CAF_
MESSAGE_BUILDER
_HPP
libcaf_core/src/message_builder.cpp
View file @
47a6fd15
...
...
@@ -23,12 +23,12 @@
#include "caf/message_handler.hpp"
#include "caf/uniform_type_info.hpp"
#include "caf/detail/message_data.hpp"
namespace
caf
{
class
message_builder
::
dynamic_msg_data
:
public
detail
::
message_data
{
public:
using
super
=
message_data
;
dynamic_msg_data
()
:
m_type_token
(
0xFFFFFFFF
)
{
// nop
}
...
...
@@ -144,8 +144,27 @@ message_builder& message_builder::append(uniform_value what) {
return
*
this
;
}
message
message_builder
::
to_message
()
{
return
message
{
data
()};
message
message_builder
::
to_message
()
const
{
// this const_cast is safe, because the message is
// guaranteed to detach its data before modifying it
return
message
{
const_cast
<
dynamic_msg_data
*>
(
data
())};
}
message
message_builder
::
move_to_message
()
{
message
result
;
result
.
vals
().
reset
(
static_cast
<
dynamic_msg_data
*>
(
m_data
.
release
()),
false
);
return
result
;
}
optional
<
message
>
message_builder
::
apply
(
message_handler
handler
)
{
// avoid detaching of m_data by moving the data to a message object,
// calling message::apply and moving the data back
message
::
data_ptr
ptr
;
ptr
.
reset
(
static_cast
<
dynamic_msg_data
*>
(
m_data
.
release
()),
false
);
message
msg
{
std
::
move
(
ptr
)};
auto
res
=
msg
.
apply
(
std
::
move
(
handler
));
m_data
.
reset
(
msg
.
vals
().
release
(),
false
);
return
res
;
}
message_builder
::
dynamic_msg_data
*
message_builder
::
data
()
{
...
...
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