proj home

Files   Classes   Functions   Hierarchy  

rpnerase Class Reference

#include <rpnfunc.h>

Inheritance diagram for rpnerase:
Collaboration diagram for rpnerase:

List of all members.

Public Member Functions

 rpnerase ()
 rpnerase (deque< rpnbase * > &ds, bool const evaluate=true)
 ~rpnerase ()
rpnbasecopy () const
void visit (deque< rpnbase * > &ds, rpninteger &n)
string const name () const
void eval (deque< rpnbase * > &ds)


Detailed Description

Definition at line 1082 of file rpnfunc.h.


Constructor & Destructor Documentation

rpnerase::rpnerase (  )  [inline]

Definition at line 1086 of file rpnfunc.h.

Referenced by copy().

01086 {}

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

Definition at line 3384 of file rpnfunc.cpp.

References eval().

03385 {
03386   if (evaluate)
03387     eval(ds);
03388   else
03389     ds.push_front(this);
03390 }

rpnerase::~rpnerase (  )  [inline]

Definition at line 1088 of file rpnfunc.h.

01088 {}


Member Function Documentation

rpnbase * rpnerase::copy (  )  const [virtual]

Reimplemented from rpnfunction.

Definition at line 3392 of file rpnfunc.cpp.

References rpnerase().

03393 {
03394   return new rpnerase(); 
03395 }

void rpnerase::eval ( deque< rpnbase * > &  ds  )  [virtual]

Reimplemented from rpnfunction.

Definition at line 3397 of file rpnfunc.cpp.

References rpnbase::accept(), and rpnbase::dec().

Referenced by rpnerase().

03398 {
03399   if (!ds.empty())
03400     ds[0]->accept(ds,*this);
03401 
03402   dec();
03403 }

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

Reimplemented from rpnfunction.

Definition at line 1093 of file rpnfunc.h.

01093 { return string("delete"); }

void rpnerase::visit ( deque< rpnbase * > &  ds,
rpninteger n 
) [virtual]

Reimplemented from rpnfunction.

Definition at line 3405 of file rpnfunc.cpp.

References rpnbase::dec(), and rpninteger::num.

03406 {
03407   if (ds.size()<2)
03408     return;
03409 
03410   if (n.num<0)
03411     return;
03412 
03413   unsigned int k = (unsigned int)(n.num);
03414 
03415   if (k+1>=ds.size())
03416     return;
03417 
03418   rpnbase* x0 = ds.front();
03419   ds.pop_front();
03420  
03421   deque<rpnbase*>::iterator i = ds.begin()+k;
03422   (*i)->dec();
03423   ds.erase(i);
03424 
03425   x0->dec();
03426 }


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

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