proj home

Files   Classes   Functions   Hierarchy  

rpnprogset Class Reference

#include <rpnfunc.h>

Inheritance diagram for rpnprogset:
Collaboration diagram for rpnprogset:

List of all members.

Public Member Functions

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


Detailed Description

Definition at line 11 of file rpnfunc.h.


Constructor & Destructor Documentation

rpnprogset::rpnprogset (  )  [inline]

Definition at line 15 of file rpnfunc.h.

Referenced by copy().

00015 {}

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

Definition at line 57 of file rpnfunc.cpp.

00061 {
00062   if (evaluate)
00063     eval(ds);
00064   else
00065     ds.push_front(this);
00066 }

rpnprogset::~rpnprogset (  )  [inline]

Definition at line 17 of file rpnfunc.h.

00017 {}


Member Function Documentation

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

Reimplemented from rpnfunction.

Definition at line 68 of file rpnfunc.cpp.

References rpnprogset().

00069 {
00070   return new rpnprogset(); 
00071 }

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

Reimplemented from rpnfunction.

Definition at line 73 of file rpnfunc.cpp.

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

00074 {
00075   if (!ds.empty())
00076     ds[0]->accept(ds,*this);
00077 
00078   dec();
00079 }

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

Reimplemented from rpnfunction.

Definition at line 23 of file rpnfunc.h.

00023 { return string("p@"); }

void rpnprogset::visit ( deque< rpnbase * > &  ds,
rpnprogram p 
) [virtual]

Reimplemented from rpnfunction.

Definition at line 50 of file rpnfunc.cpp.

References rpnprogram::state.

00051 {
00052   new rpninteger(ds,p.state);
00053 }

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

Reimplemented from rpnfunction.

Definition at line 25 of file rpnfunc.cpp.

References rpnbase::dec(), rpnbase::isprogram(), rpninteger::num, and rpnprogram::state.

00026 {
00027   if (ds.size()<2)
00028     return;
00029 
00030   rpnbase* x0 = ds.front();
00031   ds.pop_front();
00032   rpnbase* x1 = ds.front();
00033   bool restore(true);
00034   if (x1->isprogram())
00035   {
00036     rpnprogram * p = (rpnprogram*)x1;
00037     if ((n.num>=0)&&(n.num<4))
00038     { 
00039       restore=false;
00040       p->state = n.num;
00041       x0->dec();
00042     }
00043   }
00044 
00045   if (restore)
00046     ds.push_front(x0);
00047 }


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