*/
class Node {
public:
- Node(ModelAction *act = NULL, Node *par = NULL, int nthreads = 2, Node *prevfairness = NULL);
+ Node(ModelAction *act, Node *par, int nthreads, Node *prevfairness);
~Node();
/* return true = thread choice has already been explored */
bool has_been_explored(thread_id_t tid) const;
/* return true = backtrack set is empty */
bool backtrack_empty() const;
- void explore_child(ModelAction *act, enabled_type_t * 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 increment_read_from();
bool read_from_empty() const;
int get_read_from_size() const;
- const ModelAction * get_read_from_at(int i);
+ const ModelAction * get_read_from_at(int i) const;
void set_promise(unsigned int i, bool is_rmw);
bool get_promise(unsigned int i) const;
private:
void explore(thread_id_t tid);
- ModelAction *action;
- Node *parent;
- int num_threads;
+ ModelAction * const action;
+ Node * const parent;
+ const int num_threads;
std::vector< bool, ModelAlloc<bool> > explored_children;
std::vector< bool, ModelAlloc<bool> > backtrack;
std::vector< struct fairness_info, ModelAlloc< struct fairness_info> > fairness;
MEMALLOC
private:
node_list_t node_list;
- unsigned int iter;
+
+ /**
+ * @brief the index position of the current head Node
+ *
+ * This index is relative to node_list. The index should point to the
+ * current head Node. It is negative when the list is empty.
+ */
+ int head_idx;
int total_nodes;
};