Files Classes Functions Hierarchy
#include <rpnfunc.h>
Public Member Functions | |
| rpnmultiply () | |
| rpnmultiply (deque< rpnbase * > &ds, bool const evaluate=true) | |
| ~rpnmultiply () | |
| 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 707 of file rpnfunc.h.
| rpnmultiply::rpnmultiply | ( | ) | [inline] |
Definition at line 1851 of file rpnfunc.cpp.
References eval().
01852 { 01853 if (evaluate) 01854 eval(ds); 01855 else 01856 ds.push_front(this); 01857 }
| rpnbase * rpnmultiply::copy | ( | ) | const [virtual] |
Reimplemented from rpnfunction.
Definition at line 1859 of file rpnfunc.cpp.
References rpnmultiply().
01860 { 01861 return new rpnmultiply(); 01862 }
| void rpnmultiply::eval | ( | deque< rpnbase * > & | ds | ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 1864 of file rpnfunc.cpp.
References rpnbase::accept(), and rpnbase::dec().
Referenced by rpnmultiply().
| string const rpnmultiply::name | ( | ) | const [inline, virtual] |
| void rpnmultiply::visit | ( | deque< rpnbase * > & | ds, | |
| rpncomplex & | n | |||
| ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 1932 of file rpnfunc.cpp.
References rpnbase::dec(), rpnbase::iscomplex(), rpnbase::isinteger(), rpnbase::isreal(), and rpncomplex::num.
01933 { 01934 rpnbase* x0 = ds.front(); 01935 ds.pop_front(); 01936 01937 rpnbase* x1 = ds.front(); 01938 if (x1->iscomplex()) 01939 { 01940 ((rpncomplex*)(x1))->num *= n.num; 01941 x0->dec(); 01942 return; 01943 } 01944 else if (x1->isreal()) 01945 { 01946 ds.pop_front(); 01947 ds.push_front(x0); 01948 n.num *= ((rpnreal*)x1)->num; 01949 x1->dec(); 01950 return; 01951 } 01952 else if (x1->isinteger()) 01953 { 01954 ds.pop_front(); 01955 ds.push_front(x0); 01956 n.num *= ((rpninteger*)x1)->num; 01957 x1->dec(); 01958 return; 01959 } 01960 01961 //Restor the stack. 01962 ds.push_front(x0); 01963 }
Reimplemented from rpnfunction.
Definition at line 1872 of file rpnfunc.cpp.
References rpnbase::dec(), rpnbase::iscomplex(), rpnbase::isinteger(), rpnbase::isreal(), and rpnreal::num.
01873 { 01874 rpnbase* x0 = ds.front(); 01875 ds.pop_front(); 01876 01877 rpnbase* x1 = ds.front(); 01878 if (x1->isreal()) 01879 { 01880 ((rpnreal*)(x1))->num *= n.num; 01881 x0->dec(); 01882 return; 01883 } 01884 else if (x1->iscomplex()) 01885 { 01886 ((rpncomplex*)(x1))->num *= n.num; 01887 x0->dec(); 01888 return; 01889 } 01890 else if (x1->isinteger()) 01891 { 01892 ds.pop_front(); 01893 n.num *= ((rpninteger*)x1)->num; 01894 ds.push_front(x0); 01895 x1->dec(); 01896 return; 01897 } 01898 01899 // Restore the stack. 01900 ds.push_front(x0); 01901 }
| void rpnmultiply::visit | ( | deque< rpnbase * > & | ds, | |
| rpninteger & | n | |||
| ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 1903 of file rpnfunc.cpp.
References rpnbase::dec(), rpnbase::iscomplex(), rpnbase::isinteger(), rpnbase::isreal(), and rpninteger::num.
01904 { 01905 rpninteger* x0 = (rpninteger*)(ds.front()); 01906 ds.pop_front(); 01907 01908 rpnbase* x1 = ds.front(); 01909 if (x1->isinteger()) 01910 { 01911 ((rpninteger*)(x1))->num *= n.num; 01912 x0->dec(); 01913 return; 01914 } 01915 else if (x1->isreal()) 01916 { 01917 ((rpnreal*)(x1))->num *= n.num; 01918 x0->dec(); 01919 return; 01920 } 01921 else if (x1->iscomplex()) 01922 { 01923 ((rpncomplex*)(x1))->num *= n.num; 01924 x0->dec(); 01925 return; 01926 } 01927 01928 // Restor the stack. 01929 ds.push_front(x0); 01930 }
1.5.8