diff options
author | couriersud <couriersud@gmx.org> | 2017-01-10 23:57:51 +0100 |
---|---|---|
committer | couriersud <couriersud@gmx.org> | 2017-01-12 23:20:23 +0100 |
commit | b1c358678964630c1282953c1a80407997eae203 (patch) | |
tree | a5532543425133c88ddadb6a077afda6d09be5d2 /src/lib/netlist/devices/nlid_system.h | |
parent | c8c7e9a770a525a63a0f40bccdf0489966cfdc25 (diff) |
Improve readability and remove some trampolines. (nw)
Diffstat (limited to 'src/lib/netlist/devices/nlid_system.h')
-rw-r--r-- | src/lib/netlist/devices/nlid_system.h | 40 |
1 files changed, 4 insertions, 36 deletions
diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h index 929394651d8..f42f58a7ff9 100644 --- a/src/lib/netlist/devices/nlid_system.h +++ b/src/lib/netlist/devices/nlid_system.h @@ -175,7 +175,7 @@ namespace netlist /* make sure we get the family first */ , m_FAMILY(*this, "FAMILY", "FAMILY(TYPE=TTL)") { - set_logic_family(netlist().setup().family_from_model(m_FAMILY())); + set_logic_family(netlist().family_from_model(m_FAMILY())); } NETLIB_UPDATE_AFTER_PARAM_CHANGE() @@ -311,41 +311,7 @@ namespace netlist { for (int i=0; i < m_N(); i++) m_I.push_back(plib::make_unique<analog_input_t>(*this, plib::pfmt("A{1}")(i))); - - plib::pstring_vector_t cmds(m_func(), " "); - m_precompiled.clear(); - - for (std::size_t i=0; i < cmds.size(); i++) - { - pstring cmd = cmds[i]; - rpn_inst rc; - if (cmd == "+") - rc.m_cmd = ADD; - else if (cmd == "-") - rc.m_cmd = SUB; - else if (cmd == "*") - rc.m_cmd = MULT; - else if (cmd == "/") - rc.m_cmd = DIV; - else if (cmd == "pow") - rc.m_cmd = POW; - else if (cmd.startsWith("A")) - { - rc.m_cmd = PUSH_INPUT; - rc.m_param = cmd.substr(1).as_long(); - } - else - { - bool err = false; - rc.m_cmd = PUSH_CONST; - rc.m_param = cmd.as_double(&err); - if (err) - netlist().log().fatal("nld_function: unknown/misformatted token <{1}> in <{2}>", cmd, m_func()); - } - m_precompiled.push_back(rc); - } - - + compile(); } protected: @@ -373,6 +339,8 @@ namespace netlist nl_double m_param; }; + void compile(); + param_int_t m_N; param_str_t m_func; analog_output_t m_Q; |