proj home

Files   Classes   Functions   Hierarchy  

rpnpushn Class Reference

#include <rpnfunc.h>

Inheritance diagram for rpnpushn:
Collaboration diagram for rpnpushn:

List of all members.

Public Member Functions

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


Detailed Description

Definition at line 56 of file rpnfunc.h.


Constructor & Destructor Documentation

rpnpushn::rpnpushn (  )  [inline]

Definition at line 60 of file rpnfunc.h.

Referenced by copy().

00060 {}

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

Definition at line 140 of file rpnfunc.cpp.

References eval().

00141 {
00142   if (evaluate)
00143     eval(ds);
00144   else
00145     ds.push_front(this);
00146 }

rpnpushn::~rpnpushn (  )  [inline]

Definition at line 62 of file rpnfunc.h.

00062 {}


Member Function Documentation

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

Reimplemented from rpnfunction.

Definition at line 148 of file rpnfunc.cpp.

References rpnpushn().

00149 {
00150   return new rpnpushn(); 
00151 }

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

Reimplemented from rpnfunction.

Definition at line 153 of file rpnfunc.cpp.

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

Referenced by rpnpushn().

00154 {
00155   if (!ds.empty())
00156     ds[0]->accept(ds,*this);
00157 
00158   dec();
00159 }

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

Reimplemented from rpnfunction.

Definition at line 67 of file rpnfunc.h.

00067 { return string("pushn"); }

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

Reimplemented from rpnfunction.

Definition at line 161 of file rpnfunc.cpp.

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

00162 {
00163   if (k.num<0)
00164     return;
00165 
00166   unsigned int n = (unsigned int)(k.num);
00167 
00168   if (ds.size()<=n)
00169     return;
00170 
00171   rpnbase* x0 = ds.front();
00172   ds.pop_front();
00173 
00174   if (n==0)
00175     return;
00176 
00177   for (unsigned int i=0, imax=k.num; i<imax; ++i)
00178   {
00179     rpnprogramstackstate().ds2.push_front(ds.front());
00180     ds.pop_front();
00181   }
00182 
00183   x0->dec();
00184 }


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

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