added support for native methods & member function pointers.
fixed test cases arrays_dimensionless & cpp_basic. Added new example (functor). git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@9472 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
8d2830b228
commit
fec2f8f9b7
11 changed files with 279 additions and 75 deletions
|
|
@ -1,8 +1,9 @@
|
|||
# see top-level Makefile.in
|
||||
class
|
||||
constants
|
||||
functest
|
||||
funcptr3
|
||||
functest
|
||||
functor
|
||||
pointer
|
||||
simple
|
||||
variables
|
||||
|
|
|
|||
5
SWIG/Examples/lua/functor/.cvsignore
Normal file
5
SWIG/Examples/lua/functor/.cvsignore
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
*wrap*
|
||||
*.so
|
||||
*.dll
|
||||
*.exp
|
||||
*.lib
|
||||
20
SWIG/Examples/lua/functor/Makefile
Normal file
20
SWIG/Examples/lua/functor/Makefile
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
TOP = ../..
|
||||
SWIG = $(TOP)/../preinst-swig
|
||||
CXXSRCS =
|
||||
TARGET = example
|
||||
INTERFACE = example.i
|
||||
LIBS = -lm
|
||||
SWIGOPT =
|
||||
|
||||
all::
|
||||
$(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
|
||||
SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' lua_cpp
|
||||
|
||||
static::
|
||||
$(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
|
||||
TARGET='mylua' INTERFACE='$(INTERFACE)' lua_cpp_static
|
||||
|
||||
clean::
|
||||
$(MAKE) -f $(TOP)/Makefile lua_clean
|
||||
|
||||
check: all
|
||||
29
SWIG/Examples/lua/functor/example.i
Normal file
29
SWIG/Examples/lua/functor/example.i
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
/* File : example.i */
|
||||
%module example
|
||||
|
||||
|
||||
%inline %{
|
||||
// From B. Strousjoup, "The C++ Programming Language, Third Edition", p. 514
|
||||
template<class T> class Sum {
|
||||
T res;
|
||||
public:
|
||||
Sum(T i = 0) : res(i) { }
|
||||
void operator() (T x) { res += x; }
|
||||
T result() const { return res; }
|
||||
};
|
||||
|
||||
%}
|
||||
|
||||
// Rename the application operator to __call.
|
||||
// Note: this is normally automatic, but if you had to do it yourself
|
||||
// you would use this directive:
|
||||
//
|
||||
// %rename(__call) *::operator(); // the fn call operator
|
||||
|
||||
// Instantiate a few versions
|
||||
%template(intSum) Sum<int>;
|
||||
%template(doubleSum) Sum<double>;
|
||||
|
||||
|
||||
|
||||
|
||||
24
SWIG/Examples/lua/functor/runme.lua
Normal file
24
SWIG/Examples/lua/functor/runme.lua
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
-- Operator overloading example
|
||||
---- importing ----
|
||||
if string.sub(_VERSION,1,7)=='Lua 5.0' then
|
||||
-- lua5.0 doesnt have a nice way to do this
|
||||
lib=loadlib('example.dll','Example_Init') or loadlib('example.so','Example_Init')
|
||||
assert(lib)()
|
||||
else
|
||||
-- lua 5.1 does
|
||||
require('example')
|
||||
end
|
||||
|
||||
a = example.intSum(0)
|
||||
b = example.doubleSum(100.0)
|
||||
|
||||
-- Use the objects. They should be callable just like a normal
|
||||
-- lua function.
|
||||
|
||||
for i=0,100 do
|
||||
a(i) -- Note: function call
|
||||
b(math.sqrt(i)) -- Note: function call
|
||||
end
|
||||
print(a:result()) -- should be 5050
|
||||
print(b:result()) -- should be ~771.46
|
||||
|
||||
64
SWIG/Examples/test-suite/lua/cpp_basic_runme.lua
Normal file
64
SWIG/Examples/test-suite/lua/cpp_basic_runme.lua
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
require("import") -- the import fn
|
||||
import("cpp_basic") -- import code
|
||||
cb=cpp_basic -- renaming import
|
||||
|
||||
-- catch "undefined" global variables
|
||||
setmetatable(getfenv(),{__index=function (t,i) error("undefined global variable `"..i.."'",2) end})
|
||||
|
||||
f=cb.Foo(4)
|
||||
assert(f.num==4)
|
||||
f.num=-17
|
||||
assert(f.num==-17)
|
||||
|
||||
b=cb.Bar()
|
||||
|
||||
b.fptr=f
|
||||
assert(b.fptr.num==-17)
|
||||
assert(b:test(-3,b.fptr)==-5)
|
||||
f.num=12
|
||||
assert(b.fptr.num==12)
|
||||
|
||||
assert(b.fref.num==-4)
|
||||
assert(b:test(12,b.fref)==23)
|
||||
|
||||
-- references don't take ownership, so if we didn't define this here it might get garbage collected
|
||||
f2=cb.Foo(23)
|
||||
b.fref=f2
|
||||
assert(b.fref.num==23)
|
||||
assert(b:test(-3,b.fref)==35)
|
||||
|
||||
assert(b.fval.num==15)
|
||||
assert(b:test(3,b.fval)==33)
|
||||
b.fval=cb.Foo(-15) -- this is safe as it is copied into the C++
|
||||
assert(b.fval.num==-15)
|
||||
assert(b:test(3,b.fval)==-27)
|
||||
|
||||
f3=b:testFoo(12,b.fref)
|
||||
assert(f3.num==32)
|
||||
|
||||
-- now test global
|
||||
f4=cb.Foo(6)
|
||||
cb.Bar_global_fptr=f4
|
||||
assert(cb.Bar_global_fptr.num==6)
|
||||
f4.num=8
|
||||
assert(cb.Bar_global_fptr.num==8)
|
||||
|
||||
assert(cb.Bar_global_fref.num==23)
|
||||
cb.Bar_global_fref=cb.Foo(-7) -- this will set the value
|
||||
assert(cb.Bar_global_fref.num==-7)
|
||||
|
||||
assert(cb.Bar_global_fval.num==3)
|
||||
cb.Bar_global_fval=cb.Foo(-34)
|
||||
assert(cb.Bar_global_fval.num==-34)
|
||||
|
||||
-- Now test member function pointers
|
||||
func1_ptr=cb.get_func1_ptr()
|
||||
func2_ptr=cb.get_func2_ptr()
|
||||
f.num=4
|
||||
assert(f:func1(2)==16)
|
||||
assert(f:func2(2)==-8)
|
||||
|
||||
f.func_ptr=func1_ptr
|
||||
assert(cb.test_func_ptr(f,2)==16)
|
||||
f.func_ptr=func2_ptr
|
||||
assert(cb.test_func_ptr(f,2)==-8)
|
||||
Loading…
Add table
Add a link
Reference in a new issue