aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Thread/Thread.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/Thread/Thread.h')
-rw-r--r--src/libjin/Thread/Thread.h48
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();