From 6d2354264a7d92e1a1d9163eec9e2c9df239b159 Mon Sep 17 00:00:00 2001 From: couriersud Date: Thu, 26 Jan 2017 21:22:59 +0100 Subject: [PATCH] Do not derive other classes from std::vector. More cleanup. (nw) --- src/lib/netlist/analog/nld_opamps.h | 1 - src/lib/netlist/devices/nld_truthtable.cpp | 8 ++++---- src/lib/netlist/devices/nld_truthtable.h | 8 +++----- src/lib/netlist/devices/nlid_cmos.h | 2 +- src/lib/netlist/devices/nlid_proxy.h | 2 -- src/lib/netlist/devices/nlid_system.h | 10 ++-------- src/lib/netlist/nl_parser.cpp | 4 ++-- src/lib/netlist/nl_setup.cpp | 8 ++++---- src/lib/netlist/plib/pfunction.cpp | 6 +++--- src/lib/netlist/plib/poptions.cpp | 16 ++++++++-------- src/lib/netlist/plib/poptions.h | 22 ++++++++++++---------- src/lib/netlist/plib/pparser.cpp | 8 ++++---- src/lib/netlist/plib/putil.cpp | 22 +++++++++++++--------- src/lib/netlist/plib/putil.h | 9 ++------- src/lib/netlist/prg/nltool.cpp | 4 ++-- src/lib/netlist/tools/nl_convert.cpp | 8 ++++---- 16 files changed, 64 insertions(+), 74 deletions(-) diff --git a/src/lib/netlist/analog/nld_opamps.h b/src/lib/netlist/analog/nld_opamps.h index eb74eaa5cb9..32843574ffa 100644 --- a/src/lib/netlist/analog/nld_opamps.h +++ b/src/lib/netlist/analog/nld_opamps.h @@ -11,7 +11,6 @@ #define NLD_OPAMPS_H_ #include "nl_base.h" -#include "nl_setup.h" #include "nld_twoterm.h" #include "nld_fourterm.h" diff --git a/src/lib/netlist/devices/nld_truthtable.cpp b/src/lib/netlist/devices/nld_truthtable.cpp index f59c379290b..bf5c49790a2 100644 --- a/src/lib/netlist/devices/nld_truthtable.cpp +++ b/src/lib/netlist/devices/nld_truthtable.cpp @@ -186,14 +186,14 @@ void truthtable_desc_t::setup(const std::vector &truthtable, uint_least while (!ttline.equals("")) { - plib::pstring_vector_t io(ttline,"|"); + std::vector io(plib::psplit(ttline,"|")); // checks nl_assert_always(io.size() == 3, "io.count mismatch"); - plib::pstring_vector_t inout(io[0], ","); + std::vector inout(plib::psplit(io[0], ",")); nl_assert_always(inout.size() == m_num_bits, "number of bits not matching"); - plib::pstring_vector_t out(io[1], ","); + std::vector out(plib::psplit(io[1], ",")); nl_assert_always(out.size() == m_NO, "output count not matching"); - plib::pstring_vector_t times(io[2], ","); + std::vector times(plib::psplit(io[2], ",")); nl_assert_always(times.size() == m_NO, "timing count not matching"); uint_least64_t val = 0; diff --git a/src/lib/netlist/devices/nld_truthtable.h b/src/lib/netlist/devices/nld_truthtable.h index 9e004c0f098..3245eb31864 100644 --- a/src/lib/netlist/devices/nld_truthtable.h +++ b/src/lib/netlist/devices/nld_truthtable.h @@ -11,8 +11,6 @@ #define NLD_TRUTHTABLE_H_ #include "nl_setup.h" -#include "nl_factory.h" -#include "plib/plists.h" #include "plib/putil.h" #define NETLIB_TRUTHTABLE(cname, nIN, nOUT) \ @@ -191,12 +189,12 @@ namespace netlist pstring header = m_desc[0]; - plib::pstring_vector_t io(header,"|"); + std::vector io(plib::psplit(header,"|")); // checks nl_assert_always(io.size() == 2, "too many '|'"); - plib::pstring_vector_t inout(io[0], ","); + std::vector inout(plib::psplit(io[0], ",")); nl_assert_always(inout.size() == m_num_bits, "bitcount wrong"); - plib::pstring_vector_t out(io[1], ","); + std::vector out(plib::psplit(io[1], ",")); nl_assert_always(out.size() == m_NO, "output count wrong"); for (std::size_t i=0; i < m_NI; i++) diff --git a/src/lib/netlist/devices/nlid_cmos.h b/src/lib/netlist/devices/nlid_cmos.h index 4770eac2164..f22e12a3016 100644 --- a/src/lib/netlist/devices/nlid_cmos.h +++ b/src/lib/netlist/devices/nlid_cmos.h @@ -8,7 +8,7 @@ #ifndef NLID_CMOS_H_ #define NLID_CMOS_H_ -#include "nl_base.h" +#include "nl_setup.h" namespace netlist { diff --git a/src/lib/netlist/devices/nlid_proxy.h b/src/lib/netlist/devices/nlid_proxy.h index 9ba4fd69e3f..7d815d3dbda 100644 --- a/src/lib/netlist/devices/nlid_proxy.h +++ b/src/lib/netlist/devices/nlid_proxy.h @@ -12,8 +12,6 @@ #define NLID_PROXY_H_ #include "nl_setup.h" -#include "nl_base.h" -#include "nl_factory.h" #include "analog/nld_twoterm.h" namespace netlist diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h index c1396235ef4..e9719548bec 100644 --- a/src/lib/netlist/devices/nlid_system.h +++ b/src/lib/netlist/devices/nlid_system.h @@ -11,14 +11,8 @@ #ifndef NLID_SYSTEM_H_ #define NLID_SYSTEM_H_ -#include "analog/nld_twoterm.h" -#include "nl_base.h" -#include "nl_time.h" #include "nl_setup.h" -#include "plib/palloc.h" -#include "plib/pfmtlog.h" -#include "plib/pfunction.h" -#include "plib/pstring.h" +#include "analog/nld_twoterm.h" #include "plib/putil.h" namespace netlist @@ -129,7 +123,7 @@ namespace netlist connect(m_feedback, m_Q); { netlist_time base = netlist_time::from_double(1.0 / (m_freq()*2.0)); - plib::pstring_vector_t pat(m_pattern(),","); + std::vector pat(plib::psplit(m_pattern(),",")); m_off = netlist_time::from_double(m_offset()); unsigned long pati[256]; diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp index 124c4d5cd50..4f4d4cd5d70 100644 --- a/src/lib/netlist/nl_parser.cpp +++ b/src/lib/netlist/nl_parser.cpp @@ -293,7 +293,7 @@ void parser_t::net_c() void parser_t::dippins() { - plib::pstring_vector_t pins; + std::vector pins; pins.push_back(get_identifier()); require_token(m_tok_comma); @@ -350,7 +350,7 @@ void parser_t::netdev_hint() void parser_t::device(const pstring &dev_type) { factory::element_t *f = m_setup.factory().factory_by_name(dev_type); - auto paramlist = plib::pstring_vector_t(f->param_desc(), ","); + auto paramlist = plib::psplit(f->param_desc(), ","); pstring devname = get_identifier(); diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index 842b8467a46..5b176f1d266 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -121,7 +121,7 @@ void setup_t::register_alias(const pstring &alias, const pstring &out) void setup_t::register_dippins_arr(const pstring &terms) { - plib::pstring_vector_t list(terms,", "); + std::vector list(plib::psplit(terms,", ")); if (list.size() == 0 || (list.size() % 2) == 1) log().fatal(MF_1_DIP_PINS_MUST_BE_AN_EQUAL_NUMBER_OF_PINS_1, build_fqn("")); @@ -202,7 +202,7 @@ void setup_t::register_term(detail::core_terminal_t &term) void setup_t::register_link_arr(const pstring &terms) { - plib::pstring_vector_t list(terms,", "); + std::vector list(plib::psplit(terms,", ")); if (list.size() < 2) log().fatal(MF_2_NET_C_NEEDS_AT_LEAST_2_TERMINAL); for (std::size_t i = 1; i < list.size(); i++) @@ -769,7 +769,7 @@ void setup_t::start_devices() if (env != "") { log().debug("Creating dynamic logs ..."); - plib::pstring_vector_t loglist(env, ":"); + std::vector loglist(plib::psplit(env, ":")); for (pstring ll : loglist) { pstring name = "log_" + ll; @@ -840,7 +840,7 @@ void setup_t::model_parse(const pstring &model_in, model_map_t &map) // FIMXE: Not optimal remainder = remainder.left(remainder.begin() + (remainder.len() - 1)); - plib::pstring_vector_t pairs(remainder," ", true); + std::vector pairs(plib::psplit(remainder," ", true)); for (pstring &pe : pairs) { auto pose = pe.find("="); diff --git a/src/lib/netlist/plib/pfunction.cpp b/src/lib/netlist/plib/pfunction.cpp index 4736d047bbd..b457c940021 100644 --- a/src/lib/netlist/plib/pfunction.cpp +++ b/src/lib/netlist/plib/pfunction.cpp @@ -24,7 +24,7 @@ void pfunction::compile(const std::vector &inputs, const pstring expr) void pfunction::compile_postfix(const std::vector &inputs, const pstring expr) { - plib::pstring_vector_t cmds(expr, " "); + std::vector cmds(plib::psplit(expr, " ")); compile_postfix(inputs, cmds, expr); } @@ -110,9 +110,9 @@ void pfunction::compile_infix(const std::vector &inputs, const pstring { // Shunting-yard infix parsing std::vector sep = {"(", ")", ",", "*", "/", "+", "-", "^"}; - plib::pstring_vector_t sexpr(expr.replace(" ",""), sep); + std::vector sexpr(plib::psplit(expr.replace(" ",""), sep)); std::stack opstk; - plib::pstring_vector_t postfix; + std::vector postfix; //printf("dbg: %s\n", expr.c_str()); for (unsigned i = 0; i < sexpr.size(); i++) diff --git a/src/lib/netlist/plib/poptions.cpp b/src/lib/netlist/plib/poptions.cpp index 5c67626fff6..7616c5993d0 100644 --- a/src/lib/netlist/plib/poptions.cpp +++ b/src/lib/netlist/plib/poptions.cpp @@ -39,13 +39,13 @@ namespace plib { { } - int option_str::parse(pstring argument) + int option_str::parse(const pstring &argument) { m_val = argument; return 0; } - int option_str_limit::parse(pstring argument) + int option_str_limit::parse(const pstring &argument) { if (plib::container::contains(m_limit, argument)) { @@ -56,20 +56,20 @@ namespace plib { return 1; } - int option_bool::parse(pstring argument) + int option_bool::parse(const pstring &argument) { m_val = true; return 0; } - int option_double::parse(pstring argument) + int option_double::parse(const pstring &argument) { bool err = false; m_val = argument.as_double(&err); return (err ? 1 : 0); } - int option_vec::parse(pstring argument) + int option_vec::parse(const pstring &argument) { bool err = false; m_val.push_back(argument); @@ -113,7 +113,7 @@ namespace plib { if (arg.startsWith("--")) { - auto v = pstring_vector_t(arg.substr(2),"="); + auto v = psplit(arg.substr(2),"="); opt = getopt_long(v[0]); has_equal_arg = (v.size() > 1); if (has_equal_arg) @@ -166,13 +166,13 @@ namespace plib { pstring options::split_paragraphs(pstring text, unsigned width, unsigned indent, unsigned firstline_indent) { - auto paragraphs = pstring_vector_t(text,"\n"); + auto paragraphs = psplit(text,"\n"); pstring ret(""); for (auto &p : paragraphs) { pstring line = pstring("").rpad(" ", firstline_indent); - for (auto &s : pstring_vector_t(p, " ")) + for (auto &s : psplit(p, " ")) { if (line.len() + s.len() > width) { diff --git a/src/lib/netlist/plib/poptions.h b/src/lib/netlist/plib/poptions.h index b5f18c98a92..253fcbf9b34 100644 --- a/src/lib/netlist/plib/poptions.h +++ b/src/lib/netlist/plib/poptions.h @@ -65,7 +65,7 @@ public: /* no_argument options will be called with "" argument */ - virtual int parse(pstring argument) = 0; + virtual int parse(const pstring &argument) = 0; pstring short_opt() { return m_short; } pstring long_opt() { return m_long; } @@ -83,7 +83,7 @@ public: : option(parent, ashort, along, help, true), m_val(defval) {} - virtual int parse(pstring argument) override; + virtual int parse(const pstring &argument) override; pstring operator ()() { return m_val; } private: @@ -94,17 +94,19 @@ class option_str_limit : public option { public: option_str_limit(options &parent, pstring ashort, pstring along, pstring defval, pstring limit, pstring help) - : option(parent, ashort, along, help, true), m_val(defval), m_limit(limit, ":") - {} + : option(parent, ashort, along, help, true), m_val(defval) + { + m_limit = plib::psplit(limit, ":"); + } - virtual int parse(pstring argument) override; + virtual int parse(const pstring &argument) override; pstring operator ()() { return m_val; } - const plib::pstring_vector_t &limit() { return m_limit; } + const std::vector &limit() { return m_limit; } private: pstring m_val; - plib::pstring_vector_t m_limit; + std::vector m_limit; }; class option_bool : public option @@ -114,7 +116,7 @@ public: : option(parent, ashort, along, help, false), m_val(false) {} - virtual int parse(pstring argument) override; + virtual int parse(const pstring &argument) override; bool operator ()() { return m_val; } private: @@ -128,7 +130,7 @@ public: : option(parent, ashort, along, help, true), m_val(defval) {} - virtual int parse(pstring argument) override; + virtual int parse(const pstring &argument) override; double operator ()() { return m_val; } private: @@ -142,7 +144,7 @@ public: : option(parent, ashort, along, help, true) {} - virtual int parse(pstring argument) override; + virtual int parse(const pstring &argument) override; std::vector operator ()() { return m_val; } private: diff --git a/src/lib/netlist/plib/pparser.cpp b/src/lib/netlist/plib/pparser.cpp index 583e9e9e20c..6604c07dcb7 100644 --- a/src/lib/netlist/plib/pparser.cpp +++ b/src/lib/netlist/plib/pparser.cpp @@ -384,7 +384,7 @@ ppreprocessor::define_t *ppreprocessor::get_define(const pstring &name) pstring ppreprocessor::replace_macros(const pstring &line) { - pstring_vector_t elems(line, m_expr_sep); + std::vector elems(psplit(line, m_expr_sep)); pstringbuffer ret = ""; for (auto & elem : elems) { @@ -397,7 +397,7 @@ pstring ppreprocessor::replace_macros(const pstring &line) return ret; } -static pstring catremainder(const pstring_vector_t &elems, std::size_t start, pstring sep) +static pstring catremainder(const std::vector &elems, std::size_t start, pstring sep) { pstringbuffer ret = ""; for (auto & elem : elems) @@ -416,13 +416,13 @@ pstring ppreprocessor::process_line(const pstring &line) // FIXME ... revise and extend macro handling if (lt.startsWith("#")) { - pstring_vector_t lti(lt, " ", true); + std::vector lti(psplit(lt, " ", true)); if (lti[0].equals("#if")) { m_level++; std::size_t start = 0; lt = replace_macros(lt); - pstring_vector_t t(lt.substr(3).replace(" ",""), m_expr_sep); + std::vector t(psplit(lt.substr(3).replace(" ",""), m_expr_sep)); int val = static_cast(expr(t, start, 0)); if (val == 0) m_ifflag |= (1 << m_level); diff --git a/src/lib/netlist/plib/putil.cpp b/src/lib/netlist/plib/putil.cpp index 7007c818384..87ac06b3f75 100644 --- a/src/lib/netlist/plib/putil.cpp +++ b/src/lib/netlist/plib/putil.cpp @@ -40,9 +40,10 @@ namespace plib } } - pstring_vector_t::pstring_vector_t(const pstring &str, const pstring &onstr, bool ignore_empty) - : std::vector() + std::vector psplit(const pstring &str, const pstring &onstr, bool ignore_empty) { + std::vector ret; + pstring::iterator p = str.begin(); pstring::iterator pn = str.find(onstr, p); @@ -50,7 +51,7 @@ namespace plib { pstring t = str.substr(p, pn); if (!ignore_empty || t.len() != 0) - this->push_back(t); + ret.push_back(t); p = pn + onstr.len(); pn = str.find(onstr, p); } @@ -58,14 +59,15 @@ namespace plib { pstring t = str.substr(p, str.end()); if (!ignore_empty || t.len() != 0) - this->push_back(t); + ret.push_back(t); } + return ret; } - pstring_vector_t::pstring_vector_t(const pstring &str, const std::vector &onstrl) - : std::vector() + std::vector psplit(const pstring &str, const std::vector &onstrl) { pstring col = ""; + std::vector ret; unsigned i = 0; while (i(-1)) { if (col != "") - this->push_back(col); + ret.push_back(col); col = ""; - this->push_back(onstrl[p]); + ret.push_back(onstrl[p]); i += onstrl[p].blen(); } else @@ -96,7 +98,9 @@ namespace plib } } if (col != "") - this->push_back(col); + ret.push_back(col); + + return ret; } diff --git a/src/lib/netlist/plib/putil.h b/src/lib/netlist/plib/putil.h index 97f3de1a626..c0114212b18 100644 --- a/src/lib/netlist/plib/putil.h +++ b/src/lib/netlist/plib/putil.h @@ -66,13 +66,8 @@ namespace plib // string list // ---------------------------------------------------------------------------------------- - class pstring_vector_t : public std::vector - { - public: - pstring_vector_t() : std::vector() { } - pstring_vector_t(const pstring &str, const pstring &onstr, bool ignore_empty = false); - pstring_vector_t(const pstring &str, const std::vector &onstrl); - }; + std::vector psplit(const pstring &str, const pstring &onstr, bool ignore_empty = false); + std::vector psplit(const pstring &str, const std::vector &onstrl); } diff --git a/src/lib/netlist/prg/nltool.cpp b/src/lib/netlist/prg/nltool.cpp index 84aa94a05a9..9216983e828 100644 --- a/src/lib/netlist/prg/nltool.cpp +++ b/src/lib/netlist/prg/nltool.cpp @@ -375,7 +375,7 @@ static void create_header(tool_options_t &opts) pout("{1}\n", pstring("// Source: ").cat(e->sourcefile().replace("../",""))); pout("{1}\n", pstring("// ").rpad("-", 72)); } - auto v = plib::pstring_vector_t(e->param_desc(), ","); + auto v = plib::psplit(e->param_desc(), ","); pstring vs; for (auto s : v) vs += ", p" + s.replace("+","").replace(".","_"); @@ -464,7 +464,7 @@ static void listdevices(tool_options_t &opts) } out += "," + f->param_desc(); - for (auto p : plib::pstring_vector_t(f->param_desc(),",") ) + for (auto p : plib::psplit(f->param_desc(),",") ) { if (p.startsWith("+")) { diff --git a/src/lib/netlist/tools/nl_convert.cpp b/src/lib/netlist/tools/nl_convert.cpp index 8a1d0b9a699..5b0bfd267c3 100644 --- a/src/lib/netlist/tools/nl_convert.cpp +++ b/src/lib/netlist/tools/nl_convert.cpp @@ -48,7 +48,7 @@ static lib_map_t read_lib_map(const pstring lm) pstring line; while (reader.readline(line)) { - plib::pstring_vector_t split(line, ","); + std::vector split(plib::psplit(line, ",")); m[split[0].trim()] = { split[1].trim(), split[2].trim() }; } return m; @@ -242,7 +242,7 @@ nl_convert_base_t::unit_t nl_convert_base_t::m_units[] = { void nl_convert_spice_t::convert(const pstring &contents) { - plib::pstring_vector_t spnl(contents, "\n"); + std::vector spnl(plib::psplit(contents, "\n")); // Add gnd net @@ -274,7 +274,7 @@ void nl_convert_spice_t::process_line(const pstring &line) { if (line != "") { - plib::pstring_vector_t tt(line, " ", true); + std::vector tt(plib::psplit(line, " ", true)); double val = 0.0; switch (tt[0].code_at(0)) { @@ -313,7 +313,7 @@ void nl_convert_spice_t::process_line(const pstring &line) model = tt[5]; else model = tt[4]; - plib::pstring_vector_t m(model,"{"); + std::vector m(plib::psplit(model,"{")); if (m.size() == 2) { if (m[1].len() != 4)