#include "schedule.h"
#include "common.h"
-/* global "model" struct */
+/* global "model" object */
#include "model.h"
#define STACK_SIZE (1024 * 1024)
static int create_initial_thread(struct thread *t)
{
memset(t, 0, sizeof(*t));
- model_checker_assign_id(t);
+ model->assign_id(t);
return create_context(t);
}
DBG();
memset(t, 0, sizeof(*t));
- model_checker_assign_id(t);
+ model->assign_id(t);
DEBUG("create thread %d\n", t->id);
t->start_routine = start_routine;
struct thread user_thread;
struct thread *main_thread;
- model_checker_init();
+ model = new ModelChecker();
main_thread = (struct thread *)malloc(sizeof(*main_thread));
create_initial_thread(main_thread);
- model_checker_add_system_thread(main_thread);
+ model->add_system_thread(main_thread);
/* Start user program */
thread_create(&user_thread, &user_main, NULL);
#include <stdlib.h>
#include <string.h>
-struct model_checker *model;
+ModelChecker *model;
-void model_checker_add_system_thread(struct thread *t)
+ModelChecker::ModelChecker()
{
- model->system_thread = t;
-}
-
-void model_checker_init(void)
-{
- model = (struct model_checker *)malloc(sizeof(*model));
- memset(model, 0, sizeof(*model));
-
/* First thread created (system_thread) will have id 1 */
- model->used_thread_id = 0;
+ this->used_thread_id = 0;
- scheduler_init(model);
+ scheduler_init(this);
}
-void model_checker_exit(void)
+ModelChecker::~ModelChecker()
{
struct scheduler *sched = model->scheduler;
if (sched->exit)
sched->exit();
free(sched);
- free(model);
}
-void model_checker_assign_id(struct thread *t)
+void ModelChecker::assign_id(struct thread *t)
{
- t->id = ++model->used_thread_id;
+ t->id = ++this->used_thread_id;
+}
+
+void ModelChecker::add_system_thread(struct thread *t)
+{
+ model->system_thread = t;
}
#ifndef __MODEL_H__
#define __MODEL_H__
-struct model_checker {
+class ModelChecker {
+public:
+ ModelChecker();
+ ~ModelChecker();
struct scheduler *scheduler;
struct thread *system_thread;
- /* "Private" fields */
+ void add_system_thread(struct thread *t);
+ void assign_id(struct thread *t);
+
+private:
int used_thread_id;
};
-extern struct model_checker *model;
-
-void model_checker_init(void);
-void model_checker_add_system_thread(struct thread *t);
-void model_checker_assign_id(struct thread *t);
+extern ModelChecker *model;
#endif /* __MODEL_H__ */
return current;
}
-void scheduler_init(struct model_checker *mod)
+void scheduler_init(ModelChecker *mod)
{
struct scheduler *sched;
void *priv;
};
-void scheduler_init(struct model_checker *mod);
+void scheduler_init(ModelChecker *mod);
#endif /* __SCHEDULE_H__ */