1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#include "CxxPreProcessorExpression.h"
#include <wx/utils.h>
CxxPreProcessorExpression::CxxPreProcessorExpression(bool value)
: m_next(NULL)
, m_isNot(false)
, m_operand(kNONE)
, m_defined(false)
, m_valueSet(false)
, m_valueLong(value ? 1 : 0)
{
}
CxxPreProcessorExpression::~CxxPreProcessorExpression()
{
wxDELETE(m_next);
}
bool CxxPreProcessorExpression::IsTrue()
{
if(m_next && m_operand == kAND) {
return DoIsTrue() && m_next->IsTrue();
} else if(m_next && m_operand == kOR) {
return DoIsTrue() || m_next->IsTrue();
} else if(m_next && m_operand == kGreaterThan) {
return DoGetLong() > m_next->DoGetLong();
} else if(m_next && m_operand == kGreaterThanEqual) {
return DoGetLong() >= m_next->DoGetLong();
} else if(m_next && m_operand == kLowerThan) {
return DoGetLong() < m_next->DoGetLong();
} else if(m_next && m_operand == kLowerThanEqual) {
return DoGetLong() <= m_next->DoGetLong();
} else {
return DoIsTrue();
}
}
bool CxxPreProcessorExpression::DoIsTrue()
{
if(m_isNot) {
return !m_valueLong;
} else {
return m_valueLong;
}
}
CxxPreProcessorExpression* CxxPreProcessorExpression::SetNext(CxxPreProcessorExpression::eOperand operand,
CxxPreProcessorExpression* expr)
{
m_next = expr;
m_operand = operand;
return m_next;
}
void CxxPreProcessorExpression::SetNot()
{
m_isNot = !m_isNot;
}
void CxxPreProcessorExpression::SetValue(bool value)
{
m_valueLong = value ? 1 : 0;
m_valueSet = true;
}
double CxxPreProcessorExpression::DoGetLong()
{
return m_valueLong;
}
void CxxPreProcessorExpression::SetValue(double value)
{
m_valueLong = value;
m_valueSet = true;
}
|