📄 expression.cpp
字号:
#include "stdafx.h"
#include "math.h"
#include "Expression.h"
#include <ctype.h>
#include "ExpressionPage.h"
///////////////////////////////////////////////////////////////////////////
//class CExpression
CExpression::CExpression()
{
}
CExpression::CExpression(int num)
{
InitVariabileMap(num);
}
CExpression::~CExpression()
{
DestroyVariableMap();
}
void CExpression::InitVariabileMap(int num)
{
m_VarsMap.InitHashTable(num);
m_expression.AtachVariables(&m_VarsMap);
}
void CExpression::DestroyVariableMap()
{
if(m_VarsMap.GetCount()==0) return;
POSITION pos = m_VarsMap.GetStartPosition();
CString sName;
CValue *pVal;
while (pos != NULL)
{
m_VarsMap.GetNextAssoc (pos, sName, pVal);
delete pVal;
}
m_VarsMap.RemoveAll();
}
void CExpression::RemoveVariable(CString VarName)
{
CValue *pVal;
if(!m_VarsMap.Lookup(VarName,pVal)) return;
delete pVal;
m_VarsMap.RemoveKey(VarName);
}
//增加一个变量表达式
void CExpression::AddVariable(CString VarName, CString ExpressionValue)
{
CExpressionBase *expresie = new CExpressionBase(&m_VarsMap);
expresie->ChangeExpression(ExpressionValue);
CExpValue *value = new CExpValue;
value->SetValue(expresie);
m_VarsMap[VarName] = value;
}
void CExpression::SetVarValue(CString VarName, CString ExpressionValue)
{
CExpressionBase *expresie = new CExpressionBase(&m_VarsMap);
expresie->ChangeExpression(ExpressionValue);
CExpValue *value = (CExpValue*)(m_VarsMap[VarName]);
value->SetValue(expresie);
}
//增加一个双精度型的变量
void CExpression::AddVariable(CString VarName, double data)
{
CNumericValue *value = new CNumericValue;
value->SetValue(data);
m_VarsMap[VarName] = value;
}
void CExpression::SetVarValue(CString VarName, double data)
{
CNumericValue *value = (CNumericValue*)(m_VarsMap[VarName]);
if(value == NULL)return;
value->SetValue(data);
}
int CExpression::SetExpression(CString strValue)
{
return m_expression.ChangeExpression(strValue);
}
int CExpression::GetValue(double &value)
{
return m_expression.Value(value);
}
CMapVariabile* CExpression::GetVarMap()
{
return &m_VarsMap;
}
int CExpression::EditExpression(CString &sExpression)
{
CPropertySheet sheet(IDS_STRING_Title);;
CExpressionPage page;
page.pVariable=&m_VarsMap;
page.sExpression=sExpression;
sheet.AddPage(&page);
if(sheet.DoModal()!=IDOK)return 0;
sExpression=page.sExpression;
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -