diff --git a/include/xo/refcnt/pretty_refcnt.hpp b/include/xo/refcnt/pretty_refcnt.hpp index ecf53aba..8c1903f1 100644 --- a/include/xo/refcnt/pretty_refcnt.hpp +++ b/include/xo/refcnt/pretty_refcnt.hpp @@ -10,66 +10,67 @@ namespace xo { namespace print { +#ifndef ppdetail_atomic template <> struct ppdetail { - static bool print_upto(ppstate * pps, const xo::ref::Refcount * x) { - return ppdetail_atomic::print_upto(pps, x); - } - static void print_pretty(ppstate * pps, const xo::ref::Refcount * x) { - ppdetail_atomic::print_pretty(pps, x); + static bool print_pretty(const ppindentinfo & ppii, const xo::ref::Refcount * x) { + return ppdetail_atomic::print_pretty(ppii, x); } }; +#endif template struct ppdetail> { - static bool print_upto(ppstate * pps, const rp & x) { - if (auto p = x.get()) { - return ppdetail::print_upto(pps, *p); + static bool print_pretty(const ppindentinfo & ppii, const rp & x) { + if (ppii.upto()) { + if (auto p = x.get()) { + return ppdetail::print_pretty(ppii, *p); + } else { + /* note: degenerate case here, since never write newline for nullptr */ + + ppii.pps()->write("write(reflect::type_name()); + ppii.pps()->write(">"); + + return ppii.pps()->has_margin(); + } } else { - /* note: degenerate case here, since never write newline for nullptr */ - - pps->write("write(reflect::type_name()); - pps->write(">"); - - return pps->has_margin(); - } - } - - static void print_pretty(ppstate * pps, const rp & x) { - if (auto p = x.get()) { - ppdetail::print_pretty(pps, *p); - } else { - pps->write("write(reflect::type_name()); - pps->write(">"); + if (auto p = x.get()) { + ppdetail::print_pretty(ppii, *p); + } else { + ppii.pps()->write("write(reflect::type_name()); + ppii.pps()->write(">"); + } + return false; } } }; template struct ppdetail> { - static bool print_upto(ppstate * pps, const bp & x) { - if (auto p = x.get()) { - return ppdetail::print_upto(pps, *p); + static bool print_pretty(const ppindentinfo & ppii, const bp & x) { + if (ppii.upto()) { + if (auto p = x.get()) { + return ppdetail::print_pretty(ppii, *p); + } else { + /* note: degenerate case here, since never write newline for nullptr */ + + ppii.pps()->write("write(reflect::type_name()); + ppii.pps()->write(">"); + + return ppii.pps()->has_margin(); + } } else { - /* note: degenerate case here, since never write newline for nullptr */ - - pps->write("write(reflect::type_name()); - pps->write(">"); - - return pps->has_margin(); - } - } - - static void print_pretty(ppstate * pps, const bp & x) { - if (auto p = x.get()) { - ppdetail::print_pretty(pps, *p); - } else { - pps->write("write(reflect::type_name()); - pps->write(">"); + if (auto p = x.get()) { + ppdetail::print_pretty(ppii, *p); + } else { + ppii.pps()->write("write(reflect::type_name()); + ppii.pps()->write(">"); + } + return false; } } };