add support for sleep sets...
[model-checker.git] / nodestack.h
index 8df67838c87c362518bdd3100bddcd4663254475..147b0048eb9cb00c82bf82c7855c2fe78a6414b8 100644 (file)
@@ -8,11 +8,14 @@
 #include <list>
 #include <vector>
 #include <cstddef>
-#include "threads.h"
+#include <inttypes.h>
+
 #include "mymemory.h"
-#include "clockvector.h"
+#include "modeltypes.h"
+#include "schedule.h"
 
 class ModelAction;
+class Thread;
 
 /**
  * A flag used for the promise counting/combination problem within a node,
@@ -57,14 +60,14 @@ public:
        /* return true = backtrack set is empty */
        bool backtrack_empty();
 
-       void explore_child(ModelAction *act, bool * is_enabled);
+       void explore_child(ModelAction *act, enabled_type_t * is_enabled);
        /* return false = thread was already in backtrack */
        bool set_backtrack(thread_id_t id);
        thread_id_t get_next_backtrack();
        bool is_enabled(Thread *t);
        bool is_enabled(thread_id_t tid);
        ModelAction * get_action() { return action; }
-       bool has_priority(thread_id_t tid) {return fairness[id_to_int(tid)].priority;}
+       bool has_priority(thread_id_t tid);
        int get_num_threads() {return num_threads;}
        /** @return the parent Node to this Node; that is, the action that
         * occurred previously in the stack. */
@@ -87,6 +90,7 @@ public:
        bool get_promise(unsigned int i);
        bool increment_promise();
        bool promise_empty();
+       enabled_type_t *get_enabled_array() {return enabled_array;}
 
        void print();
        void print_may_read_from();
@@ -102,7 +106,7 @@ private:
        std::vector< bool, ModelAlloc<bool> > backtrack;
        std::vector< struct fairness_info, ModelAlloc< struct fairness_info> > fairness;
        int numBacktracks;
-       bool *enabled_array;
+       enabled_type_t *enabled_array;
 
        /** The set of ModelActions that this the action at this Node may read
         *  from. Only meaningful if this Node represents a 'read' action. */
@@ -129,7 +133,7 @@ class NodeStack {
 public:
        NodeStack();
        ~NodeStack();
-       ModelAction * explore_action(ModelAction *act, bool * is_enabled);
+       ModelAction * explore_action(ModelAction *act, enabled_type_t * is_enabled);
        Node * get_head();
        Node * get_next();
        void reset_execution();