Files Classes Functions Hierarchy
#include <rpnfunc.h>
Public Member Functions | |
| rpngcd () | |
| rpngcd (deque< rpnbase * > &ds, bool const evaluate=true) | |
| ~rpngcd () | |
| rpnbase * | copy () const |
| void | visit (deque< rpnbase * > &ds, rpninteger &n) |
| string const | name () const |
| void | eval (deque< rpnbase * > &ds) |
Definition at line 1403 of file rpnfunc.h.
| rpngcd::rpngcd | ( | ) | [inline] |
Definition at line 4294 of file rpnfunc.cpp.
References eval().
04295 { 04296 if (evaluate) 04297 eval(ds); 04298 else 04299 ds.push_front(this); 04300 }
| rpnbase * rpngcd::copy | ( | ) | const [virtual] |
Reimplemented from rpnfunction.
Definition at line 4302 of file rpnfunc.cpp.
References rpngcd().
04303 { 04304 return new rpngcd(); 04305 }
| void rpngcd::eval | ( | deque< rpnbase * > & | ds | ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 4307 of file rpnfunc.cpp.
References rpnbase::accept(), and rpnbase::dec().
Referenced by rpngcd().
| string const rpngcd::name | ( | ) | const [inline, virtual] |
| void rpngcd::visit | ( | deque< rpnbase * > & | ds, | |
| rpninteger & | n | |||
| ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 4315 of file rpnfunc.cpp.
References rpnbase::dec(), rpnbase::isinteger(), and rpninteger::num.
04316 { 04317 if (!ds[1]->isinteger()) 04318 return; 04319 if (n.num<1) 04320 return; 04321 04322 rpnbase* x0 = ds.front(); 04323 ds.pop_front(); 04324 04325 rpninteger* x1 = (rpninteger *)(ds.front()); 04326 04327 long int a = x1->num; 04328 if (a<1) 04329 { 04330 ds.push_front(x0); 04331 return; 04332 } 04333 04334 long int b = n.num; 04335 04336 if (a<b) 04337 { 04338 long int c = a; 04339 a = b; 04340 b = c; 04341 } 04342 04343 if (a!=b) 04344 { 04345 for (long int c=a%b;c!=0;) 04346 { 04347 a = b; 04348 b = c; 04349 c = a%b; 04350 } 04351 04352 } 04353 04354 x1->num = b; 04355 04356 x0->dec(); 04357 }
1.5.8