1 // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 #ifndef RUST_SCHED_LAUNCHER_H
12 #define RUST_SCHED_LAUNCHER_H
14 #include "sync/rust_thread.h"
15 #include "rust_sched_driver.h"
16 #include "rust_kernel.h"
17 #include "rust_sched_loop.h"
19 class rust_sched_launcher
: public kernel_owned
<rust_sched_launcher
> {
24 rust_sched_loop sched_loop
;
27 // private and undefined to disable copying
28 rust_sched_launcher(const rust_sched_launcher
& rhs
);
29 rust_sched_launcher
& operator=(const rust_sched_launcher
& rhs
);
32 rust_sched_driver driver
;
35 rust_sched_launcher(rust_scheduler
*sched
, int id
, bool killed
);
36 virtual ~rust_sched_launcher() { }
38 virtual void start() = 0;
39 virtual void join() = 0;
40 rust_sched_loop
*get_loop() { return &sched_loop
; }
43 class rust_thread_sched_launcher
44 :public rust_sched_launcher
,
47 rust_thread_sched_launcher(rust_scheduler
*sched
, int id
, bool killed
);
48 virtual void start() { rust_thread::start(); }
49 virtual void join() { rust_thread::join(); }
50 virtual void run() { driver
.start_main_loop(); }
53 class rust_manual_sched_launcher
: public rust_sched_launcher
{
55 rust_manual_sched_launcher(rust_scheduler
*sched
, int id
, bool killed
);
56 virtual void start() { }
57 virtual void join() { }
58 rust_sched_driver
*get_driver() { return &driver
; };
61 class rust_sched_launcher_factory
{
63 virtual ~rust_sched_launcher_factory() { }
64 virtual rust_sched_launcher
*
65 create(rust_scheduler
*sched
, int id
, bool killed
) = 0;
68 class rust_thread_sched_launcher_factory
69 : public rust_sched_launcher_factory
{
71 virtual rust_sched_launcher
*create(rust_scheduler
*sched
, int id
,
75 class rust_manual_sched_launcher_factory
76 : public rust_sched_launcher_factory
{
78 rust_manual_sched_launcher
*launcher
;
80 rust_manual_sched_launcher_factory() : launcher(NULL
) { }
81 virtual rust_sched_launcher
*create(rust_scheduler
*sched
, int id
,
83 rust_sched_driver
*get_driver() {
84 assert(launcher
!= NULL
);
85 return launcher
->get_driver();
89 #endif // RUST_SCHED_LAUNCHER_H