+ uint64_t query_last_read(void * location, uint32_t tid);
+ void clear_read_map(uint32_t tid);
+
+ /* TODO: generate EQUALITY or NULLITY predicate based on write_history in history.cc */
+ void update_predicate_tree(action_list_t * act_list);
+ void deep_update(Predicate * pred);
+ bool follow_branch(Predicate ** curr_pred, FuncInst * next_inst, ModelAction * next_act, HashTable<FuncInst *, ModelAction *, uintptr_t, 0>* inst_act_map, SnapVector<Predicate *> * unset_predicates);
+
+ void incr_exit_count() { exit_count++; }
+ uint32_t get_exit_count() { return exit_count; }
+
+ ModelList<action_list_t *> * get_action_list_buffer() { return &action_list_buffer; }
+
+ void add_to_val_loc_map(uint64_t val, void * loc);
+ void add_to_val_loc_map(value_set_t * values, void * loc);
+
+ void print_predicate_tree();