diff options
Diffstat (limited to 'src/lib/netlist/plib/pfmtlog.h')
-rw-r--r-- | src/lib/netlist/plib/pfmtlog.h | 57 |
1 files changed, 31 insertions, 26 deletions
diff --git a/src/lib/netlist/plib/pfmtlog.h b/src/lib/netlist/plib/pfmtlog.h index c5369109b81..681607bddc0 100644 --- a/src/lib/netlist/plib/pfmtlog.h +++ b/src/lib/netlist/plib/pfmtlog.h @@ -9,12 +9,19 @@ #include <limits> -#include "pconfig.h" #include "pstring.h" #include "ptypes.h" namespace plib { +P_ENUM(plog_level, + DEBUG, + INFO, + VERBOSE, + WARNING, + ERROR, + FATAL) + template <typename T> struct ptype_traits_base { @@ -157,13 +164,12 @@ protected: class pfmt : public pformat_base<pfmt> { public: - explicit pfmt(const pstring &fmt); - explicit pfmt(const char *fmt); + explicit pfmt(const pstring fmt); virtual ~pfmt(); - operator pstring() const { return m_str; } + operator pstring() const { return pstring(m_str, pstring::UTF8); } - const char *cstr() { return m_str; } + const char *c_str() { return m_str; } protected: @@ -177,54 +183,53 @@ private: unsigned m_arg; }; -P_ENUM(plog_level, - DEBUG, - INFO, - VERBOSE, - WARNING, - ERROR, - FATAL) - class plog_dispatch_intf; template <bool build_enabled = true> -class pfmt_writer_t +class pfmt_writer_t : plib::nocopyassignmove { public: - pfmt_writer_t() : m_enabled(true) { } + explicit pfmt_writer_t() : m_enabled(true) { } virtual ~pfmt_writer_t() { } - void operator ()(const char *fmt) const + /* runtime enable */ + template<bool enabled, typename... Args> + void log(const pstring fmt, Args&&... args) const + { + if (build_enabled && enabled && m_enabled) (*this)(fmt, std::forward<Args>(args)...); + } + + void operator ()(const pstring fmt) const { if (build_enabled && m_enabled) vdowrite(fmt); } template<typename T1> - void operator ()(const char *fmt, const T1 &v1) const + void operator ()(const pstring fmt, const T1 &v1) const { if (build_enabled && m_enabled) vdowrite(pfmt(fmt)(v1)); } template<typename T1, typename T2> - void operator ()(const char *fmt, const T1 &v1, const T2 &v2) const + void operator ()(const pstring fmt, const T1 &v1, const T2 &v2) const { if (build_enabled && m_enabled) vdowrite(pfmt(fmt)(v1)(v2)); } template<typename T1, typename T2, typename T3> - void operator ()(const char *fmt, const T1 &v1, const T2 &v2, const T3 &v3) const + void operator ()(const pstring fmt, const T1 &v1, const T2 &v2, const T3 &v3) const { if (build_enabled && m_enabled) vdowrite(pfmt(fmt)(v1)(v2)(v3)); } template<typename T1, typename T2, typename T3, typename T4> - void operator ()(const char *fmt, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4) const + void operator ()(const pstring fmt, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4) const { if (build_enabled && m_enabled) vdowrite(pfmt(fmt)(v1)(v2)(v3)(v4)); } template<typename T1, typename T2, typename T3, typename T4, typename T5> - void operator ()(const char *fmt, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5) const + void operator ()(const pstring fmt, const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5) const { if (build_enabled && m_enabled) vdowrite(pfmt(fmt)(v1)(v2)(v3)(v4)(v5)); } @@ -237,18 +242,18 @@ public: bool is_enabled() const { return m_enabled; } protected: - virtual void vdowrite(const pstring &ls) const {} + virtual void vdowrite(const pstring &ls) const = 0; private: bool m_enabled; }; -template <plog_level::e L, bool build_enabled = true> +template <plog_level::E L, bool build_enabled = true> class plog_channel : public pfmt_writer_t<build_enabled> { public: - explicit plog_channel(plog_dispatch_intf *b) : pfmt_writer_t<build_enabled>(), m_base(b) { } + explicit plog_channel(plog_dispatch_intf *b) : pfmt_writer_t<build_enabled>(), m_base(b) { } virtual ~plog_channel() { } protected: @@ -260,7 +265,7 @@ private: class plog_dispatch_intf { - template<plog_level::e, bool> friend class plog_channel; + template<plog_level::E, bool> friend class plog_channel; public: virtual ~plog_dispatch_intf(); @@ -292,7 +297,7 @@ public: }; -template <plog_level::e L, bool build_enabled> +template <plog_level::E L, bool build_enabled> void plog_channel<L, build_enabled>::vdowrite(const pstring &ls) const { m_base->vlog(L, ls); |