builds
[c11tester.git] / cyclegraph.h
1 #ifndef CYCLEGRAPH_H
2 #define CYCLEGRAPH_H
3
4 #include "hashtable.h"
5 #include "action.h"
6 #include <vector>
7
8 class CycleNode;
9
10 /** @brief A graph of Model Actions for tracking cycles. */
11 class CycleGraph {
12  public:
13         CycleGraph();
14         void addEdge(ModelAction *from, ModelAction *to);
15         bool checkForCycles();
16
17  private:
18         CycleNode * getNode(ModelAction *);
19         HashTable<class ModelAction *, class CycleNode *, uintptr_t, 4> actionToNode;
20         bool checkReachable(CycleNode *from, CycleNode *to);
21         
22         bool hasCycles;
23
24 };
25
26 class CycleNode {
27  public:
28         CycleNode(ModelAction *action);
29         void addEdge(CycleNode * node);
30         std::vector<class CycleNode *> * getEdges();
31
32  private:
33         ModelAction *action;
34         std::vector<class CycleNode *> edges;
35 };
36
37 #endif