/* @file pretty_refcnt.hpp * * author: Roland Conybeare, Jul 2025 */ #pragma once #include "Refcounted.hpp" #include "xo/indentlog/print/pretty.hpp" namespace xo { namespace print { #ifndef ppdetail_atomic template <> struct ppdetail { 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_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 { 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_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 { if (auto p = x.get()) { ppdetail::print_pretty(ppii, *p); } else { ppii.pps()->write("write(reflect::type_name()); ppii.pps()->write(">"); } return false; } } }; } }