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.h76
1 files changed, 54 insertions, 22 deletions
diff --git a/src/lib/netlist/plib/pfmtlog.h b/src/lib/netlist/plib/pfmtlog.h
index 2c3773b1421..9f3ff382583 100644
--- a/src/lib/netlist/plib/pfmtlog.h
+++ b/src/lib/netlist/plib/pfmtlog.h
@@ -11,6 +11,7 @@
#include "penum.h"
#include "pstring.h"
#include "ptypes.h"
+#include "ppmf.h"
#include <limits>
#include <locale>
@@ -172,12 +173,39 @@ namespace plib {
};
template<>
+ struct ptype_traits<const char16_t *> : ptype_traits_base<const char16_t *>
+ {
+ static char32_t fmt_spec() { return 's'; }
+ static inline void streamify(std::ostream &s, const char16_t *v)
+ {
+ const putf16string su16(v);
+ s << putf8string(su16).c_str();
+ }
+ };
+
+ template<>
struct ptype_traits<std::string> : ptype_traits_base<std::string>
{
static char32_t fmt_spec() { return 's'; }
};
template<>
+ struct ptype_traits<putf8string> : ptype_traits_base<putf8string>
+ {
+ static char32_t fmt_spec() { return 's'; }
+ };
+
+ template<>
+ struct ptype_traits<putf16string> : ptype_traits_base<putf16string>
+ {
+ static char32_t fmt_spec() { return 's'; }
+ static inline void streamify(std::ostream &s, const putf16string &v)
+ {
+ s << putf8string(v).c_str();
+ }
+ };
+
+ template<>
struct ptype_traits<const void *> : ptype_traits_base<const void *>
{
static char32_t fmt_spec() { return 'p'; }
@@ -255,7 +283,7 @@ namespace plib {
friend std::ostream& operator<<(std::ostream &ostrm, const pfmt &fmt)
{
- ostrm << fmt.m_str;
+ ostrm << putf8string(fmt.m_str);
return ostrm;
}
@@ -290,7 +318,7 @@ namespace plib {
if (ret.ret>=0)
{
ptype_traits<typename std::decay<T>::type>::streamify(strm, std::forward<T>(v));
- const pstring ps(strm.str());
+ const pstring ps(putf8string(strm.str()));
m_str = m_str.substr(0, ret.p) + ps + m_str.substr(ret.p + ret.sl);
}
} while (ret.ret == 1);
@@ -358,12 +386,16 @@ namespace plib {
};
- template <class T, plog_level::E L, bool build_enabled = true>
- class plog_channel : public pfmt_writer_t<plog_channel<T, L, build_enabled>, build_enabled>
+ using plog_delegate = plib::pmfp<void, plog_level, const pstring &>;
+
+ template <plog_level::E L, bool build_enabled = true>
+ class plog_channel : public pfmt_writer_t<plog_channel<L, build_enabled>, build_enabled>
{
- friend class pfmt_writer_t<plog_channel<T, L, build_enabled>, build_enabled>;
+ friend class pfmt_writer_t<plog_channel<L, build_enabled>, build_enabled>;
public:
- explicit plog_channel(T &b) : pfmt_writer_t<plog_channel, build_enabled>(), m_base(b) { }
+ explicit plog_channel(plog_delegate logger)
+ : pfmt_writer_t<plog_channel, build_enabled>()
+ , m_logger(logger) { }
PCOPYASSIGNMOVE(plog_channel, delete)
@@ -372,36 +404,36 @@ namespace plib {
protected:
void vdowrite(const pstring &ls) const noexcept
{
- m_base.vlog(L, ls);
+ m_logger(L, ls);
}
private:
- T &m_base;
+ plog_delegate m_logger;
};
- template<class T, bool debug_enabled>
+ template<bool debug_enabled>
class plog_base
{
public:
- explicit plog_base(T &proxy)
- : debug(proxy),
- info(proxy),
- verbose(proxy),
- warning(proxy),
- error(proxy),
- fatal(proxy)
+ explicit plog_base(plog_delegate logger)
+ : debug(logger),
+ info(logger),
+ verbose(logger),
+ warning(logger),
+ error(logger),
+ fatal(logger)
{}
PCOPYASSIGNMOVE(plog_base, default)
virtual ~plog_base() noexcept = default;
- plog_channel<T, plog_level::DEBUG, debug_enabled> debug;
- plog_channel<T, plog_level::INFO> info;
- plog_channel<T, plog_level::VERBOSE> verbose;
- plog_channel<T, plog_level::WARNING> warning;
- plog_channel<T, plog_level::ERROR> error;
- plog_channel<T, plog_level::FATAL> fatal;
+ plog_channel<plog_level::DEBUG, debug_enabled> debug;
+ plog_channel<plog_level::INFO> info;
+ plog_channel<plog_level::VERBOSE> verbose;
+ plog_channel<plog_level::WARNING> warning;
+ plog_channel<plog_level::ERROR> error;
+ plog_channel<plog_level::FATAL> fatal;
};
struct perrmsg