tree: fix header for potential multiple inclusions
[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 typedef thread_id_t tree_t;
9 #define TREE_T_NONE     THREAD_ID_T_NONE
10
11 /*
12  * An n-ary tree
13  *
14  * A tree with n possible branches from each node - used for recording the
15  * execution paths we've executed / backtracked
16  */
17 class TreeNode {
18 public:
19         TreeNode(TreeNode *par);
20         ~TreeNode();
21         bool hasBeenExplored(tree_t id) { return children.find(id) != children.end(); }
22         TreeNode * exploreChild(tree_t id);
23         tree_t getNextBacktrack();
24
25         /* Return 1 if already in backtrack, 0 otherwise */
26         int setBacktrack(tree_t id);
27         TreeNode * getRoot();
28         static int getTotalNodes() { return TreeNode::totalNodes; }
29 private:
30         TreeNode *parent;
31         std::map<tree_t, class TreeNode *> children;
32         std::set<tree_t> backtrack;
33         static int totalNodes;
34 };
35
36 #endif /* __TREE_H__ */