Files Classes Functions Hierarchy
#include <rpnfunc.h>
Public Member Functions | |
| rpnsubtract () | |
| rpnsubtract (deque< rpnbase * > &ds, bool const evaluate=true) | |
| ~rpnsubtract () | |
| 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 895 of file rpnfunc.h.
| rpnsubtract::rpnsubtract | ( | ) | [inline] |
Definition at line 2643 of file rpnfunc.cpp.
References eval().
02644 { 02645 if (evaluate) 02646 eval(ds); 02647 else 02648 ds.push_front(this); 02649 }
| rpnbase * rpnsubtract::copy | ( | ) | const [virtual] |
Reimplemented from rpnfunction.
Definition at line 2651 of file rpnfunc.cpp.
References rpnsubtract().
02652 { 02653 return new rpnsubtract(); 02654 }
| void rpnsubtract::eval | ( | deque< rpnbase * > & | ds | ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 2656 of file rpnfunc.cpp.
References rpnbase::accept(), and rpnbase::dec().
Referenced by rpnsubtract().
| string const rpnsubtract::name | ( | ) | const [inline, virtual] |
| void rpnsubtract::visit | ( | deque< rpnbase * > & | ds, | |
| rpncomplex & | n | |||
| ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 2664 of file rpnfunc.cpp.
References rpnbase::dec(), rpnbase::iscomplex(), rpnbase::isinteger(), rpnbase::isreal(), and rpncomplex::num.
02665 { 02666 rpnbase* x0 = ds.front(); 02667 ds.pop_front(); 02668 rpnbase* x1 = ds.front(); 02669 ds.pop_front(); 02670 02671 if (x1->iscomplex()) 02672 { 02673 ((rpncomplex*)x1)->num -= n.num; 02674 ds.push_front(x1); 02675 x0->dec(); 02676 return; 02677 } 02678 else 02679 if (x1->isreal()) 02680 { 02681 n.num *= -1; 02682 n.num += ((rpnreal*)x1)->num; 02683 ds.push_front(x0); 02684 x1->dec(); 02685 return; 02686 } 02687 else 02688 if (x1->isinteger()) 02689 { 02690 n.num *= -1; 02691 n.num += ((rpninteger*)x1)->num; 02692 ds.push_front(x0); 02693 x1->dec(); 02694 return; 02695 } 02696 02697 // Error so restore stack 02698 ds.push_front(x1); 02699 ds.push_front(x0); 02700 }
Reimplemented from rpnfunction.
Definition at line 2702 of file rpnfunc.cpp.
References rpnbase::dec(), rpnbase::iscomplex(), rpnbase::isinteger(), rpnbase::isreal(), and rpnreal::num.
02703 { 02704 rpnbase* x0 = ds.front(); 02705 ds.pop_front(); 02706 rpnbase* x1 = ds.front(); 02707 ds.pop_front(); 02708 02709 if (x1->isreal()) 02710 { 02711 ((rpnreal*)x1)->num -= n.num; 02712 ds.push_front(x1); 02713 x0->dec(); 02714 return; 02715 } 02716 else 02717 if (x1->iscomplex()) 02718 { 02719 ((rpncomplex*)x1)->num -= n.num; 02720 ds.push_front(x1); 02721 x0->dec(); 02722 return; 02723 } 02724 else 02725 if ( x1->isinteger()) 02726 { 02727 n.num *= -1; 02728 n.num += ((rpninteger*)x1)->num; 02729 ds.push_front(x0); 02730 x1->dec(); 02731 return; 02732 } 02733 02734 // Error so restore stack 02735 ds.push_front(x1); 02736 ds.push_front(x0); 02737 }
| void rpnsubtract::visit | ( | deque< rpnbase * > & | ds, | |
| rpninteger & | n | |||
| ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 2739 of file rpnfunc.cpp.
References rpnbase::dec(), rpnbase::iscomplex(), rpnbase::isinteger(), rpnbase::isreal(), and rpninteger::num.
02740 { 02741 rpnbase* x0 = ds.front(); 02742 ds.pop_front(); 02743 rpnbase* x1 = ds.front(); 02744 02745 if ( x1->isreal() ) 02746 { 02747 ((rpnreal*)x1)->num -= n.num; 02748 x0->dec(); 02749 return; 02750 } 02751 else 02752 if ( x1->isinteger() ) 02753 { 02754 ((rpninteger*)x1)->num -= n.num; 02755 x0->dec(); 02756 return; 02757 } 02758 else 02759 if ( x1->iscomplex() ) 02760 { 02761 ((rpncomplex*)x1)->num -= n.num; 02762 x0->dec(); 02763 return; 02764 } 02765 02766 // Restore the stack. 02767 ds.push_front(x0); 02768 }
1.5.8