snapshot: use (void *) instead of (char *)
[c11tester.git] / model.h
1 /** @file model.h
2  *  @brief Core model checker. 
3  */
4
5 #ifndef __MODEL_H__
6 #define __MODEL_H__
7
8 #include <list>
9 #include <map>
10 #include <vector>
11 #include <cstddef>
12 #include <ucontext.h>
13
14 #include "schedule.h"
15 #include "mymemory.h"
16 #include <utility>
17 #include "libthreads.h"
18 #include "libatomic.h"
19 #include "threads.h"
20 #include "action.h"
21
22 /* Forward declaration */
23 class NodeStack;
24
25 class ModelChecker {
26 public:
27         ModelChecker();
28         ~ModelChecker();
29         class Scheduler *scheduler;
30
31         void set_system_context(ucontext_t *ctxt) { system_context = ctxt; }
32         ucontext_t * get_system_context(void) { return system_context; }
33
34         void set_current_action(ModelAction *act) { current_action = act; }
35         void check_current_action(void);
36         void print_summary(void);
37         Thread * schedule_next_thread();
38
39         int add_thread(Thread *t);
40         void remove_thread(Thread *t);
41         Thread * get_thread(thread_id_t tid) { return (*thread_map)[id_to_int(tid)]; }
42
43         thread_id_t get_next_id();
44         int get_num_threads();
45         int get_next_seq_num();
46
47         int switch_to_master(ModelAction *act);
48
49         bool next_execution();
50
51         MEMALLOC
52 private:
53         int next_thread_id;
54         int used_sequence_numbers;
55         int num_executions;
56
57         ModelAction * get_last_conflict(ModelAction *act);
58         void set_backtracking(ModelAction *act);
59         thread_id_t get_next_replay_thread();
60         ModelAction * get_next_backtrack();
61         void reset_to_initial_state();
62
63         void add_action_to_lists(ModelAction *act);
64         ModelAction * get_last_action(thread_id_t tid);
65         ModelAction * get_parent_action(thread_id_t tid);
66
67         void print_list(action_list_t *list);
68
69         ModelAction *current_action;
70         ModelAction *diverge;
71         thread_id_t nextThread;
72
73         ucontext_t *system_context;
74         action_list_t *action_trace;
75         std::map<int, class Thread *> *thread_map;
76         std::map<void *, std::vector<action_list_t> > *obj_thrd_map;
77         std::vector<ModelAction *> *thrd_last_action;
78         class NodeStack *node_stack;
79         ModelAction *next_backtrack;
80 };
81
82 extern ModelChecker *model;
83
84 #endif /* __MODEL_H__ */