proj home

Files   Classes   Functions   Hierarchy  

varmv Class Reference

#include <rpnfunc.h>

Inheritance diagram for varmv:
Collaboration diagram for varmv:

List of all members.

Public Member Functions

 varmv ()
 varmv (deque< rpnbase * > &ds, bool const evaluate=true)
 ~varmv ()
rpnbasecopy () const
void visit (deque< rpnbase * > &ds, rpnstring &s)
string const name () const
void eval (deque< rpnbase * > &ds)


Detailed Description

Definition at line 1034 of file rpnfunc.h.


Constructor & Destructor Documentation

varmv::varmv (  )  [inline]

Definition at line 1038 of file rpnfunc.h.

Referenced by copy().

01038 {}

varmv::varmv ( deque< rpnbase * > &  ds,
bool const   evaluate = true 
)

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 }

varmv::~varmv (  )  [inline]

Definition at line 1040 of file rpnfunc.h.

01040 {}


Member Function Documentation

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().

03190 {
03191   if (!ds.empty())
03192     ds[0]->accept(ds,*this);
03193 
03194   dec();
03195 }

string const varmv::name (  )  const [inline, virtual]

Reimplemented from rpnfunction.

Definition at line 1045 of file rpnfunc.h.

01045 { return string("mv"); }

void varmv::visit ( deque< rpnbase * > &  ds,
rpnstring s 
) [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 }


The documentation for this class was generated from the following files:

Generated on Fri Mar 4 00:50:23 2011 for Chelton Evans Source by  doxygen 1.5.8