return (numBacktracks == 0);
}
+
+/**
+ * Checks whether the readsfrom set for this node is empty.
+ * @return true if the readsfrom set is empty.
+ */
bool Node::readsfrom_empty() {
return ((read_from_index+1)>=may_read_from.size());
}
thread_id_t Node::get_next_backtrack()
{
- /* TODO: find next backtrack */
+ /** @todo Find next backtrack */
unsigned int i;
for (i = 0; i < backtrack.size(); i++)
if (backtrack[i] == true)
return may_read_from[read_from_index];
}
+/**
+ * Increments the index into the readsfrom set to explore the next item.
+ * @return Returns false if we have explored all items.
+ */
bool Node::increment_read_from() {
read_from_index++;
return (read_from_index<may_read_from.size());
return NULL;
}
-
+/**
+ * Empties the stack of all trailing nodes after a given position and calls the
+ * destructor for each. This function is provided an offset which determines
+ * how many nodes (relative to the current replay state) to save before popping
+ * the stack.
+ * @param numAhead gives the number of Nodes (including this Node) to skip over
+ * before removing nodes.
+ */
void NodeStack::pop_restofstack(int numAhead)
{
/* Diverging from previous execution; clear out remainder of list */
clear_node_list(&node_list, it, node_list.end());
}
-
Node * NodeStack::get_head()
{
if (node_list.empty())