From db11aff653456e9fa4d06f4a86ce0f7a616171b5 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 3 Apr 2017 15:51:39 +0200 Subject: Generalize diagnostics with custom subsequent line indentation Used to map to systemd daemon diagnostics. --- butl/diagnostics | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'butl') diff --git a/butl/diagnostics b/butl/diagnostics index 0c22337..18008d5 100644 --- a/butl/diagnostics +++ b/butl/diagnostics @@ -82,7 +82,7 @@ namespace butl flush () const; void - append (diag_epilogue* e) const + append (const char* indent, diag_epilogue* e) const { // Ignore subsequent epilogues (e.g., from nested marks, etc). // @@ -91,8 +91,8 @@ namespace butl epilogue_ = e; empty_ = false; } - else - os << "\n "; + else if (indent != nullptr) + os << indent; } // Move constructible-only type. @@ -141,22 +141,27 @@ namespace butl template struct diag_prologue: B { - diag_prologue (diag_epilogue* e = nullptr): B (), epilogue_ (e) {} + diag_prologue (const char* i = "\n ", diag_epilogue* e = nullptr) + : B (), indent_ (i), epilogue_ (e) {} template diag_prologue (A&&... a) - : B (std::forward (a)...), epilogue_ (nullptr) {} + : B (std::forward (a)...), indent_ ("\n "), epilogue_ (nullptr) {} template diag_prologue (diag_epilogue* e, A&&... a) - : B (std::forward (a)...), epilogue_ (e) {} + : B (std::forward (a)...), indent_ ("\n "), epilogue_ (e) {} + + template + diag_prologue (const char* i, diag_epilogue* e, A&&... a) + : B (std::forward (a)...), indent_ (i), epilogue_ (e) {} template diag_record operator<< (const T& x) const { diag_record r; - r.append (epilogue_); + r.append (indent_, epilogue_); B::operator() (r); r << x; return r; @@ -165,12 +170,13 @@ namespace butl friend const diag_record& operator<< (const diag_record& r, const diag_prologue& p) { - r.append (p.epilogue_); + r.append (p.indent_, p.epilogue_); p (r); return r; } private: + const char* indent_; diag_epilogue* epilogue_; }; -- cgit v1.1