schedule: create 'class Scheduler' with implementation 'class DefaultScheduler'
authorBrian Norris <banorris@uci.edu>
Wed, 14 Mar 2012 22:54:36 +0000 (15:54 -0700)
committerBrian Norris <banorris@uci.edu>
Wed, 14 Mar 2012 22:54:36 +0000 (15:54 -0700)
model.cc
model.h
schedule.c
schedule.h

index ebc713ff48452636dc097a39c2ac0839b74e7b07..fb801ce284cadc3f1fb8b1aa1d874ce206dd04ef 100644 (file)
--- a/model.cc
+++ b/model.cc
@@ -9,17 +9,13 @@ ModelChecker::ModelChecker()
 {
        /* First thread created (system_thread) will have id 1 */
        this->used_thread_id = 0;
-
-       scheduler_init(this);
+       /* Initialize default scheduler */
+       this->scheduler = new DefaultScheduler();
 }
 
 ModelChecker::~ModelChecker()
 {
-       struct scheduler *sched = this->scheduler;
-
-       if (sched->exit)
-               sched->exit();
-       free(sched);
+       delete this->scheduler;
 }
 
 void ModelChecker::assign_id(struct thread *t)
diff --git a/model.h b/model.h
index 31e88fe53a264a8d6c821941383d4cd9695b9884..a9016338508eac25e4f1b97bc76a3e429d51fa40 100644 (file)
--- a/model.h
+++ b/model.h
@@ -1,11 +1,13 @@
 #ifndef __MODEL_H__
 #define __MODEL_H__
 
+#include "schedule.h"
+
 class ModelChecker {
 public:
        ModelChecker();
        ~ModelChecker();
-       struct scheduler *scheduler;
+       class Scheduler *scheduler;
        struct thread *system_thread;
 
        void add_system_thread(struct thread *t);
index 0cb1648c26230d2d4a79803a688b903870fbc4c5..4f5f3de7d70ddf881e15ac6bd39cb27c795c728e 100644 (file)
@@ -57,32 +57,18 @@ static struct thread *dequeue_thread(void)
        return pop;
 }
 
-static void default_add_thread(struct thread *t)
+void DefaultScheduler::add_thread(struct thread *t)
 {
        DEBUG("thread %d\n", t->id);
        enqueue_thread(t);
 }
 
-static struct thread *default_choose_next(void)
+struct thread *DefaultScheduler::next_thread(void)
 {
        return dequeue_thread();
 }
 
-static struct thread *default_thread_current(void)
+struct thread *DefaultScheduler::get_current_thread(void)
 {
        return current;
 }
-
-void scheduler_init(ModelChecker *mod)
-{
-       struct scheduler *sched;
-
-       /* Initialize default scheduler */
-       sched = (struct scheduler *)malloc(sizeof(*sched));
-       sched->init = NULL;
-       sched->exit = NULL;
-       sched->add_thread = default_add_thread;
-       sched->next_thread = default_choose_next;
-       sched->get_current_thread = default_thread_current;
-       mod->scheduler = sched;
-}
index 28f5b8d0fa864794f54f6b5788aec859412b8b8f..eb0f68c74be5cdf101fca6f6c6166680c6f21d90 100644 (file)
@@ -4,16 +4,18 @@
 #include "libthreads.h"
 #include "model.h"
 
-struct scheduler {
-       void (*init)(void);
-       void (*exit)(void);
-       void (*add_thread)(struct thread *t);
-       struct thread * (*next_thread)(void);
-       struct thread * (*get_current_thread)(void);
-
-       void *priv;
+class Scheduler {
+public:
+       virtual void add_thread(struct thread *t) = 0;
+       virtual struct thread * next_thread(void) = 0;
+       virtual struct thread * get_current_thread(void) = 0;
 };
 
-void scheduler_init(ModelChecker *mod);
+class DefaultScheduler: public Scheduler {
+public:
+       void add_thread(struct thread *t);
+       struct thread * next_thread(void);
+       struct thread * get_current_thread(void);
+};
 
 #endif /* __SCHEDULE_H__ */