-
Notifications
You must be signed in to change notification settings - Fork 1
/
Dependency.h
116 lines (86 loc) · 2.53 KB
/
Dependency.h
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#ifndef _DEPENDENCY_
#define _DEPENDENCY_
#include "ExpressionNode.h"
#include <set>
class Clash;
enum DependencyTypes
{
DEPENDENCY_CLASH = 0,
DEPENDENCY_MERGE,
DEPENDENCY_TYPE,
DEPENDENCY_BRANCHADD,
DEPENDENCY_CLOSEBRANCH,
};
class Dependency
{
public:
Dependency();
//virtual int hashCode() = 0;
virtual bool isEqual(const Dependency* pDependency) const = 0;
short m_iDependencyType;
};
/*************************************************************************/
class ClashDependency : public Dependency
{
public:
ClashDependency();
ClashDependency(ExprNode* pAssertion, Clash* pClash);
bool isEqual(const Dependency* pDependency) const;
ExprNode* m_pAssertion;
Clash* m_pClash;
};
/*************************************************************************/
class TypeDependency : public Dependency
{
public:
TypeDependency(ExprNode* pInd, ExprNode* pType);
bool isEqual(const Dependency* pDependency) const;
ExprNode* m_pType;
ExprNode* m_pInd;
};
/*************************************************************************/
class MergeDependency : public Dependency
{
public:
MergeDependency(ExprNode* pInd, ExprNode* pMergeIntoInd);
bool isEqual(const Dependency* pDependency) const;
ExprNode* m_pInd;
ExprNode* m_pMergeIntoInd;
};
/*************************************************************************/
class Branch;
class BranchDependency : public Dependency
{
public:
BranchDependency(ExprNode* pAssertion);
bool isEqual(const Dependency* pDependency) const;
ExprNode* m_pAssertion;
};
typedef set<BranchDependency*> BranchDependencySet;
/*************************************************************************/
class BranchAddDependency : public BranchDependency
{
public:
BranchAddDependency(ExprNode* pAssertion, int iIndex, Branch* pBranch);
bool isEqual(const Dependency* pDependency) const;
Branch* m_pBranch;
};
/*************************************************************************/
class CloseBranchDependency : public BranchDependency
{
public:
CloseBranchDependency(ExprNode* pAssertion, int iTryNext, Branch* pBranch);
bool isEqual(const Dependency* pDependency) const;
ExprNode* getInd() const;
Branch* m_pBranch;
int m_iTryNext;
};
/*************************************************************************/
struct strCmpDependency
{
bool operator()( const Dependency* pClashDep1, const Dependency* pClashDep2 ) const {
return pClashDep1->isEqual(pClashDep2);
}
};
typedef set<Dependency*, strCmpDependency> SetOfDependency;
#endif