+#include <string.h>
+
#include "nodestack.h"
#include "action.h"
#include "common.h"
* @param nthreads The number of threads which exist at this point in the
* execution trace.
*/
-Node::Node(ModelAction *act, Node *par, int nthreads)
+Node::Node(ModelAction *act, Node *par, int nthreads, bool *enabled)
: action(act),
parent(par),
num_threads(nthreads),
{
if (act)
act->set_node(this);
+ enabled_array=(bool *)MYMALLOC(sizeof(bool)*num_threads);
+ if (enabled != NULL)
+ memcpy(enabled_array, enabled, sizeof(bool)*num_threads);
+ else {
+ for(int i=0;i<num_threads;i++)
+ enabled_array[i]=false;
+ }
}
/** @brief Node desctructor */
{
if (action)
delete action;
+ MYFREE(enabled_array);
}
/** Prints debugging info for the ModelAction associated with this Node */
bool Node::is_enabled(Thread *t)
{
- return id_to_int(t->get_id()) < num_threads;
+ int thread_id=id_to_int(t->get_id());
+ return thread_id < num_threads && enabled_array[thread_id];
+}
+
+bool Node::is_enabled(thread_id_t tid)
+{
+ int thread_id=id_to_int(tid);
+ return thread_id < num_threads && enabled_array[thread_id];
}
/**
printf("............................................\n");
}
-ModelAction * NodeStack::explore_action(ModelAction *act)
+ModelAction * NodeStack::explore_action(ModelAction *act, bool * is_enabled)
{
DBG();
/* Record action */
get_head()->explore_child(act);
- node_list.push_back(new Node(act, get_head(), model->get_num_threads()));
+ node_list.push_back(new Node(act, get_head(), model->get_num_threads(), is_enabled));
total_nodes++;
iter++;
return NULL;