proj home

Files   Classes   Functions   Hierarchy  

pstream Class Reference

#include <rpnfunc.h>

Inheritance diagram for pstream:
Collaboration diagram for pstream:

List of all members.

Public Member Functions

 pstream ()
 pstream (deque< rpnbase * > &ds, bool const evaluate=true)
 ~pstream ()
rpnbasecopy () const
void visit (deque< rpnbase * > &ds, rpnprogram &pr)
string const name () const
void eval (deque< rpnbase * > &ds)


Detailed Description

Definition at line 1151 of file rpnfunc.h.


Constructor & Destructor Documentation

pstream::pstream (  )  [inline]

Definition at line 1155 of file rpnfunc.h.

Referenced by copy().

01155 {}

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

Definition at line 3711 of file rpnfunc.cpp.

References eval().

03712 {
03713   if (evaluate)
03714     eval(ds);
03715   else
03716     ds.push_front(this);
03717 }

pstream::~pstream (  )  [inline]

Definition at line 1157 of file rpnfunc.h.

01157 {}


Member Function Documentation

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

Reimplemented from rpnfunction.

Definition at line 3719 of file rpnfunc.cpp.

References pstream().

03720 {
03721   return new pstream(); 
03722 }

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

Reimplemented from rpnfunction.

Definition at line 3724 of file rpnfunc.cpp.

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

Referenced by pstream().

03725 {
03726   if (!ds.empty())
03727     ds[0]->accept(ds,*this);
03728 
03729   dec();
03730 }

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

Reimplemented from rpnfunction.

Definition at line 1162 of file rpnfunc.h.

01163     { return string("pstream"); }

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

Reimplemented from rpnfunction.

Definition at line 3733 of file rpnfunc.cpp.

References rpnprogram::eval(), rpnprogram::inc(), rpnbase::inc(), rpnbase::isprogram(), rpnprogram::print(), and rpnprogram::v.

03734 {
03735   if (ds.size()<2)
03736     return;
03737 
03738   rpnbase* x1 = ds[1];
03739   if (! x1->isprogram() )
03740     return;
03741 
03742   rpnprogram& p1 = *( (rpnprogram*) x1 );
03743 
03744   rpnprogram& p = * new rpnprogram(ds);
03745 
03746   rpnprogramstackstate().push(&p);
03747 
03748   if (!p1.v.empty())
03749   {
03750     rpnbase* w;
03751     for (unsigned int i=0, imax = p1.v.size(); i<imax; ++i)
03752     {
03753       w = p1.v[i];
03754       w->inc();
03755       p.v.push_front(w);
03756 
03757 cout << "*";
03758 p0.print(cout);
03759 cout << endl;
03760 
03761       p0.inc();
03762       p0.eval( p.v );
03763     }
03764   }
03765 
03766   if (!p.v.empty())
03767     reverse(p.v.begin(),p.v.end());
03768 
03769   rpnprogramstackstate().pop();
03770 }


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

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