proj home

Files   Classes   Functions   Hierarchy  

rpninsert Class Reference

#include <rpnfunc.h>

Inheritance diagram for rpninsert:
Collaboration diagram for rpninsert:

List of all members.

Public Member Functions

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


Detailed Description

Definition at line 1066 of file rpnfunc.h.


Constructor & Destructor Documentation

rpninsert::rpninsert (  )  [inline]

Definition at line 1070 of file rpnfunc.h.

Referenced by copy().

01070 {}

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

Definition at line 3339 of file rpnfunc.cpp.

References eval().

03340 {
03341   if (evaluate)
03342     eval(ds);
03343   else
03344     ds.push_front(this);
03345 }

rpninsert::~rpninsert (  )  [inline]

Definition at line 1072 of file rpnfunc.h.

01072 {}


Member Function Documentation

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

Reimplemented from rpnfunction.

Definition at line 3347 of file rpnfunc.cpp.

References rpninsert().

03348 {
03349   return new rpninsert(); 
03350 }

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

Reimplemented from rpnfunction.

Definition at line 3352 of file rpnfunc.cpp.

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

Referenced by rpninsert().

03353 {
03354   if (!ds.empty())
03355     ds[0]->accept(ds,*this);
03356 
03357   dec();
03358 }

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

Reimplemented from rpnfunction.

Definition at line 1077 of file rpnfunc.h.

01077 { return string("insert"); }

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

Reimplemented from rpnfunction.

Definition at line 3360 of file rpnfunc.cpp.

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

03361 {
03362   if (ds.size()<2)
03363     return;
03364 
03365   if (n.num<0)
03366     return;
03367 
03368   unsigned int k = (unsigned int)(n.num);
03369 
03370   if (k+2>ds.size())
03371     return;
03372 
03373   rpnbase* x0 = ds.front();
03374   ds.pop_front();
03375   rpnbase* x1 = ds.front();
03376   ds.pop_front();
03377  
03378   ds.insert(ds.begin()+k,x1);
03379 
03380   x0->dec();
03381 }


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

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