static int queue_arg(lua_State *L) { THQueue *queue = luaTHRD_checkudata(L, 1, "threads.Queue"); int idx = luaL_checkint(L, 2); luaL_argcheck(L, idx >= 0 && idx < queue->size, 2, "out of range"); if(lua_gettop(L) == 2) { THCharStorage *storage = NULL; if((storage = queue->args[idx])) { THCharStorage_retain(storage); luaT_pushudata(L, storage, "torch.CharStorage"); return 1; } else return 0; } else if(lua_gettop(L) == 3) { THCharStorage *storage = luaT_checkudata(L, 3, "torch.CharStorage"); /* DEBUG: might be luaT for torch objects */ if(queue->args[idx]) THCharStorage_free(queue->args[idx]); queue->args[idx] = storage; THCharStorage_retain(storage); return 0; } else luaL_error(L, "invalid arguments"); return 0; }
static int torch_MemoryFile_storage(lua_State *L) { THFile *self = luaT_checkudata(L, 1, "torch.MemoryFile"); THCharStorage_retain(THMemoryFile_storage(self)); luaT_pushudata(L, THMemoryFile_storage(self), "torch.CharStorage"); return 1; }