Files Classes Functions Hierarchy
#include <rpnfunc.h>
Public Member Functions | |
| rpnadd () | |
| rpnadd (deque< rpnbase * > &ds, bool const evaluate=true) | |
| ~rpnadd () | |
| rpnbase * | copy () const |
| void | visit (deque< rpnbase * > &ds, rpninteger &n) |
| void | visit (deque< rpnbase * > &ds, rpnreal &n) |
| void | visit (deque< rpnbase * > &ds, rpncomplex &n) |
| string const | name () const |
| void | eval (deque< rpnbase * > &ds) |
Definition at line 688 of file rpnfunc.h.
| rpnadd::rpnadd | ( | ) | [inline] |
Definition at line 1736 of file rpnfunc.cpp.
References eval().
01737 { 01738 if (evaluate) 01739 eval(ds); 01740 else 01741 ds.push_front(this); 01742 }
| rpnbase * rpnadd::copy | ( | ) | const [virtual] |
Reimplemented from rpnfunction.
Definition at line 1744 of file rpnfunc.cpp.
References rpnadd().
01745 { 01746 return new rpnadd(); 01747 }
| void rpnadd::eval | ( | deque< rpnbase * > & | ds | ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 1749 of file rpnfunc.cpp.
References rpnbase::accept(), and rpnbase::dec().
Referenced by rpnadd().
| string const rpnadd::name | ( | ) | const [inline, virtual] |
| void rpnadd::visit | ( | deque< rpnbase * > & | ds, | |
| rpncomplex & | n | |||
| ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 1757 of file rpnfunc.cpp.
References rpnbase::dec(), rpnbase::iscomplex(), rpnbase::isinteger(), rpnbase::isreal(), and rpncomplex::num.
01758 { 01759 rpnbase* x0 = ds.front(); 01760 ds.pop_front(); 01761 01762 rpnbase* x1 = ds.front(); 01763 if (x1->iscomplex()) 01764 { 01765 ((rpncomplex*)(x1))->num += n.num; 01766 x0->dec(); 01767 return; 01768 } 01769 else if (x1->isreal()) 01770 { 01771 ds.pop_front(); 01772 ds.push_front(x0); 01773 n.num += ((rpnreal*)x1)->num; 01774 x1->dec(); 01775 return; 01776 } 01777 else if (x1->isinteger()) 01778 { 01779 ds.pop_front(); 01780 ds.push_front(x0); 01781 n.num += ((rpninteger*)x1)->num; 01782 x1->dec(); 01783 return; 01784 } 01785 01786 //Restor the stack. 01787 ds.push_front(x0); 01788 }
Reimplemented from rpnfunction.
Definition at line 1790 of file rpnfunc.cpp.
References rpnbase::dec(), rpnbase::iscomplex(), rpnbase::isinteger(), rpnbase::isreal(), and rpnreal::num.
01791 { 01792 rpnbase* x0 = ds.front(); 01793 ds.pop_front(); 01794 01795 rpnbase* x1 = ds.front(); 01796 if (x1->isreal()) 01797 { 01798 ((rpnreal*)(x1))->num += n.num; 01799 x0->dec(); 01800 return; 01801 } 01802 else if (x1->iscomplex()) 01803 { 01804 ((rpncomplex*)(x1))->num += n.num; 01805 x0->dec(); 01806 return; 01807 } 01808 else if (x1->isinteger()) 01809 { 01810 ds.pop_front(); 01811 n.num += ((rpninteger*)x1)->num; 01812 ds.push_front(x0); 01813 x1->dec(); 01814 return; 01815 } 01816 01817 // Restore the stack. 01818 ds.push_front(x0); 01819 }
| void rpnadd::visit | ( | deque< rpnbase * > & | ds, | |
| rpninteger & | n | |||
| ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 1821 of file rpnfunc.cpp.
References rpnbase::dec(), rpnbase::iscomplex(), rpnbase::isinteger(), rpnbase::isreal(), and rpninteger::num.
01822 { 01823 rpninteger* x0 = (rpninteger*)(ds.front()); 01824 ds.pop_front(); 01825 01826 rpnbase* x1 = ds.front(); 01827 if (x1->isinteger()) 01828 { 01829 ((rpninteger*)(x1))->num += n.num; 01830 x0->dec(); 01831 return; 01832 } 01833 else if (x1->isreal()) 01834 { 01835 ((rpnreal*)(x1))->num += n.num; 01836 x0->dec(); 01837 return; 01838 } 01839 else if (x1->iscomplex()) 01840 { 01841 ((rpncomplex*)(x1))->num += n.num; 01842 x0->dec(); 01843 return; 01844 } 01845 01846 // Restor the stack. 01847 ds.push_front(x0); 01848 }
1.5.8