60 template<
typename Wrapped>
65 : wrapped(pupper), out(out) {}
73 <<
"(" << meta
.name <<
")" 78 return wrapped.begin(value, meta);
85 <<
"~" << to_string(meta)
86 <<
"(" << meta
.name <<
")" 94 out << indent() <<
"pup(" << meta
.name;
95 wrapped.pup(value, meta);
96 if constexpr (is_puppable<T>()) {
97 out <<
", " << value <<
")" << std::endl;
99 out <<
", " <<
"PUPPER" <<
")" << std::endl;
108 std::string indent() {
109 return std::string(depth * 2ul,
' ');
112 std::string to_string(
const Meta& meta)
const {
This pupper wraps another pupper, logging each call to Wrapped::begin(), Wrapped::pup() and wrapped::...
PupPolicy begin(T &value, const Meta &meta)
~DebugPupper() override=default
void pup(T &value, const Meta &meta)
PupPolicy
Controls an object's pup() behavior.
void end(const Meta &meta)
DebugPupper(Wrapped &pupper, std::ostream &out)
Base class for working with puppable types.