X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=nodestack.cc;h=2416ed7c5b35d23deadd2f2681cd890a926e7f98;hb=fe5598b01eb1a72a708a67a1a004149b8bcbc83a;hp=a39701eaf871c90a7da3b41e2f296421dd4d6186;hpb=c01d975387b4fc4b711acbdbdc19e3690985adec;p=model-checker.git diff --git a/nodestack.cc b/nodestack.cc index a39701e..2416ed7 100644 --- a/nodestack.cc +++ b/nodestack.cc @@ -24,12 +24,10 @@ Node::Node(ModelAction *act, Node *par, int nthreads) explored_children(num_threads), backtrack(num_threads), numBacktracks(0), - may_read_from(NULL) + may_read_from() { if (act) act->set_node(this); - if (act && act->is_read()) - may_read_from = new action_set_t(); } /** @brief Node desctructor */ @@ -48,6 +46,14 @@ void Node::print() printf("******** empty action ********\n"); } +/** @brief Prints info about may_read_from set */ +void Node::print_may_read_from() +{ + readfrom_set_t::iterator it; + for (it = may_read_from.begin(); it != may_read_from.end(); it++) + (*it)->print(); +} + /** * Checks if the Thread associated with this thread ID has been explored from * this Node already. @@ -119,10 +125,25 @@ bool Node::is_enabled(Thread *t) * Add an action to the may_read_from set. * @param act is the action to add */ -void Node::add_read_from(ModelAction *act) +void Node::add_read_from(const ModelAction *act) { - ASSERT(may_read_from); - may_read_from->insert(act); + may_read_from.push_back(act); +} + +/** + * Gets the next 'may_read_from' action from this Node. Only valid for a node + * where this->action is a 'read'. + * @todo Perform reads_from backtracking/replay properly, so that this function + * may remove elements from may_read_from + * @return The first element in may_read_from + */ +const ModelAction * Node::get_next_read_from() { + const ModelAction *act; + ASSERT(!may_read_from.empty()); + act = may_read_from.front(); + /* TODO: perform reads_from replay properly */ + /* may_read_from.pop_front(); */ + return act; } void Node::explore(thread_id_t tid)