Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Share table among lua states

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 Makefile
Octocat-spinner-32 README.md
Octocat-spinner-32 lua-stable.c
Octocat-spinner-32 main.c
Octocat-spinner-32 print_r.lua
Octocat-spinner-32 stable.c
Octocat-spinner-32 stable.h
Octocat-spinner-32 stable.lua
Octocat-spinner-32 test.c
Octocat-spinner-32 test.lua
Octocat-spinner-32 testmt.c
Octocat-spinner-32 testraw.lua
Octocat-spinner-32 testtable.lua
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

Something went wrong with that request. Please try again.