proj home

Files   Classes   Functions   Hierarchy  

rpndupn Class Reference

#include <rpnfunc.h>

Inheritance diagram for rpndupn:
Collaboration diagram for rpndupn:

List of all members.

Public Member Functions

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


Detailed Description

Definition at line 172 of file rpnfunc.h.


Constructor & Destructor Documentation

rpndupn::rpndupn (  )  [inline]

Definition at line 176 of file rpnfunc.h.

Referenced by copy().

00176 {}

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

Definition at line 394 of file rpnfunc.cpp.

References eval().

00395 {
00396   if (evaluate)
00397     eval(ds);
00398   else
00399     ds.push_front(this);
00400 }

rpndupn::~rpndupn (  )  [inline]

Definition at line 178 of file rpnfunc.h.

00178 {}


Member Function Documentation

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

Reimplemented from rpnfunction.

Definition at line 402 of file rpnfunc.cpp.

References rpndupn().

00403 {
00404   return new rpndupn(); 
00405 }

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

Reimplemented from rpnfunction.

Definition at line 407 of file rpnfunc.cpp.

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

Referenced by rpndupn().

00408 {
00409   if (!ds.empty())
00410     ds[0]->accept(ds,*this);
00411 
00412   dec();
00413 }

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

Reimplemented from rpnfunction.

Definition at line 183 of file rpnfunc.h.

00183 { return string("dupn"); }

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

Reimplemented from rpnfunction.

Definition at line 415 of file rpnfunc.cpp.

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

00416 {
00417   rpnbase* x0 = ds.front();
00418   ds.pop_front();
00419 
00420   unsigned int const k(n.num);
00421   x0->dec();
00422 
00423   if (n.num<=0)
00424     return;
00425 
00426   if (ds.size()<k)
00427     return;
00428 
00429   for (unsigned int i=0; i<k; ++i)
00430     ds.push_front( ds[k-1]->copy() );
00431 
00432 }


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