// 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 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_)