www.pudn.com > MathHead > MathNode.cpp
#include "StdAfx.h"
#include "mathnode.h"
CMathNode::CMathNode(void)
{
m_Type = Node_Null;
__RawData[0] = 0;
__RawData[1] = 0;
__RawData[2] = 0;
}
CMathNode::~CMathNode(void)
{
Null();
}
// Makes the CMathNode null
void CMathNode::Null(void)
{
if (m_Type == Node_Op)
{
for(unsigned int i = 0; i < m_nSubs; i++)
m_pSubArray[i].Null();
delete [] m_pSubArray;
}
m_Type = Node_Null;
__RawData[0] = 0;
__RawData[1] = 0;
__RawData[2] = 0;
}
// Moves contents of a CMathNode to another, making the source null
void CMathNode::MoveTo(CMathNode * pDest)
{
pDest->Null();
pDest->m_Type = m_Type;
pDest->__RawData[0] = __RawData[0];
pDest->__RawData[1] = __RawData[1];
pDest->__RawData[2] = __RawData[2];
m_Type = Node_Null;
__RawData[0] = 0;
__RawData[1] = 0;
__RawData[2] = 0;
}
void CMathNode::CopyTo(CMathNode * pDest)
{
pDest->Null();
pDest->m_Type = m_Type;
if (m_Type == Node_Op)
{
pDest->m_Op = m_Op;
pDest->m_nSubs = m_nSubs;
pDest->m_pSubArray = new CMathNode[m_nSubs];
for (unsigned int i = 0; i < m_nSubs; i++)
m_pSubArray[i].CopyTo(&pDest->m_pSubArray[i]);
}
else
{
pDest->__RawData[0] = __RawData[0];
pDest->__RawData[1] = __RawData[1];
pDest->__RawData[2] = __RawData[2];
}
}
// Turns a CMathNode into "Node_Exact'
bool CMathNode::MakeExact(__int64 val)
{
Null();
m_Type = Node_Exact;
m_Exact = val;
return false;
}
// Turns a CMathNode into "Node_Approx'
bool CMathNode::MakeApprox(double val)
{
Null();
m_Type = Node_Approx;
m_Approx = val;
return false;
}
// Turns a CMathNode into "Node_Var'
bool CMathNode::MakeVar(wchar_t var)
{
Null();
m_Type = Node_Var;
m_Var = var;
return false;
}
bool CMathNode::MakeOp(OpType type)
{
Null();
m_Type = Node_Op;
m_Op = type;
if (m_Op == Op_Null)
m_nSubs = 0;
else if (m_Op == Op_Add)
m_nSubs = 2;
else if (m_Op == Op_Sub)
m_nSubs = 2;
else if (m_Op == Op_Mul)
m_nSubs = 2;
else if (m_Op == Op_Div)
m_nSubs = 2;
else if (m_Op == Op_Exp)
m_nSubs = 2;
else if (m_Op == Op_ParOpen)
m_nSubs = 0;
else if (m_Op == Op_ParClose)
m_nSubs = 0;
else
return true;
return ((m_pSubArray = new CMathNode[m_nSubs]) == 0);
}