|
@@ -62,30 +62,67 @@ namespace sdl
|
|
|
int w_Thread_receive(lua_State *L)
|
|
|
{
|
|
|
Thread *t = luax_checkthread(L, 1);
|
|
|
- ThreadVariant *v = t->receive(luaL_checkstring(L, 2));
|
|
|
- if (v)
|
|
|
+ std::string name = luaL_checkstring(L, 2);
|
|
|
+ ThreadVariant *v = t->receive(name);
|
|
|
+ if (!v)
|
|
|
{
|
|
|
- switch(v->type)
|
|
|
- {
|
|
|
- case BOOLEAN:
|
|
|
- lua_pushboolean(L, v->data.boolean);
|
|
|
- break;
|
|
|
- case NUMBER:
|
|
|
- lua_pushnumber(L, v->data.number);
|
|
|
- break;
|
|
|
- case STRING:
|
|
|
- lua_pushstring(L, v->data.string);
|
|
|
- break;
|
|
|
- case USERDATA: //FIXME: full userdata
|
|
|
- lua_pushlightuserdata(L, v->data.userdata);
|
|
|
- break;
|
|
|
- default:
|
|
|
- lua_pushnil(L);
|
|
|
- break;
|
|
|
- }
|
|
|
+ lua_pushnil(L);
|
|
|
+ return 1;
|
|
|
}
|
|
|
- else
|
|
|
+ v->retain();
|
|
|
+ t->clear(name);
|
|
|
+ switch(v->type)
|
|
|
+ {
|
|
|
+ case BOOLEAN:
|
|
|
+ lua_pushboolean(L, v->data.boolean);
|
|
|
+ break;
|
|
|
+ case NUMBER:
|
|
|
+ lua_pushnumber(L, v->data.number);
|
|
|
+ break;
|
|
|
+ case STRING:
|
|
|
+ lua_pushstring(L, v->data.string);
|
|
|
+ break;
|
|
|
+ case USERDATA: //FIXME: full userdata
|
|
|
+ lua_pushlightuserdata(L, v->data.userdata);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ lua_pushnil(L);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ v->release();
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ int w_Thread_peek(lua_State *L)
|
|
|
+ {
|
|
|
+ Thread *t = luax_checkthread(L, 1);
|
|
|
+ std::string name = luaL_checkstring(L, 2);
|
|
|
+ ThreadVariant *v = t->receive(name);
|
|
|
+ if (!v)
|
|
|
+ {
|
|
|
lua_pushnil(L);
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ v->retain();
|
|
|
+ switch(v->type)
|
|
|
+ {
|
|
|
+ case BOOLEAN:
|
|
|
+ lua_pushboolean(L, v->data.boolean);
|
|
|
+ break;
|
|
|
+ case NUMBER:
|
|
|
+ lua_pushnumber(L, v->data.number);
|
|
|
+ break;
|
|
|
+ case STRING:
|
|
|
+ lua_pushstring(L, v->data.string);
|
|
|
+ break;
|
|
|
+ case USERDATA: //FIXME: full userdata
|
|
|
+ lua_pushlightuserdata(L, v->data.userdata);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ lua_pushnil(L);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ v->release();
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
@@ -125,6 +162,7 @@ namespace sdl
|
|
|
{ "wait", w_Thread_wait },
|
|
|
{ "getName", w_Thread_getName },
|
|
|
{ "receive", w_Thread_receive },
|
|
|
+ { "peek", w_Thread_peek },
|
|
|
{ "send", w_Thread_send },
|
|
|
{ 0, 0 }
|
|
|
};
|