diff options
Diffstat (limited to 'src/libjin/Thread/Thread.h')
-rw-r--r-- | src/libjin/Thread/Thread.h | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/src/libjin/Thread/Thread.h b/src/libjin/Thread/Thread.h index aeb0d9e..37c978d 100644 --- a/src/libjin/Thread/Thread.h +++ b/src/libjin/Thread/Thread.h @@ -42,23 +42,36 @@ namespace thread class Thread { public: - - union Variant + struct Variant { - int integer; - bool boolean; - char character; - const char* cstring; - void* pointer; - float real; - - Variant() {}; - Variant(int i) : integer(i) {}; - Variant(float f) : real(f) {}; - Variant(bool b) : boolean(b) {}; - Variant(char c) : character(c) {}; - Variant(const char* s) : cstring(s) {}; - Variant(void* p) : pointer(p) {}; + enum Type + { + NONE = 0, + INTERGER, + BOOLEAN, + CHARACTER, + CSTRING, + POINTER, + REAL, + }; + Type type; + union + { + int integer; + bool boolean; + char character; + const char* cstring; + void* pointer; + float real; + }; + Variant() :type(NONE) {}; + Variant(const Variant& v){ memcpy(this, &v, sizeof(v)); } + Variant(int i) : integer(i), type(INTERGER) {}; + Variant(float f) : real(f), type(REAL) {}; + Variant(bool b) : boolean(b), type(BOOLEAN) {}; + Variant(char c) : character(c), type(CHARACTER) {}; + Variant(const char* s) : cstring(s), type(CSTRING) {}; + Variant(void* p) : pointer(p), type(POINTER) {}; }; private: @@ -76,6 +89,8 @@ namespace thread static const int SLOT_ERROR = -1; static const int SLOT_WARN = -2; + static const int SLOT_INFO = -3; + static const int SLOT_DEBUG = -4; private: std::map<int, Variant> share; // threads shared value @@ -91,6 +106,7 @@ namespace thread bool receive(int slot); Variant fetch(int slot); Variant demand(int slot); + void remove(int slot); const char* getName(); bool isRunning(); void lock(); |