summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2017-01-19 18:05:19 +0100
committer couriersud <couriersud@gmx.org>2017-01-20 22:29:23 +0100
commit4d15501a30d78eecc5011ebdd12a7568954129cb (patch)
treef3364bc26aae7719fb8fa3b153847188446844a7
parent1ae3e29ea3fd90e5df31d52c5d3860fde7f3cbac (diff)
Netlist: code refactoring
Make streams provide binary access only. Use putf8_reader and putf8_writer to actually access streams. Replace some char * parameters with pstring where appropriate. Minor code refactoring and move functionality were it belongs. (nw)
-rw-r--r--src/lib/netlist/devices/nld_74279.cpp4
-rw-r--r--src/lib/netlist/devices/nld_7448.cpp4
-rw-r--r--src/lib/netlist/devices/nld_9312.cpp2
-rw-r--r--src/lib/netlist/devices/nld_log.cpp11
-rw-r--r--src/lib/netlist/devices/nld_truthtable.cpp2
-rw-r--r--src/lib/netlist/devices/nld_truthtable.h8
-rw-r--r--src/lib/netlist/devices/nlid_proxy.cpp6
-rw-r--r--src/lib/netlist/devices/nlid_system.h2
-rw-r--r--src/lib/netlist/nl_base.cpp52
-rw-r--r--src/lib/netlist/nl_base.h10
-rw-r--r--src/lib/netlist/nl_parser.cpp2
-rw-r--r--src/lib/netlist/nl_parser.h6
-rw-r--r--src/lib/netlist/nl_setup.cpp67
-rw-r--r--src/lib/netlist/nl_setup.h4
-rw-r--r--src/lib/netlist/plib/pconfig.h1
-rw-r--r--src/lib/netlist/plib/pfmtlog.cpp14
-rw-r--r--src/lib/netlist/plib/pfmtlog.h24
-rw-r--r--src/lib/netlist/plib/pparser.cpp5
-rw-r--r--src/lib/netlist/plib/pparser.h18
-rw-r--r--src/lib/netlist/plib/pstream.cpp58
-rw-r--r--src/lib/netlist/plib/pstream.h108
-rw-r--r--src/lib/netlist/plib/pstring.cpp2
-rw-r--r--src/lib/netlist/plib/pstring.h1
-rw-r--r--src/lib/netlist/prg/nltool.cpp11
-rw-r--r--src/lib/netlist/prg/nlwav.cpp9
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.h2
-rw-r--r--src/lib/netlist/solver/nld_ms_gcr.h19
-rw-r--r--src/lib/netlist/solver/nld_solver.cpp3
-rw-r--r--src/lib/netlist/tools/nl_convert.cpp19
-rw-r--r--src/lib/netlist/tools/nl_convert.h6
30 files changed, 260 insertions, 220 deletions
diff --git a/src/lib/netlist/devices/nld_74279.cpp b/src/lib/netlist/devices/nld_74279.cpp
index 48c2e7e095b..b95e0184b67 100644
--- a/src/lib/netlist/devices/nld_74279.cpp
+++ b/src/lib/netlist/devices/nld_74279.cpp
@@ -56,7 +56,7 @@ namespace netlist
nld_74279A::truthtable_t nld_74279A::m_ttbl;
nld_74279B::truthtable_t nld_74279B::m_ttbl;
- const char *nld_74279A::m_desc[] = {
+ const pstring nld_74279A::m_desc[] = {
"S,R,_Q|Q",
"0,X,X|1|22",
"1,0,X|0|27",
@@ -66,7 +66,7 @@ namespace netlist
};
- const char *nld_74279B::m_desc[] = {
+ const pstring nld_74279B::m_desc[] = {
"S1,S2,R,_Q|Q",
"0,X,X,X|1|22",
"X,0,X,X|1|22",
diff --git a/src/lib/netlist/devices/nld_7448.cpp b/src/lib/netlist/devices/nld_7448.cpp
index 8b4d11c374b..d44c2808a5c 100644
--- a/src/lib/netlist/devices/nld_7448.cpp
+++ b/src/lib/netlist/devices/nld_7448.cpp
@@ -14,7 +14,7 @@ namespace netlist
{
#if (USE_TRUTHTABLE_7448 && USE_TRUTHTABLE)
- NETLIB_TRUTHTABLE(7448, 7, 7, 0);
+ NETLIB_TRUTHTABLE(7448, 7, 7);
#else
@@ -80,7 +80,7 @@ namespace netlist
#if (USE_TRUTHTABLE_7448 && USE_TRUTHTABLE)
nld_7448::truthtable_t nld_7448::m_ttbl;
- const char *nld_7448::m_desc[] = {
+ const pstring nld_7448::m_desc[] = {
" LTQ,BIQ,RBIQ, A , B , C , D | a, b, c, d, e, f, g",
" 1, 1, 1, 0, 0, 0, 0 | 1, 1, 1, 1, 1, 1, 0|100,100,100,100,100,100,100",
diff --git a/src/lib/netlist/devices/nld_9312.cpp b/src/lib/netlist/devices/nld_9312.cpp
index 2ad298f368a..5f22d8d0640 100644
--- a/src/lib/netlist/devices/nld_9312.cpp
+++ b/src/lib/netlist/devices/nld_9312.cpp
@@ -130,7 +130,7 @@ namespace netlist
* do this right now.
*/
- const char *nld_9312::m_desc[] = {
+ const pstring nld_9312::m_desc[] = {
" C, B, A, G,D0,D1,D2,D3,D4,D5,D6,D7| Y,YQ",
" X, X, X, 1, X, X, X, X, X, X, X, X| 0, 1|33,19",
" 0, 0, 0, 0, 0, X, X, X, X, X, X, X| 0, 1|33,28",
diff --git a/src/lib/netlist/devices/nld_log.cpp b/src/lib/netlist/devices/nld_log.cpp
index 17661de803d..2065b36ddaf 100644
--- a/src/lib/netlist/devices/nld_log.cpp
+++ b/src/lib/netlist/devices/nld_log.cpp
@@ -20,21 +20,22 @@ namespace netlist
{
NETLIB_CONSTRUCTOR(log)
, m_I(*this, "I")
+ , m_strm(plib::pfmt("{1}.log")(this->name()))
+ , m_writer(m_strm)
{
- pstring filename = plib::pfmt("{1}.log")(this->name());
- m_strm = plib::make_unique<plib::pofilestream>(filename);
}
NETLIB_UPDATEI()
{
/* use pstring::sprintf, it is a LOT faster */
- m_strm->writeline(plib::pfmt("{1} {2}").e(netlist().time().as_double(),".9").e(static_cast<double>(m_I())));
+ m_writer.writeline(plib::pfmt("{1} {2}").e(netlist().time().as_double(),".9").e(static_cast<double>(m_I())));
}
NETLIB_RESETI() { }
protected:
analog_input_t m_I;
- std::unique_ptr<plib::pofilestream> m_strm;
+ plib::pofilestream m_strm;
+ plib::putf8_writer m_writer;
};
NETLIB_OBJECT_DERIVED(logD, log)
@@ -46,7 +47,7 @@ namespace netlist
NETLIB_UPDATEI()
{
- m_strm->writeline(plib::pfmt("{1} {2}").e(netlist().time().as_double(),".9").e(static_cast<double>(m_I() - m_I2())));
+ m_writer.writeline(plib::pfmt("{1} {2}").e(netlist().time().as_double(),".9").e(static_cast<double>(m_I() - m_I2())));
}
NETLIB_RESETI() { }
diff --git a/src/lib/netlist/devices/nld_truthtable.cpp b/src/lib/netlist/devices/nld_truthtable.cpp
index 67acc61f9ef..52ba817ebc4 100644
--- a/src/lib/netlist/devices/nld_truthtable.cpp
+++ b/src/lib/netlist/devices/nld_truthtable.cpp
@@ -299,7 +299,7 @@ void tt_factory_create(setup_t &setup, tt_desc &desc, const pstring &sourcefile)
}
ret->m_desc = desc.desc;
if (desc.family != "")
- ret->m_family = setup.netlist().family_from_model(desc.family);
+ ret->m_family = setup.family_from_model(desc.family);
setup.factory().register_device(std::unique_ptr<netlist_base_factory_truthtable_t>(ret));
}
diff --git a/src/lib/netlist/devices/nld_truthtable.h b/src/lib/netlist/devices/nld_truthtable.h
index 117a59ed9fa..827cb26c9d7 100644
--- a/src/lib/netlist/devices/nld_truthtable.h
+++ b/src/lib/netlist/devices/nld_truthtable.h
@@ -26,7 +26,7 @@
: nld_truthtable_t<nIN, nOUT>(owner, name, family_TTL(), &m_ttbl, m_desc) { } \
private: \
static truthtable_t m_ttbl; \
- static const char *m_desc[]; \
+ static const pstring m_desc[]; \
}
@@ -159,16 +159,16 @@ namespace netlist
template <class C>
nld_truthtable_t(C &owner, const pstring &name, const logic_family_desc_t *fam,
- truthtable_t *ttp, const char *desc[])
+ truthtable_t *ttp, const pstring *desc)
: device_t(owner, name)
, m_fam(*this, fam)
, m_ign(*this, "m_ign", 0)
, m_active(*this, "m_active", 1)
, m_ttp(ttp)
{
- while (*desc != nullptr && **desc != 0 )
+ while (*desc != "" )
{
- m_desc.push_back(pstring(*desc, pstring::UTF8));
+ m_desc.push_back(*desc);
desc++;
}
init();
diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp
index 8a2ef4860d9..3edb25f73e2 100644
--- a/src/lib/netlist/devices/nlid_proxy.cpp
+++ b/src/lib/netlist/devices/nlid_proxy.cpp
@@ -100,7 +100,7 @@ namespace netlist
, m_last_state(*this, "m_last_var", -1)
, m_is_timestep(false)
{
- const char *power_syms[3][2] ={ {"VCC", "VEE"}, {"VCC", "GND"}, {"VDD", "VSS"}};
+ const pstring power_syms[3][2] ={ {"VCC", "VEE"}, {"VCC", "GND"}, {"VDD", "VSS"}};
//register_sub(m_RV);
//register_term("1", m_RV.m_P);
//register_term("2", m_RV.m_N);
@@ -112,9 +112,9 @@ namespace netlist
for (int i = 0; i < 3; i++)
{
pstring devname = out_proxied->device().name();
- auto tp = netlist().setup().find_terminal(devname + "." + pstring(power_syms[i][0], pstring::UTF8),
+ auto tp = netlist().setup().find_terminal(devname + "." + power_syms[i][0],
detail::device_object_t::type_t::INPUT, false);
- auto tn = netlist().setup().find_terminal(devname + "." + pstring(power_syms[i][1], pstring::UTF8),
+ auto tn = netlist().setup().find_terminal(devname + "." + power_syms[i][1],
detail::device_object_t::type_t::INPUT, false);
if (tp != nullptr && tn != nullptr)
{
diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h
index a81d0dd4240..f2d893c7d28 100644
--- a/src/lib/netlist/devices/nlid_system.h
+++ b/src/lib/netlist/devices/nlid_system.h
@@ -181,7 +181,7 @@ namespace netlist
/* make sure we get the family first */
, m_FAMILY(*this, "FAMILY", "FAMILY(TYPE=TTL)")
{
- set_logic_family(netlist().family_from_model(m_FAMILY()));
+ set_logic_family(setup().family_from_model(m_FAMILY()));
}
NETLIB_UPDATE_AFTER_PARAM_CHANGE()
diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp
index 3f24eaaf50c..93c22a9a67f 100644
--- a/src/lib/netlist/nl_base.cpp
+++ b/src/lib/netlist/nl_base.cpp
@@ -135,24 +135,6 @@ const logic_family_desc_t *family_CD4XXX()
return &obj;
}
-class logic_family_std_proxy_t : public logic_family_desc_t
-{
-public:
- logic_family_std_proxy_t() { }
- virtual plib::owned_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_t &anetlist,
- const pstring &name, logic_output_t *proxied) const override;
- virtual plib::owned_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
-};
-
-plib::owned_ptr<devices::nld_base_d_to_a_proxy> logic_family_std_proxy_t::create_d_a_proxy(netlist_t &anetlist,
- const pstring &name, logic_output_t *proxied) const
-{
- return plib::owned_ptr<devices::nld_base_d_to_a_proxy>::Create<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
-}
-plib::owned_ptr<devices::nld_base_a_to_d_proxy> logic_family_std_proxy_t::create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const
-{
- return plib::owned_ptr<devices::nld_base_a_to_d_proxy>::Create<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
-}
// ----------------------------------------------------------------------------------------
// queue_t
@@ -315,36 +297,6 @@ void netlist_t::remove_dev(core_device_t *dev)
);
}
-const logic_family_desc_t *netlist_t::family_from_model(const pstring &model)
-{
- model_map_t map;
- setup().model_parse(model, map);
-
- if (setup().model_value_str(map, "TYPE") == "TTL")
- return family_TTL();
- if (setup().model_value_str(map, "TYPE") == "CD4XXX")
- return family_CD4XXX();
-
- for (auto & e : m_family_cache)
- if (e.first == model)
- return e.second.get();
-
- auto ret = plib::make_unique_base<logic_family_desc_t, logic_family_std_proxy_t>();
-
- ret->m_fixed_V = setup().model_value(map, "FV");
- ret->m_low_thresh_PCNT = setup().model_value(map, "IVL");
- ret->m_high_thresh_PCNT = setup().model_value(map, "IVH");
- ret->m_low_VO = setup().model_value(map, "OVL");
- ret->m_high_VO = setup().model_value(map, "OVH");
- ret->m_R_low = setup().model_value(map, "ORL");
- ret->m_R_high = setup().model_value(map, "ORH");
-
- auto retp = ret.get();
-
- m_family_cache.emplace_back(model, std::move(ret));
-
- return retp;
-}
void netlist_t::start()
@@ -600,7 +552,7 @@ void netlist_t::print_stats() const
}
}
-core_device_t *netlist_t::pget_single_device(const char *classname, bool (*cc)(core_device_t *))
+core_device_t *netlist_t::pget_single_device(const pstring classname, bool (*cc)(core_device_t *))
{
core_device_t *ret = nullptr;
for (auto &d : m_devices)
@@ -728,7 +680,7 @@ void device_t::connect_post_start(detail::core_terminal_t &t1, detail::core_term
detail::family_setter_t::family_setter_t(core_device_t &dev, const pstring desc)
{
- dev.set_logic_family(dev.netlist().family_from_model(desc));
+ dev.set_logic_family(dev.netlist().setup().family_from_model(desc));
}
detail::family_setter_t::family_setter_t(core_device_t &dev, const logic_family_desc_t *desc)
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index f06873f445a..bb2dcb375e2 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -1239,7 +1239,6 @@ namespace netlist
void remove_dev(core_device_t *dev);
detail::net_t *find_net(const pstring &name);
- const logic_family_desc_t *family_from_model(const pstring &model);
template<class device_class>
std::vector<device_class *> get_device_list()
@@ -1261,7 +1260,7 @@ namespace netlist
}
template<class C>
- C *get_single_device(const char *classname)
+ C *get_single_device(const pstring classname)
{
return dynamic_cast<C *>(pget_single_device(classname, check_class<C>));
}
@@ -1289,15 +1288,18 @@ namespace netlist
plib::dynlib &lib() { return *m_lib; }
+ // FIXME: find something better
/* sole use is to manage lifetime of net objects */
std::vector<plib::owned_ptr<detail::net_t>> m_nets;
+ /* sole use is to manage lifetime of family objects */
+ std::vector<std::pair<pstring, std::unique_ptr<logic_family_desc_t>>> m_family_cache;
protected:
void print_stats() const;
private:
- core_device_t *pget_single_device(const char *classname, bool (*cc)(core_device_t *));
+ core_device_t *pget_single_device(const pstring classname, bool (*cc)(core_device_t *));
/* mostly rw */
netlist_time m_time;
@@ -1323,8 +1325,6 @@ namespace netlist
nperfcount_t m_perf_inp_active;
std::vector<plib::owned_ptr<core_device_t>> m_devices;
- /* sole use is to manage lifetime of family objects */
- std::vector<std::pair<pstring, std::unique_ptr<logic_family_desc_t>>> m_family_cache;
};
// -----------------------------------------------------------------------------
diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp
index 5f0bcaa395d..124c4d5cd50 100644
--- a/src/lib/netlist/nl_parser.cpp
+++ b/src/lib/netlist/nl_parser.cpp
@@ -29,7 +29,6 @@ bool parser_t::parse(const pstring nlname)
{
set_identifier_chars("abcdefghijklmnopqrstuvwvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_.-");
set_number_chars(".0123456789", "0123456789eE-."); //FIXME: processing of numbers
- //const char ws[5] = { ' ', 9, 10, 13, 0 };
set_whitespace(pstring("").cat(' ').cat(9).cat(10).cat(13));
set_comment("/*", "*/", "//");
m_tok_param_left = register_token("(");
@@ -60,7 +59,6 @@ bool parser_t::parse(const pstring nlname)
while (true)
{
token_t token = get_token();
-
if (token.is_type(ENDOFFILE))
{
return false;
diff --git a/src/lib/netlist/nl_parser.h b/src/lib/netlist/nl_parser.h
index c767ba65306..8c852eb3645 100644
--- a/src/lib/netlist/nl_parser.h
+++ b/src/lib/netlist/nl_parser.h
@@ -17,8 +17,8 @@ namespace netlist
{
P_PREVENT_COPYING(parser_t)
public:
- parser_t(plib::pistream &strm, setup_t &setup)
- : plib::ptokenizer(strm), m_setup(setup), m_buf(nullptr) {}
+ parser_t(plib::putf8_reader &strm, setup_t &setup)
+ : plib::ptokenizer(strm), m_setup(setup) {}
bool parse(const pstring nlname = "");
@@ -70,8 +70,6 @@ namespace netlist
token_id_t m_tok_TT_FAMILY;
setup_t &m_setup;
-
- const char *m_buf;
};
}
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index 382ee545500..46f6a92aed1 100644
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -902,6 +902,57 @@ nl_double setup_t::model_value(model_map_t &map, const pstring &entity)
return tmp.as_double() * factor;
}
+class logic_family_std_proxy_t : public logic_family_desc_t
+{
+public:
+ logic_family_std_proxy_t() { }
+ virtual plib::owned_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_t &anetlist,
+ const pstring &name, logic_output_t *proxied) const override;
+ virtual plib::owned_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
+};
+
+plib::owned_ptr<devices::nld_base_d_to_a_proxy> logic_family_std_proxy_t::create_d_a_proxy(netlist_t &anetlist,
+ const pstring &name, logic_output_t *proxied) const
+{
+ return plib::owned_ptr<devices::nld_base_d_to_a_proxy>::Create<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
+}
+plib::owned_ptr<devices::nld_base_a_to_d_proxy> logic_family_std_proxy_t::create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const
+{
+ return plib::owned_ptr<devices::nld_base_a_to_d_proxy>::Create<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
+}
+
+
+const logic_family_desc_t *setup_t::family_from_model(const pstring &model)
+{
+ model_map_t map;
+ model_parse(model, map);
+
+ if (model_value_str(map, "TYPE") == "TTL")
+ return family_TTL();
+ if (model_value_str(map, "TYPE") == "CD4XXX")
+ return family_CD4XXX();
+
+ for (auto & e : netlist().m_family_cache)
+ if (e.first == model)
+ return e.second.get();
+
+ auto ret = plib::make_unique_base<logic_family_desc_t, logic_family_std_proxy_t>();
+
+ ret->m_fixed_V = model_value(map, "FV");
+ ret->m_low_thresh_PCNT = model_value(map, "IVL");
+ ret->m_high_thresh_PCNT = model_value(map, "IVH");
+ ret->m_low_VO = model_value(map, "OVL");
+ ret->m_high_VO = model_value(map, "OVH");
+ ret->m_R_low = model_value(map, "ORL");
+ ret->m_R_high = model_value(map, "ORH");
+
+ auto retp = ret.get();
+
+ netlist().m_family_cache.emplace_back(model, std::move(ret));
+
+ return retp;
+}
+
void setup_t::tt_factory_create(tt_desc &desc, const pstring &sourcefile)
{
devices::tt_factory_create(*this, desc, sourcefile);
@@ -938,12 +989,16 @@ std::unique_ptr<plib::pistream> setup_t::get_data_stream(const pstring name)
}
-bool setup_t::parse_stream(plib::pistream &istrm, const pstring &name)
+bool setup_t::parse_stream(plib::putf8_reader &istrm, const pstring &name)
{
plib::pomemstream ostrm;
+ plib::putf8_writer owrt(ostrm);
+
+ plib::ppreprocessor(&m_defines).process(istrm, owrt);
- plib::pimemstream istrm2(plib::ppreprocessor(&m_defines).process(istrm, ostrm));
- return parser_t(istrm2, *this).parse(name);
+ plib::pimemstream istrm2(ostrm);
+ plib::putf8_reader reader2(istrm2);
+ return parser_t(reader2, *this).parse(name);
}
void setup_t::register_define(pstring defstr)
@@ -964,7 +1019,11 @@ bool source_t::parse(const pstring &name)
if (m_type != SOURCE)
return false;
else
- return m_setup.parse_stream(*stream(name), name);
+ {
+ auto rstream = stream(name);
+ plib::putf8_reader reader(*rstream);
+ return m_setup.parse_stream(reader, name);
+ }
}
std::unique_ptr<plib::pistream> source_string_t::stream(const pstring &name)
diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h
index 256b9ab21b3..06f70623ada 100644
--- a/src/lib/netlist/nl_setup.h
+++ b/src/lib/netlist/nl_setup.h
@@ -244,7 +244,7 @@ namespace netlist
std::unique_ptr<plib::pistream> get_data_stream(const pstring name);
- bool parse_stream(plib::pistream &istrm, const pstring &name);
+ bool parse_stream(plib::putf8_reader &istrm, const pstring &name);
/* register a source */
@@ -266,6 +266,8 @@ namespace netlist
void model_parse(const pstring &model, model_map_t &map);
+ const logic_family_desc_t *family_from_model(const pstring &model);
+
/* FIXME: truth table trampoline */
void tt_factory_create(tt_desc &desc, const pstring &sourcefile);
diff --git a/src/lib/netlist/plib/pconfig.h b/src/lib/netlist/plib/pconfig.h
index f2164bbde7f..9cd917ceb28 100644
--- a/src/lib/netlist/plib/pconfig.h
+++ b/src/lib/netlist/plib/pconfig.h
@@ -56,6 +56,7 @@ typedef __int128_t INT128;
#define P_PREVENT_COPYING(name) \
private: \
name(const name &); \
+ name(const name &&); \
name &operator=(const name &);
//============================================================
diff --git a/src/lib/netlist/plib/pfmtlog.cpp b/src/lib/netlist/plib/pfmtlog.cpp
index 48b0f1544c1..4cd74837dbb 100644
--- a/src/lib/netlist/plib/pfmtlog.cpp
+++ b/src/lib/netlist/plib/pfmtlog.cpp
@@ -22,7 +22,7 @@ plog_dispatch_intf::~plog_dispatch_intf()
{
}
-pfmt::pfmt(const pstring &fmt)
+pfmt::pfmt(const pstring fmt)
: m_str(m_str_buf), m_allocated(0), m_arg(0)
{
std::size_t l = fmt.blen() + 1;
@@ -34,18 +34,6 @@ pfmt::pfmt(const pstring &fmt)
memcpy(m_str, fmt.c_str(), l);
}
-pfmt::pfmt(const char *fmt)
-: m_str(m_str_buf), m_allocated(0), m_arg(0)
-{
- std::size_t l = strlen(fmt) + 1;
- if (l>sizeof(m_str_buf))
- {
- m_allocated = 2 * l;
- m_str = palloc_array<char>(2 * l);
- }
- memcpy(m_str, fmt, l);
-}
-
pfmt::~pfmt()
{
if (m_allocated > 0)
diff --git a/src/lib/netlist/plib/pfmtlog.h b/src/lib/netlist/plib/pfmtlog.h
index 0aeb015dc2c..fbae59673d7 100644
--- a/src/lib/netlist/plib/pfmtlog.h
+++ b/src/lib/netlist/plib/pfmtlog.h
@@ -157,13 +157,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 pstring(m_str, pstring::UTF8); }
- const char *cstr() { return m_str; }
+ const char *c_str() { return m_str; }
protected:
@@ -190,41 +189,42 @@ class plog_dispatch_intf;
template <bool build_enabled = true>
class pfmt_writer_t
{
+ P_PREVENT_COPYING(pfmt_writer_t)
public:
- pfmt_writer_t() : m_enabled(true) { }
+ explicit pfmt_writer_t() : m_enabled(true) { }
virtual ~pfmt_writer_t() { }
- void operator ()(const char *fmt) const
+ void operator ()(const pstring fmt) const
{
- if (build_enabled && m_enabled) vdowrite(pstring(fmt, pstring::UTF8));
+ 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));
}
@@ -248,7 +248,7 @@ 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:
diff --git a/src/lib/netlist/plib/pparser.cpp b/src/lib/netlist/plib/pparser.cpp
index 35629aacdee..9d25adffcbe 100644
--- a/src/lib/netlist/plib/pparser.cpp
+++ b/src/lib/netlist/plib/pparser.cpp
@@ -15,7 +15,7 @@ namespace plib {
// A simple tokenizer
// ----------------------------------------------------------------------------------------
-ptokenizer::ptokenizer(pistream &strm)
+ptokenizer::ptokenizer(plib::putf8_reader &strm)
: m_strm(strm), m_lineno(0), m_cur_line(""), m_px(m_cur_line.begin()), m_unget(0), m_string('"')
{
}
@@ -483,7 +483,7 @@ pstring ppreprocessor::process_line(const pstring &line)
}
-postream & ppreprocessor::process_i(pistream &istrm, postream &ostrm)
+void ppreprocessor::process(putf8_reader &istrm, putf8_writer &ostrm)
{
pstring line;
while (istrm.readline(line))
@@ -491,7 +491,6 @@ postream & ppreprocessor::process_i(pistream &istrm, postream &ostrm)
line = process_line(line);
ostrm.writeline(line);
}
- return ostrm;
}
}
diff --git a/src/lib/netlist/plib/pparser.h b/src/lib/netlist/plib/pparser.h
index db88299d85c..5bda079cc63 100644
--- a/src/lib/netlist/plib/pparser.h
+++ b/src/lib/netlist/plib/pparser.h
@@ -22,7 +22,7 @@ class ptokenizer
{
P_PREVENT_COPYING(ptokenizer)
public:
- explicit ptokenizer(pistream &strm);
+ explicit ptokenizer(plib::putf8_reader &strm);
virtual ~ptokenizer();
@@ -126,7 +126,7 @@ private:
bool eof() { return m_strm.eof(); }
- pistream &m_strm;
+ putf8_reader &m_strm;
int m_lineno;
pstring m_cur_line;
@@ -165,22 +165,12 @@ public:
ppreprocessor(std::vector<define_t> *defines = nullptr);
virtual ~ppreprocessor() {}
- template<class ISTR, class OSTR>
- OSTR &process(ISTR &istrm, OSTR &ostrm)
- {
- return dynamic_cast<OSTR &>(process_i(istrm, ostrm));
- }
+ void process(putf8_reader &istrm, putf8_writer &ostrm);
protected:
-
- postream &process_i(pistream &istrm, postream &ostrm);
-
double expr(const plib::pstring_vector_t &sexpr, std::size_t &start, int prio);
-
define_t *get_define(const pstring &name);
-
pstring replace_macros(const pstring &line);
-
virtual void error(const pstring &err);
private:
@@ -190,7 +180,7 @@ private:
std::unordered_map<pstring, define_t> m_defines;
plib::pstring_vector_t m_expr_sep;
- std::uint_least32_t m_ifflag; // 31 if levels
+ std::uint_least64_t m_ifflag; // 31 if levels
int m_level;
int m_lineno;
};
diff --git a/src/lib/netlist/plib/pstream.cpp b/src/lib/netlist/plib/pstream.cpp
index b05d86d7bc5..efbf2aa2374 100644
--- a/src/lib/netlist/plib/pstream.cpp
+++ b/src/lib/netlist/plib/pstream.cpp
@@ -27,28 +27,6 @@ pistream::~pistream()
{
}
-bool pistream::readline(pstring &line)
-{
- char c = 0;
- m_linebuf.clear();
- if (!this->readbyte(c))
- {
- line = "";
- return false;
- }
- while (true)
- {
- if (c == 10)
- break;
- else if (c != 13) /* ignore CR */
- m_linebuf += c;
- if (!this->readbyte(c))
- break;
- }
- line = m_linebuf;
- return true;
-}
-
// -----------------------------------------------------------------------------
// postream: output stream
// -----------------------------------------------------------------------------
@@ -367,9 +345,43 @@ pstream::pos_type pomemstream::vtell()
return m_pos;
}
-pstream_fmt_writer_t::~pstream_fmt_writer_t()
+bool putf8_reader::readline(pstring &line)
{
+ pstring::code_t c = 0;
+ m_linebuf.clear();
+ if (!this->readcode(c))
+ {
+ line = "";
+ return false;
+ }
+ while (true)
+ {
+ if (c == 10)
+ break;
+ else if (c != 13) /* ignore CR */
+ m_linebuf += pstring(c);
+ if (!this->readcode(c))
+ break;
+ }
+ line = m_linebuf;
+ return true;
}
+putf8_fmt_writer::putf8_fmt_writer(postream &strm)
+: pfmt_writer_t()
+, putf8_writer(strm)
+{
+}
+
+putf8_fmt_writer::~putf8_fmt_writer()
+{
+}
+
+void putf8_fmt_writer::vdowrite(const pstring &ls) const
+{
+ write(ls);
+}
+
+
}
diff --git a/src/lib/netlist/plib/pstream.h b/src/lib/netlist/plib/pstream.h
index 6d02c4d1551..b7584a49663 100644
--- a/src/lib/netlist/plib/pstream.h
+++ b/src/lib/netlist/plib/pstream.h
@@ -81,15 +81,6 @@ public:
bool eof() const { return ((flags() & FLAG_EOF) != 0); }
- /* this digests linux & dos/windows text files */
-
- bool readline(pstring &line);
-
- bool readbyte(char &b)
- {
- return (read(&b, 1) == 1);
- }
-
pos_type read(void *buf, const unsigned n)
{
return vread(buf, n);
@@ -99,8 +90,6 @@ protected:
/* read up to n bytes from stream */
virtual pos_type vread(void *buf, const pos_type n) = 0;
-private:
- pstringbuffer m_linebuf;
};
// -----------------------------------------------------------------------------
@@ -115,24 +104,6 @@ public:
explicit postream(unsigned flags) : pstream(flags) {}
virtual ~postream();
- /* this digests linux & dos/windows text files */
-
- void writeline(const pstring &line)
- {
- write(line);
- write(10);
- }
-
- void write(const pstring &text)
- {
- write(text.c_str(), text.blen());
- }
-
- void write(const char c)
- {
- write(&c, 1);
- }
-
void write(const void *buf, const pos_type n)
{
vwrite(buf, n);
@@ -306,6 +277,7 @@ public:
explicit pimemstream(const pomemstream &ostrm);
virtual ~pimemstream();
+ pos_type size() const { return m_len; }
protected:
/* read up to n bytes from stream */
virtual pos_type vread(void *buf, const pos_type n) override;
@@ -335,27 +307,89 @@ private:
};
// -----------------------------------------------------------------------------
-// pstream_fmt_writer_t: writer on top of ostream
+// putf8reader_t: reader on top of istream
// -----------------------------------------------------------------------------
-class pstream_fmt_writer_t : public plib::pfmt_writer_t<>
+/* this digests linux & dos/windows text files */
+
+class putf8_reader
{
- P_PREVENT_COPYING(pstream_fmt_writer_t)
+ P_PREVENT_COPYING(putf8_reader)
public:
+ explicit putf8_reader(pistream &strm) : m_strm(strm) {}
+ virtual ~putf8_reader() {}
- explicit pstream_fmt_writer_t(postream &strm) : m_strm(strm) {}
- virtual ~pstream_fmt_writer_t();
+ bool eof() const { return m_strm.eof(); }
+ bool readline(pstring &line);
-protected:
- virtual void vdowrite(const pstring &ls) const override
+ bool readbyte1(char &b)
+ {
+ return (m_strm.read(&b, 1) == 1);
+ }
+
+ bool readcode(pstring::code_t &c)
+ {
+ char b[4];
+ if (m_strm.read(&b[0], 1) != 1)
+ return false;
+ const unsigned l = pstring::traits::codelen(b);
+ for (unsigned i = 1; i < l; i++)
+ if (m_strm.read(&b[i], 1) != 1)
+ return false;
+ c = pstring::traits::code(b);
+ return true;
+ }
+
+private:
+ pistream &m_strm;
+ pstringbuffer m_linebuf;
+};
+
+// -----------------------------------------------------------------------------
+// putf8writer_t: writer on top of ostream
+// -----------------------------------------------------------------------------
+
+class putf8_writer
+{
+ P_PREVENT_COPYING(putf8_writer)
+public:
+ explicit putf8_writer(postream &strm) : m_strm(strm) {}
+ virtual ~putf8_writer() {}
+
+ void writeline(const pstring &line) const
+ {
+ write(line);
+ write(10);
+ }
+
+ void write(const pstring &text) const
{
- m_strm.write(ls);
+ m_strm.write(text.c_str(), text.blen());
+ }
+
+ void write(const pstring::code_t c) const
+ {
+ write(pstring(c));
}
private:
postream &m_strm;
};
+class putf8_fmt_writer : public pfmt_writer_t<>, public putf8_writer
+{
+ P_PREVENT_COPYING(putf8_fmt_writer)
+public:
+
+ explicit putf8_fmt_writer(postream &strm);
+ virtual ~putf8_fmt_writer();
+
+protected:
+ virtual void vdowrite(const pstring &ls) const override;
+
+private:
+};
+
}
#endif /* PSTREAM_H_ */
diff --git a/src/lib/netlist/plib/pstring.cpp b/src/lib/netlist/plib/pstring.cpp
index 2325e8b08c2..7d676f34c0d 100644
--- a/src/lib/netlist/plib/pstring.cpp
+++ b/src/lib/netlist/plib/pstring.cpp
@@ -426,7 +426,6 @@ void pstring_t<F>::sfree(pstr_t *s)
}
else
plib::pfree_array(reinterpret_cast<char *>(s));
- //_mm_free(((char *)s));
}
}
@@ -477,7 +476,6 @@ void pstring_t<F>::sfree(pstr_t *s)
if (s->m_ref_count == 0 && s != &m_zero)
{
plib::pfree_array(((char *)s));
- //_mm_free(((char *)s));
}
}
diff --git a/src/lib/netlist/plib/pstring.h b/src/lib/netlist/plib/pstring.h
index ae255d4a6cd..999bd10ce6b 100644
--- a/src/lib/netlist/plib/pstring.h
+++ b/src/lib/netlist/plib/pstring.h
@@ -81,6 +81,7 @@ public:
pstring_t(const pstring_t &string) : m_ptr(&m_zero) { init(string); }
pstring_t(pstring_t &&string) : m_ptr(string.m_ptr) { string.m_ptr = nullptr; }
+ explicit pstring_t(code_t code) : m_ptr(&m_zero) { pstring_t t; t+= code; init(t); }
// assignment operators
pstring_t &operator=(const pstring_t &string) { pcopy(string); return *this; }
diff --git a/src/lib/netlist/prg/nltool.cpp b/src/lib/netlist/prg/nltool.cpp
index f039cf44ac4..a6513f260b9 100644
--- a/src/lib/netlist/prg/nltool.cpp
+++ b/src/lib/netlist/prg/nltool.cpp
@@ -77,8 +77,8 @@ public:
static plib::pstdout pout_strm;
static plib::pstderr perr_strm;
-static plib::pstream_fmt_writer_t pout(pout_strm);
-static plib::pstream_fmt_writer_t perr(perr_strm);
+static plib::putf8_fmt_writer pout(pout_strm);
+static plib::putf8_fmt_writer perr(perr_strm);
static NETLIST_START(dummy)
/* Standard stuff */
@@ -244,8 +244,9 @@ static std::vector<input_t> read_input(const netlist::setup_t &setup, pstring fn
if (fname != "")
{
plib::pifilestream f(fname);
+ plib::putf8_reader r(f);
pstring l;
- while (f.readline(l))
+ while (r.readline(l))
{
if (l != "")
{
@@ -492,7 +493,7 @@ static void listdevices(tool_options_t &opts)
-------------------------------------------------*/
#if 0
-static const char *pmf_verbose[] =
+static const pstring pmf_verbose[] =
{
"NL_PMF_TYPE_VIRTUAL",
"NL_PMF_TYPE_GNUC_PMF",
@@ -585,7 +586,7 @@ int main(int argc, char *argv[])
result = c.result();
}
/* present result */
- pout_strm.write(result);
+ pout.write(result);
}
else
{
diff --git a/src/lib/netlist/prg/nlwav.cpp b/src/lib/netlist/prg/nlwav.cpp
index 44adf2b3508..5a3fdbbfad0 100644
--- a/src/lib/netlist/prg/nlwav.cpp
+++ b/src/lib/netlist/prg/nlwav.cpp
@@ -35,8 +35,8 @@ plib::pstdin pin_strm;
plib::pstdout pout_strm;
plib::pstderr perr_strm;
-plib::pstream_fmt_writer_t pout(pout_strm);
-plib::pstream_fmt_writer_t perr(perr_strm);
+plib::putf8_fmt_writer pout(pout_strm);
+plib::putf8_fmt_writer perr(perr_strm);
nlwav_options_t opts;
@@ -145,6 +145,7 @@ static void convert()
{
plib::postream *fo = (opts.opt_out() == "-" ? &pout_strm : new plib::pofilestream(opts.opt_out()));
plib::pistream *fin = (opts.opt_inp() == "-" ? &pin_strm : new plib::pifilestream(opts.opt_inp()));
+ plib::putf8_reader reader(*fin);
wav_t *wo = new wav_t(*fo, 48000);
double dt = 1.0 / static_cast<double>(wo->sample_rate());
@@ -162,7 +163,7 @@ static void convert()
//short sample = 0;
pstring line;
- while(fin->readline(line))
+ while(reader.readline(line))
{
#if 1
double t = 0.0; double v = 0.0;
@@ -227,7 +228,7 @@ static void convert()
}
}
-static void usage(plib::pstream_fmt_writer_t &fw)
+static void usage(plib::putf8_fmt_writer &fw)
{
fw("{}\n", opts.help("Convert netlist log files into wav files.\n",
"nltool [options]").c_str());
diff --git a/src/lib/netlist/solver/nld_matrix_solver.h b/src/lib/netlist/solver/nld_matrix_solver.h
index fb3b044ee47..fc7ab7fcbdb 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.h
+++ b/src/lib/netlist/solver/nld_matrix_solver.h
@@ -135,7 +135,7 @@ public:
virtual void log_stats();
- virtual void create_solver_code(plib::postream &strm)
+ virtual void create_solver_code(plib::putf8_fmt_writer &strm)
{
strm.writeline(plib::pfmt("/* {1} doesn't support static compile */"));
}
diff --git a/src/lib/netlist/solver/nld_ms_gcr.h b/src/lib/netlist/solver/nld_ms_gcr.h
index 80a68604a56..853cc34d39c 100644
--- a/src/lib/netlist/solver/nld_ms_gcr.h
+++ b/src/lib/netlist/solver/nld_ms_gcr.h
@@ -52,18 +52,19 @@ public:
virtual void vsetup(analog_net_t::list_t &nets) override;
virtual unsigned vsolve_non_dynamic(const bool newton_raphson) override;
- virtual void create_solver_code(plib::postream &strm) override;
+ virtual void create_solver_code(plib::putf8_fmt_writer &strm) override;
private:
- void csc_private(plib::postream &strm);
+ void csc_private(plib::putf8_fmt_writer &strm);
using extsolver = void (*)(double * RESTRICT m_A, double * RESTRICT RHS);
pstring static_compile_name()
{
plib::postringstream t;
- csc_private(t);
+ plib::putf8_fmt_writer w(t);
+ csc_private(w);
std::hash<pstring> h;
return plib::pfmt("nl_gcr_{1:x}_{2}")(h( t.str() ))(mat.nz_num);
@@ -185,7 +186,7 @@ void matrix_solver_GCR_t<m_N, storage_N>::vsetup(analog_net_t::list_t &nets)
}
template <unsigned m_N, unsigned storage_N>
-void matrix_solver_GCR_t<m_N, storage_N>::csc_private(plib::postream &strm)
+void matrix_solver_GCR_t<m_N, storage_N>::csc_private(plib::putf8_fmt_writer &strm)
{
const unsigned iN = N();
for (unsigned i = 0; i < iN - 1; i++)
@@ -197,7 +198,7 @@ void matrix_solver_GCR_t<m_N, storage_N>::csc_private(plib::postream &strm)
unsigned pi = mat.diag[i];
//const nl_double f = 1.0 / m_A[pi++];
- strm.writeline(plib::pfmt("const double f{1} = 1.0 / m_A[{2}];")(i)(pi));
+ strm("const double f{1} = 1.0 / m_A[{2}];", i,pi);
pi++;
const unsigned piie = mat.ia[i+1];
@@ -210,7 +211,7 @@ void matrix_solver_GCR_t<m_N, storage_N>::csc_private(plib::postream &strm)
pj++;
//const nl_double f1 = - m_A[pj++] * f;
- strm.writeline(plib::pfmt("\tconst double f{1}_{2} = -f{3} * m_A[{4}];")(i)(j)(i)(pj));
+ strm("\tconst double f{1}_{2} = -f{3} * m_A[{4}];", i, j, i, pj);
pj++;
// subtract row i from j */
@@ -219,18 +220,18 @@ void matrix_solver_GCR_t<m_N, storage_N>::csc_private(plib::postream &strm)
while (mat.ja[pj] < mat.ja[pii])
pj++;
//m_A[pj++] += m_A[pii++] * f1;
- strm.writeline(plib::pfmt("\tm_A[{1}] += m_A[{2}] * f{3}_{4};")(pj)(pii)(i)(j));
+ strm("\tm_A[{1}] += m_A[{2}] * f{3}_{4};", pj, pii, i, j);
pj++; pii++;
}
//RHS[j] += f1 * RHS[i];
- strm.writeline(plib::pfmt("\tRHS[{1}] += f{2}_{3} * RHS[{4}];")(j)(i)(j)(i));
+ strm("\tRHS[{1}] += f{2}_{3} * RHS[{4}];", j, i, j, i);
}
}
}
}
template <unsigned m_N, unsigned storage_N>
-void matrix_solver_GCR_t<m_N, storage_N>::create_solver_code(plib::postream &strm)
+void matrix_solver_GCR_t<m_N, storage_N>::create_solver_code(plib::putf8_fmt_writer &strm)
{
//const unsigned iN = N();
diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp
index 12297dbd237..629c7c0173e 100644
--- a/src/lib/netlist/solver/nld_solver.cpp
+++ b/src/lib/netlist/solver/nld_solver.cpp
@@ -398,8 +398,9 @@ void NETLIB_NAME(solver)::post_start()
void NETLIB_NAME(solver)::create_solver_code(plib::postream &strm)
{
+ plib::putf8_fmt_writer w(strm);
for (auto & s : m_mat_solvers)
- s->create_solver_code(strm);
+ s->create_solver_code(w);
}
NETLIB_DEVICE_IMPL(solver)
diff --git a/src/lib/netlist/tools/nl_convert.cpp b/src/lib/netlist/tools/nl_convert.cpp
index 9ab0384c0e7..59450335926 100644
--- a/src/lib/netlist/tools/nl_convert.cpp
+++ b/src/lib/netlist/tools/nl_convert.cpp
@@ -18,7 +18,7 @@
* define a model param on core device
*/
/* Format: external name,netlist device,model */
-static const char *s_lib_map =
+static const pstring s_lib_map =
"SN74LS00D, TTL_7400_DIP, 74LSXX\n"
"SN74LS04D, TTL_7404_DIP, 74LSXX\n"
"SN74ALS08D, TTL_7408_DIP, 74ALSXX\n"
@@ -44,9 +44,10 @@ using lib_map_t = std::unordered_map<pstring, lib_map_entry>;
static lib_map_t read_lib_map(const pstring lm)
{
plib::pistringstream istrm(lm);
+ plib::putf8_reader reader(istrm);
lib_map_t m;
pstring line;
- while (istrm.readline(line))
+ while (reader.readline(line))
{
plib::pstring_vector_t split(line, ",");
m[split[0].trim()] = { split[1].trim(), split[2].trim() };
@@ -191,7 +192,7 @@ const pstring nl_convert_base_t::get_nl_val(const double val)
break;
i++;
}
- return plib::pfmt(m_units[i].m_func)(val / m_units[i].m_mult);
+ return plib::pfmt(pstring(m_units[i].m_func, pstring::UTF8))(val / m_units[i].m_mult);
}
}
double nl_convert_base_t::get_sp_unit(const pstring &unit)
@@ -401,7 +402,7 @@ void nl_convert_spice_t::process_line(const pstring &line)
Eagle converter
-------------------------------------------------*/
-nl_convert_eagle_t::tokenizer::tokenizer(nl_convert_eagle_t &convert, plib::pistream &strm)
+nl_convert_eagle_t::tokenizer::tokenizer(nl_convert_eagle_t &convert, plib::putf8_reader &strm)
: plib::ptokenizer(strm)
, m_convert(convert)
{
@@ -429,7 +430,8 @@ void nl_convert_eagle_t::tokenizer::verror(const pstring &msg, int line_num, con
void nl_convert_eagle_t::convert(const pstring &contents)
{
plib::pistringstream istrm(contents);
- tokenizer tok(*this, istrm);
+ plib::putf8_reader reader(istrm);
+ tokenizer tok(*this, reader);
out("NETLIST_START(dummy)\n");
add_term("GND", "GND");
@@ -537,7 +539,7 @@ void nl_convert_eagle_t::convert(const pstring &contents)
RINF converter
-------------------------------------------------*/
-nl_convert_rinf_t::tokenizer::tokenizer(nl_convert_rinf_t &convert, plib::pistream &strm)
+nl_convert_rinf_t::tokenizer::tokenizer(nl_convert_rinf_t &convert, plib::putf8_reader &strm)
: plib::ptokenizer(strm)
, m_convert(convert)
{
@@ -577,8 +579,9 @@ void nl_convert_rinf_t::tokenizer::verror(const pstring &msg, int line_num, cons
void nl_convert_rinf_t::convert(const pstring &contents)
{
plib::pistringstream istrm(contents);
- tokenizer tok(*this, istrm);
- auto lm = read_lib_map(pstring(s_lib_map, pstring::UTF8));
+ plib::putf8_reader reader(istrm);
+ tokenizer tok(*this, reader);
+ auto lm = read_lib_map(s_lib_map);
out("NETLIST_START(dummy)\n");
add_term("GND", "GND");
diff --git a/src/lib/netlist/tools/nl_convert.h b/src/lib/netlist/tools/nl_convert.h
index 44ac8dee19e..66aefaea038 100644
--- a/src/lib/netlist/tools/nl_convert.h
+++ b/src/lib/netlist/tools/nl_convert.h
@@ -49,7 +49,7 @@ protected:
double get_sp_val(const pstring &sin);
- plib::pstream_fmt_writer_t out;
+ plib::putf8_fmt_writer out;
private:
struct net_t
@@ -166,7 +166,7 @@ public:
class tokenizer : public plib::ptokenizer
{
public:
- tokenizer(nl_convert_eagle_t &convert, plib::pistream &strm);
+ tokenizer(nl_convert_eagle_t &convert, plib::putf8_reader &strm);
token_id_t m_tok_ADD;
token_id_t m_tok_VALUE;
@@ -202,7 +202,7 @@ public:
class tokenizer : public plib::ptokenizer
{
public:
- tokenizer(nl_convert_rinf_t &convert, plib::pistream &strm);
+ tokenizer(nl_convert_rinf_t &convert, plib::putf8_reader &strm);
token_id_t m_tok_HEA;
token_id_t m_tok_APP;