mirror of https://github.com/swig/swig
75 lines
1.7 KiB
Lua
75 lines
1.7 KiB
Lua
---- importing ----
|
|
if string.sub(_VERSION,1,7)=='Lua 5.0' then
|
|
-- lua5.0 doesn't have a nice way to do this
|
|
lib=loadlib('example.dll','luaopen_example') or loadlib('example.so','luaopen_example')
|
|
assert(lib)()
|
|
else
|
|
-- lua 5.1 does
|
|
require('example')
|
|
end
|
|
|
|
-- a helper to print a Lua table
|
|
function print_table(t)
|
|
print(table.concat(t,","))
|
|
end
|
|
|
|
-- a helper to print a C array
|
|
function print_array(arr,len)
|
|
for i=0,len-1 do
|
|
io.write(example.int_getitem(arr,i),",")
|
|
end
|
|
io.write("\n")
|
|
end
|
|
|
|
math.randomseed(0) -- init random
|
|
|
|
|
|
--[[ version 1: passing a C array to the code
|
|
let's test call sort_int()
|
|
this requires a C array, so is the hardest to use]]
|
|
ARRAY_SIZE=10
|
|
arr=example.new_int(ARRAY_SIZE)
|
|
for i=0,ARRAY_SIZE-1 do
|
|
example.int_setitem(arr,i,math.random(1000))
|
|
end
|
|
print "unsorted"
|
|
print_array(arr,ARRAY_SIZE)
|
|
example.sort_int(arr,ARRAY_SIZE)
|
|
print "sorted"
|
|
print_array(arr,ARRAY_SIZE)
|
|
example.delete_int(arr) -- must delete it
|
|
print ""
|
|
|
|
--[[ version 2: using %luacode to write a helper
|
|
a simpler way is to use a %luacode
|
|
which is a lua function added into the module
|
|
this can do the conversion for us
|
|
so we can just add a lua table directly
|
|
(what we do is move the lua code into the module instead)
|
|
]]
|
|
t={}
|
|
for i=1,ARRAY_SIZE do
|
|
t[i]=math.random(1000)
|
|
end
|
|
print "unsorted"
|
|
print_table(t)
|
|
example.sort_int2(t) -- calls lua helper which then calls C
|
|
print "sorted"
|
|
print_table(t)
|
|
print ""
|
|
|
|
--[[ version 3: use a typemap
|
|
this is the best way
|
|
it uses the SWIG-Lua typemaps to do the work
|
|
one item of note: the typemap creates a copy, rather than edit-in-place]]
|
|
t={}
|
|
for i=1,ARRAY_SIZE do
|
|
t[i]=math.random(1000)/10
|
|
end
|
|
print "unsorted"
|
|
print_table(t)
|
|
t=example.sort_double(t) -- replace t with the result
|
|
print "sorted"
|
|
print_table(t)
|
|
|