/** @brief Constructor */
ModelHistory::ModelHistory() :
func_counter(1), /* function id starts with 1 */
+ last_seq_number(INIT_SEQ_NUMBER),
func_map(),
func_map_rev(),
- func_nodes(),
- last_action(NULL)
+ func_nodes()
{
/* The following are snapshot data structures */
write_history = new HashTable<void *, value_set_t *, uintptr_t, 0>();
FuncNode * func_node = func_nodes[func_id];
func_node->add_inst(act);
- if (act->is_read()) {
-// Fuzzer * fuzzer = model->get_execution()->getFuzzer();
-// Predicate * selected_branch = ((NewFuzzer *)fuzzer)->get_selected_child_branch(tid);
-// func_node->set_predicate_tree_position(tid, selected_branch);
- }
-/*
- if (act->is_write()) {
- Predicate * curr_pred = func_node->get_predicate_tree_position(tid);
- FuncInst * curr_inst = func_node->get_inst(act);
-
- if (curr_pred) {
- // Follow child
- curr_pred = curr_pred->follow_write_child(curr_inst);
- }
- func_node->set_predicate_tree_position(tid, curr_pred);
- }
-*/
-
func_node->update_tree(act);
- last_action = act;
+ last_seq_number = act->get_seq_number();
}
/* Return the FuncNode given its func_id */
return true;
/* Skip actions with the same sequence number */
- if (last_action != NULL) {
- if (last_action->get_seq_number() == curr_seq_number)
- return true;
- }
+ if (last_seq_number != INIT_SEQ_NUMBER && last_seq_number == curr_seq_number)
+ return true;
/* Skip actions that are paused by fuzzer (sequence number is 0) */
if (curr_seq_number == 0)