action: neuter the "same_var" function for now...
[c11tester.git] / model.h
1 #ifndef __MODEL_H__
2 #define __MODEL_H__
3
4 #include <list>
5 #include <map>
6 #include <cstddef>
7 #include <ucontext.h>
8
9 #include "schedule.h"
10 #include "libthreads.h"
11 #include "libatomic.h"
12 #include "threads.h"
13 #include "action.h"
14
15 /* Forward declaration */
16 class NodeStack;
17
18 class ModelChecker {
19 public:
20         ModelChecker();
21         ~ModelChecker();
22         class Scheduler *scheduler;
23
24         void set_system_context(ucontext_t *ctxt) { system_context = ctxt; }
25         ucontext_t * get_system_context(void) { return system_context; }
26
27         void set_current_action(ModelAction *act) { current_action = act; }
28         void check_current_action(void);
29         void print_summary(void);
30         Thread * schedule_next_thread();
31
32         int add_thread(Thread *t);
33         void remove_thread(Thread *t);
34         Thread * get_thread(thread_id_t tid) { return thread_map[id_to_int(tid)]; }
35
36         thread_id_t get_next_id();
37         int get_next_seq_num();
38
39         int switch_to_master(ModelAction *act);
40
41         bool next_execution();
42 private:
43         int next_thread_id;
44         int used_sequence_numbers;
45         int num_executions;
46
47         ModelAction * get_last_conflict(ModelAction *act);
48         void set_backtracking(ModelAction *act);
49         thread_id_t get_next_replay_thread();
50         ModelAction * get_next_backtrack();
51         void reset_to_initial_state();
52
53         void print_list(action_list_t *list);
54
55         ModelAction *current_action;
56         ModelAction *diverge;
57         thread_id_t nextThread;
58
59         ucontext_t *system_context;
60         action_list_t *action_trace;
61         std::map<int, class Thread *> thread_map;
62         class NodeStack *node_stack;
63         ModelAction *next_backtrack;
64 };
65
66 extern ModelChecker *model;
67
68 #endif /* __MODEL_H__ */