summaryrefslogtreecommitdiffstats
path: root/src/lib/netlist/plib/pfunction.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/plib/pfunction.h')
-rw-r--r--src/lib/netlist/plib/pfunction.h25
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);