X-Git-Url: http://plrg.eecs.uci.edu/git/?p=model-checker.git;a=blobdiff_plain;f=tree.h;h=e107a7ef76f1d2805d7f1005e1313b1fc1184750;hp=676cbe4608923b12de245b947c142a64727bf26c;hb=7ff2770de1315e88ea63e21dbaee9edda0e39827;hpb=ad3c7c39632343541f85667ed6ae2e27bc18d0e9 diff --git a/tree.h b/tree.h index 676cbe4..e107a7e 100644 --- a/tree.h +++ b/tree.h @@ -1,9 +1,12 @@ +#ifndef __TREE_H__ +#define __TREE_H__ +#include "mymemory.h" #include #include +#include #include "threads.h" -typedef thread_id_t tree_t; -#define TREE_T_NONE THREAD_ID_T_NONE +class ModelAction; /* * An n-ary tree @@ -13,19 +16,25 @@ typedef thread_id_t tree_t; */ class TreeNode { public: - TreeNode(TreeNode *par); + TreeNode(TreeNode *par = NULL, ModelAction *act = NULL); ~TreeNode(); - bool hasBeenExplored(tree_t id) { return children.find(id) != children.end(); } - TreeNode *exploreChild(tree_t id); - tree_t getNextBacktrack(); + bool hasBeenExplored(thread_id_t id) { return children.find(id_to_int(id)) != children.end(); } + TreeNode * explore_child(ModelAction *act); + thread_id_t getNextBacktrack(); /* Return 1 if already in backtrack, 0 otherwise */ - int setBacktrack(tree_t id); - TreeNode *getRoot(); + int setBacktrack(thread_id_t id); + TreeNode * getRoot(); static int getTotalNodes() { return TreeNode::totalNodes; } + + bool is_enabled(Thread *t); + MEMALLOC private: TreeNode *parent; - std::map children; - std::set backtrack; + std::map, MyAlloc< std::pair< const int, class TreeNode * > > > children; + std::set, MyAlloc< int > > backtrack; static int totalNodes; + int num_threads; }; + +#endif /* __TREE_H__ */