| 3973 | #endif // BACKWARD_SYSTEM_LINUX |
| 3974 | |
| 3975 | class Printer { |
| 3976 | public: |
| 3977 | bool snippet; |
| 3978 | ColorMode::type color_mode; |
| 3979 | bool address; |
| 3980 | bool object; |
| 3981 | int inliner_context_size; |
| 3982 | int trace_context_size; |
| 3983 | |
| 3984 | Printer() |
| 3985 | : snippet(true), color_mode(ColorMode::automatic), address(false), |
| 3986 | object(false), inliner_context_size(5), trace_context_size(7) {} |
| 3987 | |
| 3988 | template <typename ST> FILE *print(ST &st, FILE *fp = stderr) { |
| 3989 | cfile_streambuf obuf(fp); |
| 3990 | std::ostream os(&obuf); |
| 3991 | Colorize colorize(os); |
| 3992 | colorize.activate(color_mode, fp); |
| 3993 | print_stacktrace(st, os, colorize); |
| 3994 | return fp; |
| 3995 | } |
| 3996 | |
| 3997 | template <typename ST> std::ostream &print(ST &st, std::ostream &os) { |
| 3998 | Colorize colorize(os); |
| 3999 | colorize.activate(color_mode); |
| 4000 | print_stacktrace(st, os, colorize); |
| 4001 | return os; |
| 4002 | } |
| 4003 | |
| 4004 | template <typename IT> |
| 4005 | FILE *print(IT begin, IT end, FILE *fp = stderr, size_t thread_id = 0) { |
| 4006 | cfile_streambuf obuf(fp); |
| 4007 | std::ostream os(&obuf); |
| 4008 | Colorize colorize(os); |
| 4009 | colorize.activate(color_mode, fp); |
| 4010 | print_stacktrace(begin, end, os, thread_id, colorize); |
| 4011 | return fp; |
| 4012 | } |
| 4013 | |
| 4014 | template <typename IT> |
| 4015 | std::ostream &print(IT begin, IT end, std::ostream &os, |
| 4016 | size_t thread_id = 0) { |
| 4017 | Colorize colorize(os); |
| 4018 | colorize.activate(color_mode); |
| 4019 | print_stacktrace(begin, end, os, thread_id, colorize); |
| 4020 | return os; |
| 4021 | } |
| 4022 | |
| 4023 | TraceResolver const &resolver() const { return _resolver; } |
| 4024 | |
| 4025 | private: |
| 4026 | TraceResolver _resolver; |
| 4027 | SnippetFactory _snippets; |
| 4028 | |
| 4029 | template <typename ST> |
| 4030 | void print_stacktrace(ST &st, std::ostream &os, Colorize &colorize) { |
| 4031 | print_header(os, st.thread_id()); |
| 4032 | _resolver.load_stacktrace(st); |