135 lines
2.9 KiB
C++
135 lines
2.9 KiB
C++
// Condition.h: interface for the CCondition class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined(AFX_CONDITION_H__160ED1FB_6106_4D5D_B298_0C66ED094B4B__INCLUDED_)
|
|
#define AFX_CONDITION_H__160ED1FB_6106_4D5D_B298_0C66ED094B4B__INCLUDED_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
#include <afxtempl.h>
|
|
|
|
class CConditionNode;
|
|
|
|
namespace NLLOGIC
|
|
{
|
|
class CLogicConditionNode;
|
|
class CLogicCondition;
|
|
}
|
|
|
|
typedef CList< CConditionNode*, CConditionNode* > TPtrConditionList;
|
|
|
|
|
|
/**
|
|
* class CConditionNode
|
|
*/
|
|
class CConditionNode
|
|
{
|
|
public:
|
|
enum TConditionType
|
|
{
|
|
NOT =0,
|
|
COMPARISON,
|
|
SUB_CONDITION,
|
|
|
|
TERMINATOR,
|
|
};
|
|
|
|
/// constructor
|
|
inline CConditionNode( CConditionNode *parent = NULL) : m_pParentNode(parent)
|
|
{
|
|
m_type = TERMINATOR;
|
|
m_dComparand = 0;
|
|
}
|
|
|
|
/// copy constructor, also copy all sub nodes (and allocate new nodes for them)
|
|
CConditionNode( const CConditionNode &node);
|
|
|
|
|
|
///destructor
|
|
~CConditionNode();
|
|
|
|
|
|
/// get the node as a string for display
|
|
const CString &getNodeAsString() const;
|
|
|
|
inline CConditionNode *getParentNode() { return m_pParentNode; }
|
|
|
|
/// change all the occurences of the 'old' condition into 'newName' (recursive)
|
|
void changeConditionName( const CString &old, const CString &newName);
|
|
|
|
/// change all the occurences of the 'old' condition into 'newName' (recursive)
|
|
void conditionDeleted( const CString &name);
|
|
|
|
|
|
// attributes
|
|
public:
|
|
/// \name condition logic block
|
|
//@{
|
|
/// type of the block
|
|
TConditionType m_type;
|
|
|
|
/// if sub condition block
|
|
CString m_sConditionName;
|
|
|
|
/// if Comparison :
|
|
CString m_sVariableName;
|
|
CString m_sOperator; //in set '<' '>' '<=' >=' '=' '!='
|
|
double m_dComparand;
|
|
//@}
|
|
|
|
/// the sub conditions tree
|
|
TPtrConditionList m_ctSubTree;
|
|
|
|
/// pointer on the 'parent' node, or NULL if this node is a first level node
|
|
CConditionNode * m_pParentNode;
|
|
|
|
private:
|
|
mutable CString m_sNodeString;
|
|
};
|
|
|
|
|
|
/**
|
|
* class CCondition
|
|
*/
|
|
class CCondition
|
|
{
|
|
public:
|
|
/// constructor
|
|
CCondition();
|
|
|
|
/// copy constructor
|
|
CCondition( const CCondition &cond);
|
|
|
|
/// change all the occurences of the 'old' condition into 'newName' (for the nodes)
|
|
void changeConditionName( CString old, const CString &newName) const;
|
|
|
|
// the specified condition has been deleted, delete all references to it
|
|
void conditionDeleted( CString name);
|
|
|
|
virtual ~CCondition();
|
|
|
|
|
|
// attributes:
|
|
public:
|
|
CString m_sName;
|
|
|
|
TPtrConditionList m_ctConditionTree;
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
* cConditionToCLogicCondition
|
|
*/
|
|
void cConditionToCLogicCondition( CCondition& condition, NLLOGIC::CLogicCondition& logicCondition );
|
|
|
|
/**
|
|
* cLogicConditionToCCondition
|
|
*/
|
|
void cLogicConditionToCCondition( const NLLOGIC::CLogicCondition& logicCondition, CCondition& condition );
|
|
|
|
|
|
#endif // !defined(AFX_CONDITION_H__160ED1FB_6106_4D5D_B298_0C66ED094B4B__INCLUDED_)
|