mirror of
https://github.com/lxsang/silk.git
synced 2024-11-14 17:28:22 +01:00
63 lines
1.3 KiB
Lua
63 lines
1.3 KiB
Lua
FFI = require("ffi")
|
|
FFI.type = {}
|
|
FFI.type.VOID = 0
|
|
FFI.type.UINT8 = 1
|
|
FFI.type.SINT8 = 2
|
|
FFI.type.UINT16 = 3
|
|
FFI.type.SINT16 = 4
|
|
FFI.type.UINT32 = 5
|
|
FFI.type.SINT32 = 6
|
|
FFI.type.UINT64 = 7
|
|
FFI.type.SINT64 = 8
|
|
FFI.type.FLOAT = 9
|
|
FFI.type.DOUBLE = 10
|
|
FFI.type.UCHAR = 11
|
|
FFI.type.SCHAR = 12
|
|
FFI.type.USHORT = 13
|
|
FFI.type.SSHORT = 14
|
|
FFI.type.UINT = 15
|
|
FFI.type.SINT = 16
|
|
FFI.type.ULONG = 17
|
|
FFI.type.SLONG = 18
|
|
FFI.type.LONGDOUBLE = 19
|
|
FFI.type.POINTER = 20
|
|
FFI.cache = {}
|
|
|
|
FFI.load = function(path)
|
|
if FFI.cache[path] then
|
|
return FFI.cache[path]
|
|
else
|
|
print("Loading: "..path)
|
|
local lib = FFI.dlopen(path)
|
|
if lib then
|
|
FFI.cache[path] = {ref = lib, fn= {}}
|
|
end
|
|
return FFI.cache[path]
|
|
end
|
|
end
|
|
|
|
FFI.unload = function(path)
|
|
local lib = FFI.cache[path]
|
|
if lib then
|
|
FFI.dlclose(lib.ref)
|
|
FFI.cache[path] = false
|
|
end
|
|
end
|
|
|
|
FFI.unloadAll = function()
|
|
for k,v in pairs(FFI.cache) do
|
|
FFI.dlclose(v.ref)
|
|
end
|
|
FFI.cache = {}
|
|
end
|
|
|
|
FFI.lookup = function(lib, name)
|
|
local fn = lib.fn[name]
|
|
if fn then return fn end
|
|
fn = FFI.dlsym(lib.ref, name)
|
|
if fn then
|
|
lib.fn[name] = fn
|
|
return fn
|
|
end
|
|
return nil
|
|
end |