proj home

Files   Classes   Functions   Hierarchy  

rpnpopn Class Reference

#include <rpnfunc.h>

Inheritance diagram for rpnpopn:
Collaboration diagram for rpnpopn:

List of all members.

Public Member Functions

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


Detailed Description

Definition at line 72 of file rpnfunc.h.


Constructor & Destructor Documentation

rpnpopn::rpnpopn (  )  [inline]

Definition at line 76 of file rpnfunc.h.

Referenced by copy().

00076 {}

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

Definition at line 187 of file rpnfunc.cpp.

References eval().

00188 {
00189   if (evaluate)
00190     eval(ds);
00191   else
00192     ds.push_front(this);
00193 }

rpnpopn::~rpnpopn (  )  [inline]

Definition at line 78 of file rpnfunc.h.

00078 {}


Member Function Documentation

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

Reimplemented from rpnfunction.

Definition at line 195 of file rpnfunc.cpp.

References rpnpopn().

00196 {
00197   return new rpnpopn(); 
00198 }

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

Reimplemented from rpnfunction.

Definition at line 200 of file rpnfunc.cpp.

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

Referenced by rpnpopn().

00201 {
00202   if (!ds.empty())
00203     ds[0]->accept(ds,*this);
00204 
00205   dec();
00206 }

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

Reimplemented from rpnfunction.

Definition at line 83 of file rpnfunc.h.

00083 { return string("popn"); }

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

Reimplemented from rpnfunction.

Definition at line 208 of file rpnfunc.cpp.

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

00209 {
00210   if (k.num<0)
00211     return;
00212 
00213   unsigned int n = (unsigned int)(k.num);
00214 
00215   if (rpnprogramstackstate().ds2.size()<n)
00216     return;
00217 
00218   rpnbase* x0 = ds.front();
00219   ds.pop_front();
00220 
00221   if (n==0)
00222     return;
00223 
00224   for (unsigned int i=0, imax=n; i<imax; ++i)
00225   {
00226     ds.push_front( rpnprogramstackstate().ds2.front() );
00227     rpnprogramstackstate().ds2.pop_front();
00228   }
00229 
00230   x0->dec();
00231 }


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

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