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