Files Classes Functions Hierarchy
00001 #ifndef RPNFUNC_H 00002 #define RPNFUNC_H 00003 00004 00005 #include <deque> 00006 using namespace std; 00007 00008 #include <rpn.h> 00009 00010 00011 class rpnprogset: public rpnfunction 00012 { 00013 public: 00014 00015 rpnprogset() {} 00016 rpnprogset(deque<rpnbase*>& ds, bool const evaluate=true); 00017 ~rpnprogset() {} 00018 rpnbase* copy() const; 00019 00020 void visit(deque<rpnbase*>& ds,rpninteger& n); 00021 void visit(deque<rpnbase*>& ds,rpnprogram& p); 00022 00023 string const name() const { return string("p@"); } 00024 00025 void eval( deque<rpnbase*>& ds ); 00026 }; 00027 00028 class rpnpush : public rpnfunction 00029 { 00030 public: 00031 00032 rpnpush() {} 00033 rpnpush(deque<rpnbase*>& ds, bool const evaluate=true); 00034 ~rpnpush() {} 00035 rpnbase* copy() const; 00036 00037 string const name() const { return string("push"); } 00038 00039 void eval( deque<rpnbase*>& ds ); 00040 }; 00041 00042 class rpnpop : public rpnfunction 00043 { 00044 public: 00045 00046 rpnpop() {} 00047 rpnpop(deque<rpnbase*>& ds, bool const evaluate=true); 00048 ~rpnpop() {} 00049 rpnbase* copy() const; 00050 00051 string const name() const { return string("pop"); } 00052 00053 void eval( deque<rpnbase*>& ds ); 00054 }; 00055 00056 class rpnpushn : public rpnfunction 00057 { 00058 public: 00059 00060 rpnpushn() {} 00061 rpnpushn(deque<rpnbase*>& ds, bool const evaluate=true); 00062 ~rpnpushn() {} 00063 rpnbase* copy() const; 00064 00065 void visit(deque<rpnbase*>& ds,rpninteger& n); 00066 00067 string const name() const { return string("pushn"); } 00068 00069 void eval( deque<rpnbase*>& ds ); 00070 }; 00071 00072 class rpnpopn : public rpnfunction 00073 { 00074 public: 00075 00076 rpnpopn() {} 00077 rpnpopn(deque<rpnbase*>& ds, bool const evaluate=true); 00078 ~rpnpopn() {} 00079 rpnbase* copy() const; 00080 00081 void visit(deque<rpnbase*>& ds,rpninteger& n); 00082 00083 string const name() const { return string("popn"); } 00084 00085 void eval( deque<rpnbase*>& ds ); 00086 }; 00087 00088 class dssize2 : public rpnfunction 00089 { 00090 public: 00091 00092 dssize2() {} 00093 dssize2(deque<rpnbase*>& ds, bool const evaluate=true); 00094 ~dssize2() {} 00095 rpnbase* copy() const; 00096 00097 string const name() const { return string("size2"); } 00098 00099 void eval( deque<rpnbase*>& ds ); 00100 }; 00101 00102 class rpneval : public rpnfunction 00103 { 00104 public: 00105 00106 rpneval() {} 00107 rpneval(deque<rpnbase*>& ds, bool const evaluate=true); 00108 ~rpneval() {} 00109 rpnbase* copy() const; 00110 00111 string const name() const { return string("eval"); } 00112 00113 void eval( deque<rpnbase*>& ds ); 00114 }; 00115 00116 class rpnclear : public rpnfunction 00117 { 00118 public: 00119 00120 rpnclear() {} 00121 rpnclear(deque<rpnbase*>& ds, bool const evaluate=true); 00122 ~rpnclear() {} 00123 rpnbase* copy() const; 00124 00125 string const name() const { return string("clear"); } 00126 00127 void eval( deque<rpnbase*>& ds ); 00128 }; 00129 00130 class rpnclearvar : public rpnfunction 00131 { 00132 public: 00133 00134 rpnclearvar() {} 00135 rpnclearvar(deque<rpnbase*>& ds, bool const evaluate=true); 00136 ~rpnclearvar() {} 00137 rpnbase* copy() const; 00138 00139 string const name() const { return string("clearvar"); } 00140 00141 void eval( deque<rpnbase*>& ds ); 00142 }; 00143 00144 class rpnclearboth : public rpnfunction 00145 { 00146 public: 00147 00148 rpnclearboth() {} 00149 rpnclearboth(deque<rpnbase*>& ds, bool const evaluate=true); 00150 ~rpnclearboth() {} 00151 rpnbase* copy() const; 00152 00153 string const name() const { return string("clearboth"); } 00154 00155 void eval( deque<rpnbase*>& ds ); 00156 }; 00157 00158 class rpndup : public rpnfunction 00159 { 00160 public: 00161 00162 rpndup() {} 00163 rpndup(deque<rpnbase*>& ds, bool const evaluate=true); 00164 ~rpndup() {} 00165 rpnbase* copy() const; 00166 00167 string const name() const { return string("dup"); } 00168 00169 void eval( deque<rpnbase*>& ds ); 00170 }; 00171 00172 class rpndupn : public rpnfunction 00173 { 00174 public: 00175 00176 rpndupn() {} 00177 rpndupn(deque<rpnbase*>& ds, bool const evaluate=true); 00178 ~rpndupn() {} 00179 rpnbase* copy() const; 00180 00181 void visit(deque<rpnbase*>& ds,rpninteger& n); 00182 00183 string const name() const { return string("dupn"); } 00184 00185 void eval( deque<rpnbase*>& ds ); 00186 }; 00187 00188 class dssize : public rpnfunction 00189 { 00190 public: 00191 00192 dssize() {} 00193 dssize(deque<rpnbase*>& ds, bool const evaluate=true); 00194 ~dssize() {} 00195 rpnbase* copy() const; 00196 00197 string const name() const { return string("size"); } 00198 00199 void eval( deque<rpnbase*>& ds ); 00200 }; 00201 00202 class rev : public rpnfunction 00203 { 00204 public: 00205 00206 rev() {} 00207 rev(deque<rpnbase*>& ds, bool const evaluate=true); 00208 ~rev() {} 00209 rpnbase* copy() const; 00210 00211 string const name() const { return string("rev"); } 00212 00213 void eval( deque<rpnbase*>& ds ); 00214 }; 00215 00216 class rot : public rpnfunction 00217 { 00218 public: 00219 00220 rot() {} 00221 rot(deque<rpnbase*>& ds, bool const evaluate=true); 00222 ~rot() {} 00223 rpnbase* copy() const; 00224 00225 string const name() const { return string("rot"); } 00226 00227 void eval( deque<rpnbase*>& ds ); 00228 }; 00229 00230 class rotn : public rpnfunction 00231 { 00232 public: 00233 00234 rotn() {} 00235 rotn(deque<rpnbase*>& ds, bool const evaluate=true); 00236 ~rotn() {} 00237 rpnbase* copy() const; 00238 00239 void visit(deque<rpnbase*>& ds,rpninteger& n); 00240 00241 string const name() const { return string("rotn"); } 00242 00243 void eval( deque<rpnbase*>& ds ); 00244 }; 00245 00246 class rpnswap: public rpnfunction 00247 { 00248 public: 00249 00250 rpnswap() {} 00251 rpnswap(deque<rpnbase*>& ds, bool const evaluate=true); 00252 ~rpnswap() {} 00253 rpnbase* copy() const; 00254 00255 string const name() const { return string("swap"); } 00256 00257 void eval( deque<rpnbase*>& ds ); 00258 }; 00259 00260 00261 class rpnswap2: public rpnfunction 00262 { 00263 public: 00264 00265 rpnswap2() {} 00266 rpnswap2(deque<rpnbase*>& ds, bool const evaluate=true); 00267 ~rpnswap2() {} 00268 rpnbase* copy() const; 00269 00270 string const name() const { return string("|"); } 00271 00272 void eval( deque<rpnbase*>& ds ); 00273 }; 00274 00275 00276 class dropi: public rpnfunction 00277 { 00278 public: 00279 00280 dropi() {} 00281 dropi(deque<rpnbase*>& ds, bool const evaluate=true); 00282 ~dropi() {} 00283 rpnbase* copy() const; 00284 00285 void visit(deque<rpnbase*>& ds,rpninteger& n); 00286 00287 string const name() const { return string("\\i"); } 00288 00289 void eval( deque<rpnbase*>& ds ); 00290 }; 00291 00292 class drop: public rpnfunction 00293 { 00294 public: 00295 00296 drop() {} 00297 drop(deque<rpnbase*>& ds, bool const evaluate=true); 00298 ~drop() {} 00299 rpnbase* copy() const; 00300 00301 string const name() const { return string("drop"); } 00302 00303 void eval( deque<rpnbase*>& ds ); 00304 }; 00305 00306 00307 00308 00309 // Identical class to drop. Added for symbolic drop "\" . 00310 class dropsymb: public drop 00311 { 00312 public: 00313 00314 dropsymb() {} 00315 dropsymb(deque<rpnbase*>& ds, bool const evaluate=true); 00316 ~dropsymb() {} 00317 00318 string const name() const { return string("\\"); } 00319 00320 }; 00321 00322 class dropn: public rpnfunction 00323 { 00324 public: 00325 00326 dropn() {} 00327 dropn(deque<rpnbase*>& ds, bool const evaluate=true); 00328 ~dropn() {} 00329 rpnbase* copy() const; 00330 00331 void visit(deque<rpnbase*>& ds,rpninteger& n); 00332 00333 string const name() const { return string("dropn"); } 00334 00335 void eval( deque<rpnbase*>& ds ); 00336 }; 00337 00338 class ifthen : public rpnfunction 00339 { 00340 public: 00341 00342 ifthen() {} 00343 ifthen(deque<rpnbase*>& ds, bool const evaluate=true); 00344 ~ifthen() {} 00345 rpnbase* copy() const; 00346 00347 void visit(deque<rpnbase*>& ds,rpnreal& n); 00348 void visit(deque<rpnbase*>& ds,rpninteger& n); 00349 00350 string const name() const { return string("ifthen"); } 00351 00352 void eval( deque<rpnbase*>& ds ); 00353 }; 00354 00355 class thenif : public rpnfunction 00356 { 00357 public: 00358 00359 thenif() {} 00360 thenif(deque<rpnbase*>& ds, bool const evaluate=true); 00361 ~thenif() {} 00362 rpnbase* copy() const; 00363 00364 void visit(deque<rpnbase*>& ds,rpnreal& n); 00365 void visit(deque<rpnbase*>& ds,rpninteger& n); 00366 00367 string const name() const { return string("thenif"); } 00368 00369 void eval( deque<rpnbase*>& ds ); 00370 }; 00371 00372 class ifthenelse : public rpnfunction 00373 { 00374 public: 00375 00376 ifthenelse() {} 00377 ifthenelse(deque<rpnbase*>& ds, bool const evaluate=true); 00378 ~ifthenelse() {} 00379 rpnbase* copy() const; 00380 00381 void visit(deque<rpnbase*>& ds,rpnreal& n); 00382 void visit(deque<rpnbase*>& ds,rpninteger& n); 00383 00384 string const name() const { return string("ifthenelse"); } 00385 00386 void eval( deque<rpnbase*>& ds ); 00387 }; 00388 00389 class thenelseif : public rpnfunction 00390 { 00391 public: 00392 00393 thenelseif() {} 00394 thenelseif(deque<rpnbase*>& ds, bool const evaluate=true); 00395 ~thenelseif() {} 00396 rpnbase* copy() const; 00397 00398 void visit(deque<rpnbase*>& ds,rpnreal& n); 00399 void visit(deque<rpnbase*>& ds,rpninteger& n); 00400 00401 string const name() const { return string("thenelseif"); } 00402 00403 void eval( deque<rpnbase*>& ds ); 00404 }; 00405 00406 class var: public rpnfunction 00407 { 00408 public: 00409 00410 var() {} 00411 var(deque<rpnbase*>& ds, bool const evaluate=true); 00412 ~var() {} 00413 rpnbase* copy() const; 00414 00415 void visit(deque<rpnbase*>& ds,rpnstring& n); 00416 00417 string const name() const { return string("var"); } 00418 00419 void eval( deque<rpnbase*>& ds ); 00420 }; 00421 00422 class vardel: public rpnfunction 00423 { 00424 public: 00425 00426 vardel() {} 00427 vardel(deque<rpnbase*>& ds, bool const evaluate=true); 00428 ~vardel() {} 00429 rpnbase* copy() const; 00430 00431 void visit(deque<rpnbase*>& ds,rpnstring& n); 00432 00433 string const name() const { return string("rm"); } 00434 00435 void eval( deque<rpnbase*>& ds ); 00436 }; 00437 00438 class vareval: public rpnfunction 00439 { 00440 public: 00441 00442 vareval() {} 00443 vareval(deque<rpnbase*>& ds, bool const evaluate=true); 00444 ~vareval() {} 00445 rpnbase* copy() const; 00446 00447 void visit(deque<rpnbase*>& ds,rpnstring& n); 00448 void visit(deque<rpnbase*>& ds,rpninteger& n); 00449 void visit(deque<rpnbase*>& ds,rpnprogram& p); 00450 00451 string const name() const { return string("&"); } 00452 00453 void eval( deque<rpnbase*>& ds ); 00454 }; 00455 00456 class varpushd: public rpnfunction 00457 { 00458 public: 00459 00460 varpushd() {} 00461 varpushd(deque<rpnbase*>& ds, bool const evaluate=true); 00462 ~varpushd() {} 00463 rpnbase* copy() const; 00464 00465 void visit(deque<rpnbase*>& ds,rpnstring& s); 00466 void visit(deque<rpnbase*>& ds,rpnprogram& p); 00467 00468 string const name() const { return string("pushd"); } 00469 00470 void eval( deque<rpnbase*>& ds ); 00471 }; 00472 00473 class varpopd: public rpnfunction 00474 { 00475 public: 00476 00477 varpopd() {} 00478 varpopd(deque<rpnbase*>& ds, bool const evaluate=true); 00479 ~varpopd() {} 00480 rpnbase* copy() const; 00481 00482 string const name() const { return string("popd"); } 00483 00484 void eval( deque<rpnbase*>& ds ); 00485 }; 00486 00487 00488 class depthd: public rpnfunction 00489 { 00490 public: 00491 00492 depthd() {} 00493 depthd(deque<rpnbase*>& ds, bool const evaluate=true); 00494 ~depthd() {} 00495 rpnbase* copy() const; 00496 00497 string const name() const { return string("depthd"); } 00498 00499 void eval( deque<rpnbase*>& ds ); 00500 }; 00501 00502 00503 00504 class varls: public rpnfunction 00505 { 00506 public: 00507 00508 varls() {} 00509 varls(deque<rpnbase*>& ds, bool const evaluate=true); 00510 ~varls() {} 00511 rpnbase* copy() const; 00512 00513 string const name() const { return string("ls"); } 00514 00515 void eval( deque<rpnbase*>& ds ); 00516 }; 00517 00518 class vartree : public rpnfunction 00519 { 00520 public: 00521 00522 vartree() {} 00523 vartree(deque<rpnbase*>& ds, bool const evaluate=true); 00524 ~vartree() {} 00525 rpnbase* copy() const; 00526 00527 void draw( rpnprogram* p, unsigned int depth ); 00528 00529 string const name() const { return string("tree"); } 00530 00531 void eval( deque<rpnbase*>& ds ); 00532 }; 00533 00534 class varpwd : public rpnfunction 00535 { 00536 public: 00537 00538 varpwd() {} 00539 varpwd(deque<rpnbase*>& ds, bool const evaluate=true); 00540 ~varpwd() {} 00541 rpnbase* copy() const; 00542 00543 string const name() const { return string("pwd"); } 00544 00545 void eval( deque<rpnbase*>& ds ); 00546 }; 00547 00548 class pathtoggle : public rpnfunction 00549 { 00550 public: 00551 00552 pathtoggle() {} 00553 pathtoggle(deque<rpnbase*>& ds, bool const evaluate=true); 00554 ~pathtoggle() {} 00555 rpnbase* copy() const; 00556 00557 string const name() const { return string("path!"); } 00558 00559 void visit(deque<rpnbase*>& ds,rpnstring& path); 00560 void visit(deque<rpnbase*>& ds,rpnprogram& path); 00561 00562 void eval( deque<rpnbase*>& ds ); 00563 }; 00564 00565 class varinc: public rpnfunction 00566 { 00567 public: 00568 00569 varinc() {} 00570 varinc(deque<rpnbase*>& ds, bool const evaluate=true); 00571 ~varinc() {} 00572 rpnbase* copy() const; 00573 00574 void visit(deque<rpnbase*>& ds,rpnstring& s); 00575 void visit(deque<rpnbase*>& ds,rpninteger& n); 00576 void visit(deque<rpnbase*>& ds,rpnreal& n); 00577 00578 string const name() const { return string("++"); } 00579 00580 void eval( deque<rpnbase*>& ds ); 00581 }; 00582 00583 class vardec: public rpnfunction 00584 { 00585 public: 00586 00587 vardec() {} 00588 vardec(deque<rpnbase*>& ds, bool const evaluate=true); 00589 ~vardec() {} 00590 rpnbase* copy() const; 00591 00592 void visit(deque<rpnbase*>& ds,rpnstring& s); 00593 void visit(deque<rpnbase*>& ds,rpninteger& n); 00594 void visit(deque<rpnbase*>& ds,rpnreal& n); 00595 00596 string const name() const { return string("--"); } 00597 00598 void eval( deque<rpnbase*>& ds ); 00599 }; 00600 00601 class varexists: public rpnfunction 00602 { 00603 public: 00604 00605 varexists() {} 00606 varexists(deque<rpnbase*>& ds, bool const evaluate=true); 00607 ~varexists() {} 00608 rpnbase* copy() const; 00609 00610 void visit(deque<rpnbase*>& ds,rpnstring& n); 00611 00612 string const name() const { return string("isvar"); } 00613 00614 void eval( deque<rpnbase*>& ds ); 00615 }; 00616 00617 class varreplace: public rpnfunction 00618 { 00619 public: 00620 00621 varreplace() {} 00622 varreplace(deque<rpnbase*>& ds, bool const evaluate=true); 00623 ~varreplace() {} 00624 rpnbase* copy() const; 00625 00626 void visit(deque<rpnbase*>& ds,rpnstring& n); 00627 void visit(deque<rpnbase*>& ds,rpninteger& k); 00628 00629 string const name() const { return string("="); } 00630 00631 void eval( deque<rpnbase*>& ds ); 00632 }; 00633 00634 class varrecall: public rpnfunction 00635 { 00636 public: 00637 00638 varrecall() {} 00639 varrecall(deque<rpnbase*>& ds, bool const evaluate=true); 00640 ~varrecall() {} 00641 rpnbase* copy() const; 00642 00643 void visit(deque<rpnbase*>& ds,rpnstring& n); 00644 void visit(deque<rpnbase*>& ds,rpninteger& n); 00645 00646 00647 string const name() const { return string("rcl"); } 00648 00649 void eval( deque<rpnbase*>& ds ); 00650 }; 00651 00652 class rpnnot: public rpnfunction 00653 { 00654 public: 00655 00656 rpnnot() {} 00657 rpnnot(deque<rpnbase*>& ds, bool const evaluate=true); 00658 ~rpnnot() {} 00659 rpnbase* copy() const; 00660 00661 void visit(deque<rpnbase*>& ds,rpnreal& n); 00662 void visit(deque<rpnbase*>& ds,rpninteger& n); 00663 00664 string const name() const { return string("!"); } 00665 00666 void eval( deque<rpnbase*>& ds ); 00667 }; 00668 00669 class rpnneg: public rpnfunction 00670 { 00671 public: 00672 00673 rpnneg() {} 00674 rpnneg(deque<rpnbase*>& ds, bool const evaluate=true); 00675 ~rpnneg() {} 00676 rpnbase* copy() const; 00677 00678 void visit(deque<rpnbase*>& ds,rpninteger& n); 00679 void visit(deque<rpnbase*>& ds,rpnreal& n); 00680 void visit(deque<rpnbase*>& ds,rpncomplex& n); 00681 00682 string const name() const { return string("neg"); } 00683 00684 void eval( deque<rpnbase*>& ds ); 00685 }; 00686 00687 00688 class rpnadd: public rpnfunction 00689 { 00690 public: 00691 00692 rpnadd() {} 00693 rpnadd(deque<rpnbase*>& ds, bool const evaluate=true); 00694 ~rpnadd() {} 00695 rpnbase* copy() const; 00696 00697 void visit(deque<rpnbase*>& ds,rpninteger& n); 00698 void visit(deque<rpnbase*>& ds,rpnreal& n); 00699 void visit(deque<rpnbase*>& ds,rpncomplex& n); 00700 00701 string const name() const { return string("+"); } 00702 00703 void eval( deque<rpnbase*>& ds ); 00704 }; 00705 00706 00707 class rpnmultiply: public rpnfunction 00708 { 00709 public: 00710 00711 rpnmultiply() {} 00712 rpnmultiply(deque<rpnbase*>& ds, bool const evaluate=true); 00713 ~rpnmultiply() {} 00714 rpnbase* copy() const; 00715 00716 void visit(deque<rpnbase*>& ds,rpninteger& n); 00717 void visit(deque<rpnbase*>& ds,rpnreal& n); 00718 void visit(deque<rpnbase*>& ds,rpncomplex& n); 00719 00720 string const name() const { return string("*"); } 00721 00722 void eval( deque<rpnbase*>& ds ); 00723 }; 00724 00725 00726 class rpnlessthan: public rpnfunction 00727 { 00728 public: 00729 00730 rpnlessthan() {} 00731 rpnlessthan(deque<rpnbase*>& ds, bool const evaluate=true); 00732 ~rpnlessthan() {} 00733 rpnbase* copy() const; 00734 00735 void visit(deque<rpnbase*>& ds,rpnreal& n); 00736 void visit(deque<rpnbase*>& ds,rpninteger& n); 00737 00738 string const name() const { return string("<"); } 00739 00740 void eval( deque<rpnbase*>& ds ); 00741 }; 00742 00743 class rpnlessthanequal: public rpnfunction 00744 { 00745 public: 00746 00747 rpnlessthanequal() {} 00748 rpnlessthanequal(deque<rpnbase*>& ds, bool const evaluate=true); 00749 ~rpnlessthanequal() {} 00750 rpnbase* copy() const; 00751 00752 void visit(deque<rpnbase*>& ds,rpnreal& n); 00753 void visit(deque<rpnbase*>& ds,rpninteger& n); 00754 00755 string const name() const { return string("<="); } 00756 00757 void eval( deque<rpnbase*>& ds ); 00758 }; 00759 00760 class rpngreaterthanequal: public rpnfunction 00761 { 00762 public: 00763 00764 rpngreaterthanequal() {} 00765 rpngreaterthanequal(deque<rpnbase*>& ds, bool const evaluate=true); 00766 ~rpngreaterthanequal() {} 00767 rpnbase* copy() const; 00768 00769 void visit(deque<rpnbase*>& ds,rpnreal& n); 00770 void visit(deque<rpnbase*>& ds,rpninteger& n); 00771 00772 string const name() const { return string(">="); } 00773 00774 void eval( deque<rpnbase*>& ds ); 00775 }; 00776 00777 class rpngreaterthan: public rpnfunction 00778 { 00779 public: 00780 00781 rpngreaterthan() {} 00782 rpngreaterthan(deque<rpnbase*>& ds, bool const evaluate=true); 00783 ~rpngreaterthan() {} 00784 rpnbase* copy() const; 00785 00786 void visit(deque<rpnbase*>& ds,rpnreal& n); 00787 void visit(deque<rpnbase*>& ds,rpninteger& n); 00788 00789 string const name() const { return string(">"); } 00790 00791 void eval( deque<rpnbase*>& ds ); 00792 }; 00793 00794 class rpnequal: public rpnfunction 00795 { 00796 public: 00797 00798 rpnequal() {} 00799 rpnequal(deque<rpnbase*>& ds, bool const evaluate=true); 00800 ~rpnequal() {} 00801 rpnbase* copy() const; 00802 00803 void visit(deque<rpnbase*>& ds,rpnreal& n); 00804 void visit(deque<rpnbase*>& ds,rpninteger& n); 00805 00806 string const name() const { return string("=="); } 00807 00808 void eval( deque<rpnbase*>& ds ); 00809 }; 00810 00811 class rpnfor: public rpnfunction 00812 { 00813 public: 00814 00815 rpnfor() {} 00816 rpnfor(deque<rpnbase*>& ds, bool const evaluate=true); 00817 ~rpnfor() {} 00818 rpnbase* copy() const; 00819 00820 void visit(deque<rpnbase*>& ds,rpnprogram& n); 00821 00822 string const name() const { return string("for"); } 00823 00824 void eval( deque<rpnbase*>& ds ); 00825 }; 00826 00827 class rpnforn: public rpnfunction 00828 { 00829 public: 00830 00831 rpnforn() {} 00832 rpnforn(deque<rpnbase*>& ds, bool const evaluate=true); 00833 ~rpnforn() {} 00834 rpnbase* copy() const; 00835 00836 void visit(deque<rpnbase*>& ds,rpnprogram& n); 00837 void visit(deque<rpnbase*>& ds,rpninteger& n); 00838 00839 string const name() const { return string("forn"); } 00840 00841 void eval( deque<rpnbase*>& ds ); 00842 }; 00843 00844 00845 class prognew: public rpnfunction 00846 { 00847 public: 00848 00849 prognew() {} 00850 prognew(deque<rpnbase*>& ds, bool const evaluate=true); 00851 ~prognew() {} 00852 rpnbase* copy() const; 00853 00854 void visit(deque<rpnbase*>& ds,rpninteger& n); 00855 00856 string const name() const { return string("pnew"); } 00857 00858 void eval( deque<rpnbase*>& ds ); 00859 }; 00860 00861 00862 class progdecompose: public rpnfunction 00863 { 00864 public: 00865 00866 progdecompose() {} 00867 progdecompose(deque<rpnbase*>& ds, bool const evaluate=true); 00868 ~progdecompose() {} 00869 rpnbase* copy() const; 00870 00871 void visit(deque<rpnbase*>& ds,rpnprogram& p); 00872 00873 string const name() const { return string("pnew!"); } 00874 00875 void eval( deque<rpnbase*>& ds ); 00876 }; 00877 00878 00879 class progrev: public rpnfunction 00880 { 00881 public: 00882 00883 progrev() {} 00884 progrev(deque<rpnbase*>& ds, bool const evaluate=true); 00885 ~progrev() {} 00886 rpnbase* copy() const; 00887 00888 void visit(deque<rpnbase*>& ds,rpnprogram& pr); 00889 00890 string const name() const { return string("prev"); } 00891 00892 void eval( deque<rpnbase*>& ds ); 00893 }; 00894 00895 class rpnsubtract: public rpnfunction 00896 { 00897 public: 00898 00899 rpnsubtract() {} 00900 rpnsubtract(deque<rpnbase*>& ds, bool const evaluate=true); 00901 ~rpnsubtract() {} 00902 rpnbase* copy() const; 00903 00904 void visit(deque<rpnbase*>& ds,rpninteger& n); 00905 void visit(deque<rpnbase*>& ds,rpnreal& n); 00906 void visit(deque<rpnbase*>& ds,rpncomplex& n); 00907 00908 string const name() const { return string("-"); } 00909 00910 void eval( deque<rpnbase*>& ds ); 00911 }; 00912 00913 class rpndivide: public rpnfunction 00914 { 00915 public: 00916 00917 rpndivide() {} 00918 rpndivide(deque<rpnbase*>& ds, bool const evaluate=true); 00919 ~rpndivide() {} 00920 rpnbase* copy() const; 00921 00922 void visit(deque<rpnbase*>& ds,rpninteger& n); 00923 void visit(deque<rpnbase*>& ds,rpnreal& n); 00924 void visit(deque<rpnbase*>& ds,rpncomplex& n); 00925 00926 string const name() const { return string("/"); } 00927 00928 void eval( deque<rpnbase*>& ds ); 00929 }; 00930 00931 class isrpnstring: public rpnfunction 00932 { 00933 public: 00934 00935 isrpnstring() {} 00936 isrpnstring(deque<rpnbase*>& ds, bool const evaluate=true); 00937 ~isrpnstring() {} 00938 rpnbase* copy() const; 00939 00940 string const name() const { return string("isstring"); } 00941 00942 void eval( deque<rpnbase*>& ds ); 00943 }; 00944 00945 class isrpninteger: public rpnfunction 00946 { 00947 public: 00948 00949 isrpninteger() {} 00950 isrpninteger(deque<rpnbase*>& ds, bool const evaluate=true); 00951 ~isrpninteger() {} 00952 rpnbase* copy() const; 00953 00954 string const name() const { return string("isinteger"); } 00955 00956 void eval( deque<rpnbase*>& ds ); 00957 }; 00958 00959 class isrpnreal : public rpnfunction 00960 { 00961 public: 00962 00963 isrpnreal() {} 00964 isrpnreal(deque<rpnbase*>& ds, bool const evaluate=true); 00965 ~isrpnreal() {} 00966 rpnbase* copy() const; 00967 00968 string const name() const { return string("isreal"); } 00969 00970 void eval( deque<rpnbase*>& ds ); 00971 }; 00972 00973 class isrpncomplex : public rpnfunction 00974 { 00975 public: 00976 00977 isrpncomplex() {} 00978 isrpncomplex(deque<rpnbase*>& ds, bool const evaluate=true); 00979 ~isrpncomplex() {} 00980 rpnbase* copy() const; 00981 00982 string const name() const { return string("iscomplex"); } 00983 00984 void eval( deque<rpnbase*>& ds ); 00985 }; 00986 00987 class isrpnprogram : public rpnfunction 00988 { 00989 public: 00990 00991 isrpnprogram() {} 00992 isrpnprogram(deque<rpnbase*>& ds, bool const evaluate=true); 00993 ~isrpnprogram() {} 00994 rpnbase* copy() const; 00995 00996 string const name() const { return string("isprogram"); } 00997 00998 void eval( deque<rpnbase*>& ds ); 00999 }; 01000 01001 class pathcd: public rpnfunction 01002 { 01003 public: 01004 01005 pathcd() {} 01006 pathcd(deque<rpnbase*>& ds, bool const evaluate=true); 01007 ~pathcd() {} 01008 rpnbase* copy() const; 01009 01010 void visit(deque<rpnbase*>& ds,rpnstring& s); 01011 void visit(deque<rpnbase*>& ds,rpnprogram& p); 01012 01013 string const name() const { return string("cd"); } 01014 01015 void eval( deque<rpnbase*>& ds ); 01016 }; 01017 01018 class pathquery: public rpnfunction 01019 { 01020 public: 01021 01022 pathquery() {} 01023 pathquery(deque<rpnbase*>& ds, bool const evaluate=true); 01024 ~pathquery() {} 01025 rpnbase* copy() const; 01026 01027 void visit(deque<rpnbase*>& ds,rpnstring& s); 01028 01029 string const name() const { return string("ispath"); } 01030 01031 void eval( deque<rpnbase*>& ds ); 01032 }; 01033 01034 class varmv: public rpnfunction 01035 { 01036 public: 01037 01038 varmv() {} 01039 varmv(deque<rpnbase*>& ds, bool const evaluate=true); 01040 ~varmv() {} 01041 rpnbase* copy() const; 01042 01043 void visit(deque<rpnbase*>& ds,rpnstring& s); 01044 01045 string const name() const { return string("mv"); } 01046 01047 void eval( deque<rpnbase*>& ds ); 01048 }; 01049 01050 class rpncp: public rpnfunction 01051 { 01052 public: 01053 01054 rpncp() {} 01055 rpncp(deque<rpnbase*>& ds, bool const evaluate=true); 01056 ~rpncp() {} 01057 rpnbase* copy() const; 01058 01059 void visit(deque<rpnbase*>& ds,rpnstring& s); 01060 01061 string const name() const { return string("cp"); } 01062 01063 void eval( deque<rpnbase*>& ds ); 01064 }; 01065 01066 class rpninsert : public rpnfunction 01067 { 01068 public: 01069 01070 rpninsert() {} 01071 rpninsert(deque<rpnbase*>& ds, bool const evaluate=true); 01072 ~rpninsert() {} 01073 rpnbase* copy() const; 01074 01075 void visit(deque<rpnbase*>& ds,rpninteger& n); 01076 01077 string const name() const { return string("insert"); } 01078 01079 void eval( deque<rpnbase*>& ds ); 01080 }; 01081 01082 class rpnerase : public rpnfunction 01083 { 01084 public: 01085 01086 rpnerase() {} 01087 rpnerase(deque<rpnbase*>& ds, bool const evaluate=true); 01088 ~rpnerase() {} 01089 rpnbase* copy() const; 01090 01091 void visit(deque<rpnbase*>& ds,rpninteger& n); 01092 01093 string const name() const { return string("delete"); } 01094 01095 void eval( deque<rpnbase*>& ds ); 01096 }; 01097 01098 class rpnpointermake : public rpnfunction 01099 { 01100 public: 01101 01102 rpnpointermake() {} 01103 rpnpointermake(deque<rpnbase*>& ds, bool const evaluate=false); 01104 ~rpnpointermake() {} 01105 rpnbase* copy() const; 01106 01107 void visit(deque<rpnbase*>& ds,rpninteger& n); 01108 void visit(deque<rpnbase*>& ds,rpnstring& s); 01109 01110 string const name() const { return string("->"); } 01111 01112 void eval( deque<rpnbase*>& ds ); 01113 }; 01114 01115 class rpnvectormake : public rpnfunction 01116 { 01117 public: 01118 01119 rpnvectormake() {} 01120 rpnvectormake(deque<rpnbase*>& ds, bool const evaluate=false); 01121 ~rpnvectormake() {} 01122 rpnbase* copy() const; 01123 01124 void visit(deque<rpnbase*>& ds,rpninteger& n); 01125 void visit(deque<rpnbase*>& ds,rpnstring& s); 01126 01127 string const name() const { return string("[]"); } 01128 01129 void eval( deque<rpnbase*>& ds ); 01130 }; 01131 01132 class rpnvectorpointermake : public rpnfunction 01133 { 01134 public: 01135 01136 rpnvectorpointermake() {} 01137 rpnvectorpointermake( 01138 deque<rpnbase*>& ds, bool const evaluate=false); 01139 ~rpnvectorpointermake() {} 01140 rpnbase* copy() const; 01141 01142 void visit(deque<rpnbase*>& ds,rpnvector& v); 01143 void visit(deque<rpnbase*>& ds,rpnstring& s); 01144 void visit(deque<rpnbase*>& ds,rpninteger& k); 01145 01146 string const name() const { return string("->[]"); } 01147 01148 void eval( deque<rpnbase*>& ds ); 01149 }; 01150 01151 class pstream: public rpnfunction 01152 { 01153 public: 01154 01155 pstream() {} 01156 pstream(deque<rpnbase*>& ds, bool const evaluate=true); 01157 ~pstream() {} 01158 rpnbase* copy() const; 01159 01160 void visit(deque<rpnbase*>& ds,rpnprogram& pr); 01161 01162 string const name() const 01163 { return string("pstream"); } 01164 01165 void eval( deque<rpnbase*>& ds ); 01166 }; 01167 01168 class rpnintegerhex : public rpnfunction 01169 { 01170 public: 01171 01172 rpnintegerhex() {} 01173 rpnintegerhex(deque<rpnbase*>& ds, bool const evaluate=true); 01174 ~rpnintegerhex() {} 01175 rpnbase* copy() const; 01176 01177 string const name() const { return string("hex"); } 01178 01179 void eval( deque<rpnbase*>& ds ); 01180 }; 01181 01182 class rpnintegeroct : public rpnfunction 01183 { 01184 public: 01185 01186 rpnintegeroct() {} 01187 rpnintegeroct(deque<rpnbase*>& ds, bool const evaluate=true); 01188 ~rpnintegeroct() {} 01189 rpnbase* copy() const; 01190 01191 string const name() const { return string("oct"); } 01192 01193 void eval( deque<rpnbase*>& ds ); 01194 }; 01195 01196 class rpnintegerdec : public rpnfunction 01197 { 01198 public: 01199 01200 rpnintegerdec() {} 01201 rpnintegerdec(deque<rpnbase*>& ds, bool const evaluate=true); 01202 ~rpnintegerdec() {} 01203 rpnbase* copy() const; 01204 01205 string const name() const { return string("dec"); } 01206 01207 void eval( deque<rpnbase*>& ds ); 01208 }; 01209 01210 class rpnintegerbin : public rpnfunction 01211 { 01212 public: 01213 01214 rpnintegerbin() {} 01215 rpnintegerbin(deque<rpnbase*>& ds, bool const evaluate=true); 01216 ~rpnintegerbin() {} 01217 rpnbase* copy() const; 01218 01219 string const name() const { return string("binary"); } 01220 01221 void eval( deque<rpnbase*>& ds ); 01222 }; 01223 01224 class rpnbitnot: public rpnfunction 01225 { 01226 public: 01227 01228 rpnbitnot() {} 01229 rpnbitnot(deque<rpnbase*>& ds, bool const evaluate=true); 01230 ~rpnbitnot() {} 01231 rpnbase* copy() const; 01232 01233 void visit(deque<rpnbase*>& ds,rpninteger& n); 01234 01235 string const name() const { return string("not"); } 01236 01237 void eval( deque<rpnbase*>& ds ); 01238 }; 01239 01240 class rpnbitxor: public rpnfunction 01241 { 01242 public: 01243 01244 rpnbitxor() {} 01245 rpnbitxor(deque<rpnbase*>& ds, bool const evaluate=true); 01246 ~rpnbitxor() {} 01247 rpnbase* copy() const; 01248 01249 void visit(deque<rpnbase*>& ds,rpninteger& n); 01250 01251 string const name() const { return string("xor"); } 01252 01253 void eval( deque<rpnbase*>& ds ); 01254 }; 01255 01256 class rpnbitor: public rpnfunction 01257 { 01258 public: 01259 01260 rpnbitor() {} 01261 rpnbitor(deque<rpnbase*>& ds, bool const evaluate=true); 01262 ~rpnbitor() {} 01263 rpnbase* copy() const; 01264 01265 void visit(deque<rpnbase*>& ds,rpninteger& n); 01266 01267 string const name() const { return string("or"); } 01268 01269 void eval( deque<rpnbase*>& ds ); 01270 }; 01271 01272 class rpnbitand: public rpnfunction 01273 { 01274 public: 01275 01276 rpnbitand() {} 01277 rpnbitand(deque<rpnbase*>& ds, bool const evaluate=true); 01278 ~rpnbitand() {} 01279 rpnbase* copy() const; 01280 01281 void visit(deque<rpnbase*>& ds,rpninteger& n); 01282 01283 string const name() const { return string("and"); } 01284 01285 void eval( deque<rpnbase*>& ds ); 01286 }; 01287 01288 class rpnbitshiftleft: public rpnfunction 01289 { 01290 public: 01291 01292 rpnbitshiftleft() {} 01293 rpnbitshiftleft(deque<rpnbase*>& ds, bool const evaluate=true); 01294 ~rpnbitshiftleft() {} 01295 rpnbase* copy() const; 01296 01297 void visit(deque<rpnbase*>& ds,rpninteger& n); 01298 01299 string const name() const { return string("shl"); } 01300 01301 void eval( deque<rpnbase*>& ds ); 01302 }; 01303 01304 class rpnbitshiftright: public rpnfunction 01305 { 01306 public: 01307 01308 rpnbitshiftright() {} 01309 rpnbitshiftright(deque<rpnbase*>& ds, bool const evaluate=true); 01310 ~rpnbitshiftright() {} 01311 rpnbase* copy() const; 01312 01313 void visit(deque<rpnbase*>& ds,rpninteger& n); 01314 01315 string const name() const { return string("shr"); } 01316 01317 void eval( deque<rpnbase*>& ds ); 01318 }; 01319 01320 class rpnintegerconvert : public rpnfunction 01321 { 01322 public: 01323 01324 rpnintegerconvert() {} 01325 rpnintegerconvert(deque<rpnbase*>& ds, bool const evaluate=true); 01326 ~rpnintegerconvert() {} 01327 rpnbase* copy() const; 01328 01329 void visit(deque<rpnbase*>& ds,rpnstring& s); 01330 void visit(deque<rpnbase*>& ds,rpnreal& n); 01331 01332 string const name() const { return string("integer"); } 01333 01334 void eval( deque<rpnbase*>& ds ); 01335 }; 01336 01337 class rpnstringconvert : public rpnfunction 01338 { 01339 public: 01340 01341 rpnstringconvert() {} 01342 rpnstringconvert(deque<rpnbase*>& ds, bool const evaluate=true); 01343 ~rpnstringconvert() {} 01344 rpnbase* copy() const; 01345 01346 void visit(deque<rpnbase*>& ds,rpninteger& n); 01347 void visit(deque<rpnbase*>& ds,rpnreal& n); 01348 01349 string const name() const { return string("string"); } 01350 01351 void eval( deque<rpnbase*>& ds ); 01352 }; 01353 01354 class rpnfactorial: public rpnfunction 01355 { 01356 public: 01357 01358 rpnfactorial() {} 01359 rpnfactorial(deque<rpnbase*>& ds, bool const evaluate=true); 01360 ~rpnfactorial() {} 01361 rpnbase* copy() const; 01362 01363 void visit(deque<rpnbase*>& ds,rpninteger& n); 01364 01365 string const name() const { return string("factorial"); } 01366 01367 void eval( deque<rpnbase*>& ds ); 01368 }; 01369 01370 class rpnmod : public rpnfunction 01371 { 01372 public: 01373 01374 rpnmod() {} 01375 rpnmod(deque<rpnbase*>& ds, bool const evaluate=true); 01376 ~rpnmod() {} 01377 rpnbase* copy() const; 01378 01379 void visit(deque<rpnbase*>& ds,rpninteger& n); 01380 01381 string const name() const { return string("mod"); } 01382 01383 void eval( deque<rpnbase*>& ds ); 01384 }; 01385 01386 class rpnascii : public rpnfunction 01387 { 01388 public: 01389 01390 rpnascii() {} 01391 rpnascii(deque<rpnbase*>& ds, bool const evaluate=true); 01392 ~rpnascii() {} 01393 rpnbase* copy() const; 01394 01395 void visit(deque<rpnbase*>& ds,rpninteger& n); 01396 void visit(deque<rpnbase*>& ds,rpnstring& s); 01397 01398 string const name() const { return string("ascii"); } 01399 01400 void eval( deque<rpnbase*>& ds ); 01401 }; 01402 01403 class rpngcd : public rpnfunction 01404 { 01405 public: 01406 01407 rpngcd() {} 01408 rpngcd(deque<rpnbase*>& ds, bool const evaluate=true); 01409 ~rpngcd() {} 01410 rpnbase* copy() const; 01411 01412 void visit(deque<rpnbase*>& ds,rpninteger& n); 01413 01414 string const name() const { return string("gcd"); } 01415 01416 void eval( deque<rpnbase*>& ds ); 01417 }; 01418 01419 01420 01421 01422 01423 01424 01425 01426 01427 #endif 01428 01429 01430
1.5.8