diff options
| author | Michael Bebenita <[email protected]> | 2010-08-27 18:26:36 -0700 |
|---|---|---|
| committer | Michael Bebenita <[email protected]> | 2010-09-07 18:41:07 -0700 |
| commit | f8ff013e3cc737b92b5a140dfd0ddcc5ab6773d9 (patch) | |
| tree | 84daaf59d1eb899021e681927e1103cf08b91dd5 /src/rt/rust_internal.h | |
| parent | Initial support for a global crate metadata cache (diff) | |
| download | rust-f8ff013e3cc737b92b5a140dfd0ddcc5ab6773d9.tar.xz rust-f8ff013e3cc737b92b5a140dfd0ddcc5ab6773d9.zip | |
Added a few utility classes, cleaned up the include order of .h files, and started to make the Rust kernel own domain message queues rather than the Rust domains themselves.
Diffstat (limited to 'src/rt/rust_internal.h')
| -rw-r--r-- | src/rt/rust_internal.h | 91 |
1 files changed, 35 insertions, 56 deletions
diff --git a/src/rt/rust_internal.h b/src/rt/rust_internal.h index d6618873..60d86f61 100644 --- a/src/rt/rust_internal.h +++ b/src/rt/rust_internal.h @@ -14,11 +14,8 @@ #include <stdio.h> #include <string.h> - #include "rust.h" - #include "rand.h" -#include "rust_log.h" #include "uthash.h" #if defined(__WIN32__) @@ -39,9 +36,28 @@ extern "C" { #error "Platform not supported." #endif +#include "util/array_list.h" +#include "util/indexed_list.h" +#include "util/synchronized_indexed_list.h" +#include "util/hash_map.h" #include "sync/sync.h" #include "sync/timer.h" #include "sync/condition_variable.h" +#include "sync/lock_free_queue.h" + +class rust_dom; +class rust_log; +class rust_task; +class rust_port; +class rust_chan; +struct rust_token; +class rust_kernel; +class rust_crate; +class rust_crate_cache; + +struct stk_seg; +struct type_desc; +struct frame_glue_fns; #ifndef __i386__ #error "Target CPU not supported." @@ -56,29 +72,13 @@ extern "C" { #define A(dom, e, s, ...) ((e) ? (void)0 : \ (dom)->srv->fatal(#e, __FILE__, __LINE__, s, ## __VA_ARGS__)) -struct rust_task; -struct rust_port; -class rust_chan; -struct rust_token; -struct rust_dom; -class rust_crate; -class rust_crate_cache; -// class lockfree_queue; - -struct stk_seg; -struct type_desc; -struct frame_glue_fns; - // This drives our preemption scheme. static size_t const TIME_SLICE_IN_MS = 10; // Every reference counted object should derive from this base class. -template <typename T> -struct -rc_base -{ +template <typename T> struct rc_base { intptr_t ref_count; void ref() { @@ -91,29 +91,25 @@ rc_base } } - rc_base(); - ~rc_base(); + rc_base(); + ~rc_base(); }; -template <typename T> -struct -dom_owned -{ +template <typename T> struct dom_owned { rust_dom *get_dom() const { return ((T*)this)->dom; } + void operator delete(void *ptr) { ((T *)ptr)->dom->free(ptr); } }; -template <typename T> -struct -task_owned -{ +template <typename T> struct task_owned { rust_dom *get_dom() const { return ((T *)this)->task->dom; } + void operator delete(void *ptr) { ((T *)ptr)->task->dom->free(ptr); } @@ -122,24 +118,16 @@ task_owned // A cond(ition) is something we can block on. This can be a channel // (writing), a port (reading) or a task (waiting). -struct -rust_cond -{ -}; +struct rust_cond { }; // Helper class used regularly elsewhere. -template <typename T> -class -ptr_vec : public dom_owned<ptr_vec<T> > -{ +template <typename T> class ptr_vec : public dom_owned<ptr_vec<T> > { static const size_t INIT_SIZE = 8; - rust_dom *dom; size_t alloc; size_t fill; T **data; - public: ptr_vec(rust_dom *dom); ~ptr_vec(); @@ -160,24 +148,16 @@ public: void swap_delete(T* p); }; +#include "memory_region.h" +#include "rust_srv.h" +#include "rust_log.h" +#include "rust_proxy.h" +#include "rust_message.h" +#include "rust_kernel.h" #include "rust_dom.h" - -template <typename T> inline T -check_null(rust_dom *dom, T value, char const *expr, - char const *file, size_t line) { - if (value == NULL) { - dom->srv->fatal(expr, file, line, "is null"); - } - return value; -} - -#define CHECK_NULL(dom, e) (check_null(dom, e, #e, __FILE__, __LINE__)) - #include "memory.h" -struct -rust_timer -{ +struct rust_timer { // FIXME: This will probably eventually need replacement // with something more sophisticated and integrated with // an IO event-handling library, when we have such a thing. @@ -568,7 +548,6 @@ struct gc_alloc { }; #include "circular_buffer.h" -#include "rust_proxy.h" #include "rust_task.h" #include "rust_chan.h" #include "rust_port.h" |