summaryrefslogtreecommitdiffstatshomepage
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.h66
1 files changed, 39 insertions, 27 deletions
diff --git a/src/lib/netlist/plib/pfunction.h b/src/lib/netlist/plib/pfunction.h
index 7f754d3cfad..be6d6e64f9e 100644
--- a/src/lib/netlist/plib/pfunction.h
+++ b/src/lib/netlist/plib/pfunction.h
@@ -19,6 +19,36 @@ namespace plib {
// function evaluation
//============================================================
+ enum rpn_cmd
+ {
+ ADD,
+ MULT,
+ SUB,
+ DIV,
+ EQ,
+ NE,
+ LT,
+ GT,
+ LE,
+ GE,
+ IF,
+ NEG, // unary minus
+ POW,
+ LOG,
+ SIN,
+ COS,
+ MIN,
+ MAX,
+ RAND, /// random number between 0 and 1
+ TRUNC,
+
+ PUSH_CONST,
+ PUSH_INPUT,
+
+ LP, // Left parenthesis - for infix parsing
+ RP // right parenthesis - for infix parsing
+ };
+
/// \brief Class providing support for evaluating expressions
///
/// \tparam NT Number type, should be float or double
@@ -26,36 +56,18 @@ namespace plib {
template <typename NT>
class pfunction
{
- enum rpn_cmd
- {
- ADD,
- MULT,
- SUB,
- DIV,
- EQ,
- NE,
- LT,
- GT,
- LE,
- GE,
- IF,
- NEG, // unary minus
- POW,
- LOG,
- SIN,
- COS,
- MIN,
- MAX,
- RAND, /// random number between 0 and 1
- TRUNC,
- PUSH_CONST,
- PUSH_INPUT
- };
struct rpn_inst
{
- rpn_inst() : m_cmd(ADD), m_param(plib::constants<NT>::zero()) { }
+ rpn_inst() : m_cmd(ADD)
+ {
+ m_param.val = plib::constants<NT>::zero();
+ }
rpn_cmd m_cmd;
- NT m_param;
+ union
+ {
+ NT val;
+ std::size_t index;
+ } m_param;
};
public: