tree: remove tree_t, map thread ids via int, not thread_id_t
[c11tester.git] / tree.h
1 #ifndef __TREE_H__
2 #define __TREE_H__
3
4 #include <set>
5 #include <map>
6 #include "threads.h"
7
8 /*
9  * An n-ary tree
10  *
11  * A tree with n possible branches from each node - used for recording the
12  * execution paths we've executed / backtracked
13  */
14 class TreeNode {
15 public:
16         TreeNode(TreeNode *par);
17         ~TreeNode();
18         bool hasBeenExplored(thread_id_t id) { return children.find(id_to_int(id)) != children.end(); }
19         TreeNode * exploreChild(thread_id_t id);
20         thread_id_t getNextBacktrack();
21
22         /* Return 1 if already in backtrack, 0 otherwise */
23         int setBacktrack(thread_id_t id);
24         TreeNode * getRoot();
25         static int getTotalNodes() { return TreeNode::totalNodes; }
26 private:
27         TreeNode *parent;
28         std::map<int, class TreeNode *> children;
29         std::set<int> backtrack;
30         static int totalNodes;
31 };
32
33 #endif /* __TREE_H__ */