Files Classes Functions Hierarchy
00001 #ifndef SCOPEDEPENDENTFUNCTIONS_H 00002 #define SCOPEDEPENDENTFUNCTIONS_H 00003 00004 #include <cassert> 00005 #include <deque> 00006 #include <string> 00007 #include <iostream> 00008 using namespace std; 00009 00010 #include <rpn.h> 00011 00012 00013 /* Brief: Function form of @+ .*/ 00014 class stateevalset : public rpnfunction 00015 { 00016 public: 00017 00018 stateevalset() {} 00019 stateevalset(deque<rpnbase*>& ds, bool const evaluate=true); 00020 ~stateevalset() {} 00021 rpnbase* copy() const; 00022 00023 string const name() const { return string("stateevalset"); } 00024 00025 void eval( deque<rpnbase*>& ds ); 00026 }; 00027 00028 /* Brief: Function form of @- .*/ 00029 class stateevalunset : public rpnfunction 00030 { 00031 public: 00032 00033 stateevalunset() {} 00034 stateevalunset(deque<rpnbase*>& ds, bool const evaluate=true); 00035 ~stateevalunset() {} 00036 rpnbase* copy() const; 00037 00038 string const name() const { return string("stateevalunset"); } 00039 00040 void eval( deque<rpnbase*>& ds ); 00041 }; 00042 00043 class stateevalquery : public rpnfunction 00044 { 00045 public: 00046 00047 stateevalquery() {} 00048 stateevalquery(deque<rpnbase*>& ds, bool const evaluate=true); 00049 ~stateevalquery() {} 00050 rpnbase* copy() const; 00051 00052 string const name() const 00053 { return string("stateevalis"); } 00054 00055 void eval( deque<rpnbase*>& ds ); 00056 }; 00057 00058 /* Brief: Read in a environment. This resets 00059 the current environment. 00060 00061 Note: load and dictadd are coupled classes 00062 in responsibity for maintaining a valid 00063 dictionary(pointers). 00064 00065 In rpn the user can edit their user functions 00066 and the dictionary holds a pointer to 00067 that function. 00068 */ 00069 class load: public rpnfunction 00070 { 00071 void bin(); 00072 public: 00073 00074 load() {} 00075 load(deque<rpnbase*>& ds, bool const evaluate=true); 00076 ~load() {} 00077 rpnbase* copy() const; 00078 00079 void visit(deque<rpnbase*>& ds,rpnstring& fname); 00080 00081 string const name() const { return string("load"); } 00082 00083 void eval( deque<rpnbase*>& ds ); 00084 }; 00085 00086 /* Brief: Write the environment out to a a file. */ 00087 class rpnsave: public rpnfunction 00088 { 00089 void writevariables(ostream& os, rpnprogram* p); 00090 void writeprogram(ostream& os, rpnprogram* p); 00091 public: 00092 00093 rpnsave() {} 00094 rpnsave(deque<rpnbase*>& ds, bool const evaluate=true); 00095 ~rpnsave() {} 00096 rpnbase* copy() const; 00097 00098 void visit(deque<rpnbase*>& ds,rpnstring& fname); 00099 00100 string const name() const { return string("save"); } 00101 00102 void eval( deque<rpnbase*>& ds ); 00103 }; 00104 00105 /* Brief: Add a user function to the dictionary. */ 00106 class dictadd: public rpnfunction 00107 { 00108 public: 00109 00110 dictadd() {} 00111 dictadd(deque<rpnbase*>& ds, bool const evaluate=true); 00112 ~dictadd() {} 00113 rpnbase* copy() const; 00114 00115 void visit(deque<rpnbase*>& ds,rpnstring& fname); 00116 00117 string const name() const 00118 { return string("dictadd"); } 00119 00120 void eval( deque<rpnbase*>& ds ); 00121 }; 00122 00123 /* Brief: Interpret the string as input. */ 00124 class rpninterp: public rpnfunction 00125 { 00126 public: 00127 00128 rpninterp() {} 00129 rpninterp(deque<rpnbase*>& ds, bool const evaluate=true); 00130 ~rpninterp() {} 00131 rpnbase* copy() const; 00132 00133 void visit(deque<rpnbase*>& ds,rpnstring& s ); 00134 00135 string const name() const { return string("interp"); } 00136 00137 void eval( deque<rpnbase*>& ds ); 00138 }; 00139 00140 /* 00141 class read: public rpnfunction 00142 { 00143 void bin(); 00144 public: 00145 00146 read() {} 00147 read(deque<rpnbase*>& ds, bool const evaluate=true); 00148 ~read() {} 00149 rpnbase* copy() const; 00150 00151 void visit(deque<rpnbase*>& ds,rpnstring& fname); 00152 00153 string const name() const { return string("read"); } 00154 00155 void eval( deque<rpnbase*>& ds ); 00156 }; 00157 */ 00158 00159 00160 // 00161 // Initialize the scope dependent functions, 00162 // called after scope initialized. 00163 // 00164 class initscopedependentfunctions 00165 { 00166 public: 00167 00168 initscopedependentfunctions(); 00169 00170 }; 00171 00172 00173 00174 00175 00176 #endif 00177 00178
1.5.8