model: add per-object action lists (obj_map)
[model-checker.git] / model.cc
index 9d07d416307f143a1f4fcf12692d4042e6dd2e04..85e1f849cc7a42f7c10139321b360414b818b102 100644 (file)
--- a/model.cc
+++ b/model.cc
@@ -27,6 +27,7 @@ ModelChecker::ModelChecker()
        nextThread(THREAD_ID_T_NONE),
        action_trace(new action_list_t()),
        thread_map(new std::map<int, Thread *>),
+       obj_map(new std::map<const void *, action_list_t>()),
        obj_thrd_map(new std::map<void *, std::vector<action_list_t> >()),
        thrd_last_action(new std::vector<ModelAction *>(1)),
        node_stack(new NodeStack()),
@@ -43,6 +44,7 @@ ModelChecker::~ModelChecker()
        delete thread_map;
 
        delete obj_thrd_map;
+       delete obj_map;
        delete action_trace;
        delete thrd_last_action;
        delete node_stack;
@@ -297,6 +299,8 @@ void ModelChecker::add_action_to_lists(ModelAction *act)
        int tid = id_to_int(act->get_tid());
        action_trace->push_back(act);
 
+       (*obj_map)[act->get_location()].push_back(act);
+
        std::vector<action_list_t> *vec = &(*obj_thrd_map)[act->get_location()];
        if (tid >= (int)vec->size())
                vec->resize(next_thread_id);