Share table among lua states
C Lua
Latest commit 2ba66e5 Aug 28, 2012 @cloudwu bugfix: init table
Permalink
Failed to load latest commit information.
Makefile fix makefile for win32 Jul 27, 2012
README.md remove release api Aug 21, 2012
lua-stable.c bugfix: release sub table Aug 21, 2012
main.c Hello World Jul 26, 2012
print_r.lua stable.resize support Jul 28, 2012
stable.c bugfix: release sub table Aug 21, 2012
stable.h bugfix: release sub table Aug 21, 2012
stable.lua bugfix: init table Aug 28, 2012
test.c
test.lua bugfix: resize array Aug 22, 2012
testmt.c bugfix: release sub table Aug 21, 2012
testraw.lua support meta info Jul 27, 2012
testtable.lua remove release api Aug 21, 2012

README.md

Share table between lua states

lua api with meta info support

local stable = require "stable"

-- init meta info first , we have two struct and one enum now : "foo" , "bar" and "xx"
local info = stable.init {
    foo = {
        hello = 1,  -- number , default value is 1
        world = { "Alice", "Bob" }, -- anonymous enum
        foobar = {
            foobar = "",    -- string
        },
        array = "*number",  -- number array
        bars = "*bar",  -- struct bar array
    },
    bar = {
        first = true,
        second = 1,
        third = "*xx", -- enum xx array
    },
    xx = { "ONE", "TWO" }
}

-- create an object with type "foo"
a = stable.create "foo"

a.world = "Alice"
a.foobar = "xxx"
a.bars[1] = { second = 2 }
a.bars[2] = { third = { "ONE" , "ONE" , "TWO" } }

raw api

local sraw = require "stable.raw"

sraw.init()  -- init lightuserdata metatable

local t = sraw.create()

t.hello = { world = true } 
-- If you don't want to set explicit, use this :
--   sraw.set(t,"hello", { world = true })

print(t.hello.world)
-- or use this :
--   hello = sraw.get(t,"hello") ; print( sraw.get(hello, "world"))

-- you can send t (a lightuserdata) to other lua state. (thread safe)

for k,v in pairs(t.hello) do  -- or use sraw.pairs
  print (k,v)
end