X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=nodestack.cc;h=bdccf3817a06615cc1d67216e8d0ed9480d4160e;hp=082835802629ac989c13e57ed4adbdd8de81eb48;hb=ac06a98f90fe5c333cd8628e72e11f532c0c6444;hpb=5e4a7d161cba81152ddcf295ee72fbb25ba3afaa diff --git a/nodestack.cc b/nodestack.cc index 08283580..bdccf381 100644 --- a/nodestack.cc +++ b/nodestack.cc @@ -27,7 +27,7 @@ Node::Node(ModelAction *act, Node *par, int nthreads) may_read_from(), read_from_index(0), future_values(), - future_index(0) + future_index(-1) { if (act) act->set_node(this); @@ -57,19 +57,83 @@ void Node::print_may_read_from() (*it)->print(); } +/** This method sets a promise to explore meeting with the given + * node. + * @param i is the promise index. + */ + +void Node::set_promise(uint32_t i) { + if (i>=promises.size()) + promises.resize(i+1,0); + promises[i]=1; +} + +/** This method looks up whether a given promise should be satisfied + * by this node. + * + * @param i is the promise index. + * @return true if the promise should be satisfied by the given model action. + */ + +bool Node::get_promise(uint32_t i) { + return (i0) { + i--; + if (promises[i]==2) + promises[i]=1; + } + return true; + } + } + return false; +} + +/** This method returns whether the promise set is empty. + * + * @return true if we have explored all promise combinations. + */ + +bool Node::promise_empty() { + for (unsigned int i=0;i=future_values.size()); +} + /** * Checks if the Thread associated with this thread ID has been explored from @@ -98,18 +162,11 @@ bool Node::backtrack_empty() * Checks whether the readsfrom set for this node is empty. * @return true if the readsfrom set is empty. */ -bool Node::readsfrom_empty() { +bool Node::read_from_empty() { return ((read_from_index+1)>=may_read_from.size()); } -/** - * Checks whether the future_values set for this node is empty. - * @return true if the future_values set is empty. - */ -bool Node::futurevalues_empty() { - return ((future_index+1)>=future_values.size()); -} /** * Mark the appropriate backtracking information for exploring a thread choice. @@ -205,7 +262,7 @@ bool Node::increment_read_from() { * @return Returns false if we have explored all values. */ -bool Node::increment_future_values() { +bool Node::increment_future_value() { future_index++; return (future_index