diff options
Diffstat (limited to 'src/lib/netlist/plib/pfunction.h')
-rw-r--r-- | src/lib/netlist/plib/pfunction.h | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/lib/netlist/plib/pfunction.h b/src/lib/netlist/plib/pfunction.h index 0178e81c04e..9c2450d427c 100644 --- a/src/lib/netlist/plib/pfunction.h +++ b/src/lib/netlist/plib/pfunction.h @@ -58,10 +58,32 @@ namespace plib { { struct rpn_inst { - rpn_inst() : m_cmd(ADD) + constexpr rpn_inst() : m_cmd(ADD) { m_param.val = plib::constants<NT>::zero(); } + constexpr rpn_inst(rpn_cmd cmd, std::size_t index = 0) + : m_cmd(cmd) + { + m_param.index = index; + } + constexpr rpn_inst(NT v) : m_cmd(PUSH_CONST) + { + m_param.val = v; + } + constexpr const rpn_cmd &cmd() const noexcept + { + return m_cmd; + } + constexpr const NT &value() const noexcept + { + return m_param.val; // NOLINT + } + constexpr const std::size_t &index() const noexcept + { + return m_param.index; // NOLINT + } + private: rpn_cmd m_cmd; union { @@ -138,6 +160,7 @@ namespace plib { private: + void compress(); void compile_postfix(const inputs_container &inputs, const std::vector<pstring> &cmds, const pstring &expr); |