summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib/pfmtlog.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/plib/pfmtlog.h')
-rw-r--r--src/lib/netlist/plib/pfmtlog.h57
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);