Files Classes Functions Hierarchy
#include <rpnfunc.h>
Public Member Functions | |
| varreplace () | |
| varreplace (deque< rpnbase * > &ds, bool const evaluate=true) | |
| ~varreplace () | |
| rpnbase * | copy () const |
| void | visit (deque< rpnbase * > &ds, rpnstring &n) |
| void | visit (deque< rpnbase * > &ds, rpninteger &k) |
| string const | name () const |
| void | eval (deque< rpnbase * > &ds) |
Definition at line 617 of file rpnfunc.h.
| varreplace::varreplace | ( | ) | [inline] |
Definition at line 1615 of file rpnfunc.cpp.
References eval().
01616 { 01617 if (evaluate) 01618 eval(ds); 01619 else 01620 ds.push_front(this); 01621 }
| rpnbase * varreplace::copy | ( | ) | const [virtual] |
Reimplemented from rpnfunction.
Definition at line 1623 of file rpnfunc.cpp.
References varreplace().
01624 { 01625 return new varreplace(); 01626 }
| void varreplace::eval | ( | deque< rpnbase * > & | ds | ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 1628 of file rpnfunc.cpp.
References rpnbase::accept(), and rpnbase::dec().
Referenced by varreplace().
| string const varreplace::name | ( | ) | const [inline, virtual] |
| void varreplace::visit | ( | deque< rpnbase * > & | ds, | |
| rpninteger & | k | |||
| ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 1648 of file rpnfunc.cpp.
References rpnbase::dec(), rpnbase::isinteger(), and rpninteger::num.
01649 { 01650 if (ds.size()<=3) 01651 return; 01652 01653 rpnbase* x0 = ds.front(); 01654 ds.pop_front(); 01655 rpnbase* x1 = ds.front(); 01656 ds.pop_front(); 01657 01658 bool restore(false); 01659 01660 int const sz = ds.size(); 01661 01662 int a; 01663 int b = k.num; 01664 if (! x1->isinteger() ) 01665 restore=true; 01666 else 01667 { 01668 a = ((rpninteger*)x1)->num; 01669 if ( (a<0) || (b<0) || (a>=sz) || (b>=sz) || (a==b) ) 01670 restore=true; 01671 } 01672 01673 if (restore) 01674 { 01675 ds.push_front(x1); 01676 ds.push_front(x0); 01677 return; 01678 } 01679 01680 x0->dec(); 01681 x1->dec(); 01682 01683 ds[a]->dec(); 01684 ds[a]=ds[b]; 01685 ds[b]->inc(); 01686 }
Reimplemented from rpnfunction.
Definition at line 1636 of file rpnfunc.cpp.
References rpnbase::dec(), and rpnstring::str.
01637 { 01638 rpnbase* x0 = ds.front(); 01639 ds.pop_front(); 01640 rpnbase* x1 = ds.front(); 01641 ds.pop_front(); 01642 01643 rpnprogramstackstate().replace(x1,s.str); 01644 01645 x0->dec(); 01646 }
1.5.8