proj home

Files   Classes   Functions   Hierarchy  

rpnvectormake Class Reference

#include <rpnfunc.h>

Inheritance diagram for rpnvectormake:
Collaboration diagram for rpnvectormake:

List of all members.

Public Member Functions

 rpnvectormake ()
 rpnvectormake (deque< rpnbase * > &ds, bool const evaluate=false)
 ~rpnvectormake ()
rpnbasecopy () const
void visit (deque< rpnbase * > &ds, rpninteger &n)
void visit (deque< rpnbase * > &ds, rpnstring &s)
string const name () const
void eval (deque< rpnbase * > &ds)


Detailed Description

Definition at line 1115 of file rpnfunc.h.


Constructor & Destructor Documentation

rpnvectormake::rpnvectormake (  )  [inline]

Definition at line 1119 of file rpnfunc.h.

Referenced by copy().

01119 {}

rpnvectormake::rpnvectormake ( deque< rpnbase * > &  ds,
bool const   evaluate = false 
)

Definition at line 3483 of file rpnfunc.cpp.

References eval().

03484 {
03485   if (evaluate)
03486     eval(ds);
03487   else
03488     ds.push_front(this);
03489 }

rpnvectormake::~rpnvectormake (  )  [inline]

Definition at line 1121 of file rpnfunc.h.

01121 {}


Member Function Documentation

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

Reimplemented from rpnfunction.

Definition at line 3491 of file rpnfunc.cpp.

References rpnvectormake().

03492 {
03493   return new rpnvectormake(); 
03494 }

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

Reimplemented from rpnfunction.

Definition at line 3496 of file rpnfunc.cpp.

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

Referenced by rpnvectormake().

03497 {
03498   if (!ds.empty())
03499     ds[0]->accept(ds,*this);
03500 
03501   dec();
03502 }

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

Reimplemented from rpnfunction.

Definition at line 1127 of file rpnfunc.h.

01127 { return string("[]"); }

void rpnvectormake::visit ( deque< rpnbase * > &  ds,
rpnstring s 
) [virtual]

Reimplemented from rpnfunction.

Definition at line 3524 of file rpnfunc.cpp.

References rpnbase::dec(), rpnbase::isinteger(), and rpnstring::str.

03525 {
03526   if (ds.size()<=3)
03527     return;
03528 
03529   rpnbase* x1 = ds[1];
03530   if (!x1->isinteger())
03531     return;
03532 
03533   int n = ((rpninteger*)x1)->num;
03534   if ( n<0 )
03535     return;
03536 
03537   unsigned int k = (unsigned int)n;
03538   if (k+2>=ds.size())
03539     return;
03540 
03541   rpnbase* x0 = ds.front();
03542   ds.pop_front();
03543   ds.pop_front();
03544 
03545   new rpnvar
03546   ( 
03547     *(rpnprogramstackstate().ps->front()),
03548     new rpnvector(k),
03549     s.str
03550   );
03551 
03552   x0->dec();
03553   x1->dec();
03554 }

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

Reimplemented from rpnfunction.

Definition at line 3504 of file rpnfunc.cpp.

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

03505 {
03506   if (ds.size()<=2)
03507     return;
03508 
03509   if (n.num<0)
03510     return;
03511 
03512   unsigned int k = (unsigned int)(n.num);
03513   if (k+1>=ds.size())
03514     return;
03515 
03516   rpnbase* x0 = ds.front();
03517   ds.pop_front();
03518   x0->dec();
03519  
03520   rpnbase* xk = new rpnvector(k);
03521   ds.push_front( xk );
03522 }


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