Commit 2ebb7d6a authored by Dominik Charousset's avatar Dominik Charousset

Make to_string for actors more readable

parent 5ef0b54c
...@@ -164,13 +164,21 @@ public: ...@@ -164,13 +164,21 @@ public:
actor(actor_control_block*, bool); actor(actor_control_block*, bool);
/// @endcond
friend inline std::string to_string(const actor& x) {
return to_string(x.ptr_);
}
friend inline void append_to_string(std::string& x, const actor& y) {
return append_to_string(x, y.ptr_);
}
template <class Inspector> template <class Inspector>
friend typename Inspector::result_type inspect(Inspector& f, actor& x) { friend typename Inspector::result_type inspect(Inspector& f, actor& x) {
return inspect(f, x.ptr_); return inspect(f, x.ptr_);
} }
/// @endcond
/// Releases the reference held by handle `x`. Using the /// Releases the reference held by handle `x`. Using the
/// handle after invalidating it is undefined behavior. /// handle after invalidating it is undefined behavior.
friend void destroy(actor& x) { friend void destroy(actor& x) {
......
...@@ -97,6 +97,14 @@ public: ...@@ -97,6 +97,14 @@ public:
return compare(other.get()); return compare(other.get());
} }
friend inline std::string to_string(const actor_addr& x) {
return to_string(x.ptr_);
}
friend inline void append_to_string(std::string& x, const actor_addr& y) {
return append_to_string(x, y.ptr_);
}
template <class Inspector> template <class Inspector>
friend typename Inspector::result_type inspect(Inspector& f, actor_addr& x) { friend typename Inspector::result_type inspect(Inspector& f, actor_addr& x) {
return inspect(f, x.ptr_); return inspect(f, x.ptr_);
......
...@@ -200,6 +200,14 @@ inline execution_unit* context_of(void*) { ...@@ -200,6 +200,14 @@ inline execution_unit* context_of(void*) {
return nullptr; return nullptr;
} }
std::string to_string(const strong_actor_ptr& x);
void append_to_string(std::string& x, const strong_actor_ptr& y);
std::string to_string(const weak_actor_ptr& x);
void append_to_string(std::string& x, const weak_actor_ptr& y);
template <class Inspector> template <class Inspector>
typename Inspector::result_type inspect(Inspector& f, strong_actor_ptr& x) { typename Inspector::result_type inspect(Inspector& f, strong_actor_ptr& x) {
actor_id aid = 0; actor_id aid = 0;
......
...@@ -64,7 +64,6 @@ public: ...@@ -64,7 +64,6 @@ public:
traverse(std::forward<Ts>(xs)...); traverse(std::forward<Ts>(xs)...);
} }
private:
/// Prints a separator to the result string. /// Prints a separator to the result string.
void sep(); void sep();
...@@ -237,6 +236,7 @@ private: ...@@ -237,6 +236,7 @@ private:
traverse(std::forward<Ts>(xs)...); traverse(std::forward<Ts>(xs)...);
} }
private:
template <class T> template <class T>
T& deconst(const T& x) { T& deconst(const T& x) {
return const_cast<T&>(x); return const_cast<T&>(x);
......
...@@ -194,8 +194,14 @@ inline bool operator<(const node_id& lhs, const node_id& rhs) { ...@@ -194,8 +194,14 @@ inline bool operator<(const node_id& lhs, const node_id& rhs) {
return lhs.compare(rhs) < 0; return lhs.compare(rhs) < 0;
} }
/// Converts `x` into a human-readable string representation.
/// @relates node_id
std::string to_string(const node_id& x); std::string to_string(const node_id& x);
/// Appends `y` in human-readable string representation to `x`.
/// @relates node_id
void append_to_string(std::string& x, const node_id& y);
} // namespace caf } // namespace caf
namespace std{ namespace std{
......
...@@ -237,6 +237,14 @@ class typed_actor : detail::comparable<typed_actor<Sigs...>>, ...@@ -237,6 +237,14 @@ class typed_actor : detail::comparable<typed_actor<Sigs...>>,
// nop // nop
} }
friend inline std::string to_string(const typed_actor& x) {
return to_string(x.ptr_);
}
friend inline void append_to_string(std::string& x, const typed_actor& y) {
return append_to_string(x, y.ptr_);
}
template <class Inspector> template <class Inspector>
friend typename Inspector::result_type inspect(Inspector& f, typed_actor& x) { friend typename Inspector::result_type inspect(Inspector& f, typed_actor& x) {
return f(x.ptr_); return f(x.ptr_);
......
...@@ -111,4 +111,40 @@ error save_actor(strong_actor_ptr& storage, execution_unit* ctx, ...@@ -111,4 +111,40 @@ error save_actor(strong_actor_ptr& storage, execution_unit* ctx,
return none; return none;
} }
namespace {
void append_to_string_impl(std::string& x, const actor_control_block* y) {
if (y) {
x += std::to_string(y->aid);
x += '@';
append_to_string(x, y->nid);
} else {
x += "0@invalid-node";
}
}
std::string to_string_impl(const actor_control_block* x) {
std::string result;
append_to_string_impl(result, x);
return result;
}
} // namespace <anonymous>
std::string to_string(const strong_actor_ptr& x) {
return to_string_impl(x.get());
}
void append_to_string(std::string& x, const strong_actor_ptr& y) {
return append_to_string_impl(x, y.get());
}
std::string to_string(const weak_actor_ptr& x) {
return to_string_impl(x.get());
}
void append_to_string(std::string& x, const weak_actor_ptr& y) {
return append_to_string_impl(x, y.get());
}
} // namespace caf } // namespace caf
...@@ -180,12 +180,21 @@ void node_id::swap(node_id& x) { ...@@ -180,12 +180,21 @@ void node_id::swap(node_id& x) {
} }
std::string to_string(const node_id& x) { std::string to_string(const node_id& x) {
if (!x) std::string result;
return "none"; append_to_string(result, x);
return deep_to_string(meta::type_name("node_id"), return result;
x.process_id(), }
meta::hex_formatted(),
x.host_id()); void append_to_string(std::string& x, const node_id& y) {
if (!y) {
x += "invalid-node";
return;
}
detail::stringification_inspector si{x};
si.consume_hex(reinterpret_cast<const uint8_t*>(y.host_id().data()),
y.host_id().size());
x += '#';
x += std::to_string(y.process_id());
} }
} // namespace caf } // namespace caf
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment