diff options
author | Pixel <pixel@nobis-crew.org> | 2011-10-07 09:27:04 -0700 |
---|---|---|
committer | Pixel <pixel@nobis-crew.org> | 2011-10-07 09:28:53 -0700 |
commit | 5a283e5b2b523d53e3504292c386b534dc74386a (patch) | |
tree | 779a2f275fd68db81e5927c6b2c190782e6f11f8 /includes/Local.h | |
parent | ad4fddc454407fe154e87564472332e5c421452a (diff) |
Preliminary work for the Task manager.
Added libcoro submodule.
Also refactored some pieces of code.
Diffstat (limited to 'includes/Local.h')
-rw-r--r-- | includes/Local.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/includes/Local.h b/includes/Local.h index f3b7250..a3405ca 100644 --- a/includes/Local.h +++ b/includes/Local.h @@ -8,6 +8,7 @@ class TLSManager { public: virtual void * getTLS(); virtual void * setTLS(void * val); + void * createTLS(); }; extern TLSManager * tlsManager; @@ -32,6 +33,26 @@ class Local : public AtStart { int m_idx; static int s_size; static void ** m_globals; + + friend class TLSManager; +}; + +template<class T> +class DefaultTmpl : public AtStart { + public: + DefaultTmpl(int pri) : AtStart(pri) { } + protected: + virtual void doStart() { new T; } +}; + +template<class T> +class LocalTmpl : public Local { + public: + LocalTmpl() { } + T * getGlobal() { return reinterpret_cast<T *>(Local::getGlobal()); } + T * get() { return reinterpret_cast<T *>(Local::get()); } + void setGlobal(T * obj) { Local::setGlobal(obj); } + void set(T * obj) { Local::set(obj); } }; }; |