Files Classes Functions Hierarchy
#include <rpnfunc.h>
Public Member Functions | |
| varmv () | |
| varmv (deque< rpnbase * > &ds, bool const evaluate=true) | |
| ~varmv () | |
| rpnbase * | copy () const |
| void | visit (deque< rpnbase * > &ds, rpnstring &s) |
| string const | name () const |
| void | eval (deque< rpnbase * > &ds) |
Definition at line 1034 of file rpnfunc.h.
Definition at line 3176 of file rpnfunc.cpp.
References eval().
03177 { 03178 if (evaluate) 03179 eval(ds); 03180 else 03181 ds.push_front(this); 03182 }
| rpnbase * varmv::copy | ( | ) | const [virtual] |
Reimplemented from rpnfunction.
Definition at line 3184 of file rpnfunc.cpp.
References varmv().
03185 { 03186 return new varmv(); 03187 }
| void varmv::eval | ( | deque< rpnbase * > & | ds | ) | [virtual] |
Reimplemented from rpnfunction.
Definition at line 3189 of file rpnfunc.cpp.
References rpnbase::accept(), and rpnbase::dec().
Referenced by varmv().
| string const varmv::name | ( | ) | const [inline, virtual] |
Reimplemented from rpnfunction.
Definition at line 3197 of file rpnfunc.cpp.
References rpnbase::dec(), rpnbase::isstring(), rpnstring::str, and rpnprogram::variables.
03198 { 03199 if (ds.size()<2) 03200 return; 03201 03202 if (!ds[1]->isstring()) 03203 return; 03204 03205 deque<rpnvar*>& vs = rpnprogramstackstate().vs(); 03206 if (vs.empty()) 03207 return; 03208 03209 rpnbase* x0 = ds.front(); 03210 ds.pop_front(); 03211 rpnbase* x1 = ds.front(); 03212 ds.pop_front(); 03213 03214 string nm(varname.str); 03215 bool found = false; 03216 unsigned int index; 03217 for (unsigned int i=0, imax=vs.size(); i<imax; ++i) 03218 { 03219 if (vs[i]->varname==nm) 03220 { 03221 found = true; 03222 index = i; 03223 i = imax; 03224 } 03225 } 03226 03227 if (!found) 03228 { 03229 ds.push_front(x1); 03230 ds.push_front(x0); 03231 return; 03232 } 03233 03234 rpnstring* s = (rpnstring*)x1; 03235 03236 rpnprogram* p; 03237 vector<string> v; 03238 pathstuff().convert(v,s->str); 03239 03240 pathstuff().findpath(found,p,v); 03241 03242 if (!found) 03243 { 03244 ds.push_front(x1); 03245 ds.push_front(x0); 03246 03247 return; 03248 } 03249 03250 p->variables.push_back( vs[index] ); 03251 vs.erase(vs.begin()+index); 03252 03253 x0->dec(); 03254 x1->dec(); 03255 }
1.5.8