add support for multi-inheritance at the python side and performance tunings

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@7819 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2005-11-07 12:40:16 +00:00
commit 42277fcfd7
9 changed files with 426 additions and 174 deletions

View file

@ -38,8 +38,8 @@ b = director_basic.Bar(3)
d = director_basic.MyClass()
c = PyClass()
cc = PyClass.get_self(c)
dd = PyClass.get_self(d)
cc = director_basic.MyClass_get_self(c)
dd = director_basic.MyClass_get_self(d)
bc = cc.cmethod(b)
bd = dd.cmethod(b)
@ -51,3 +51,40 @@ if bc.x != 34:
if bd.x != 16:
raise RuntimeError
class PyMulti(director_basic.Foo, director_basic.MyClass):
def __init__(self):
director_basic.Foo.__init__(self)
director_basic.MyClass.__init__(self)
pass
def vmethod(self, b):
b.x += 31
return b
def ping(self):
return "PyFoo::ping()"
a = 0
for i in range(0,100):
pymult = PyMulti()
pymult.pong()
del pymult
pymult = PyMulti()
p1 = director_basic.Foo_get_self(pymult)
p2 = director_basic.MyClass_get_self(pymult)
p1.ping()
p2.vmethod(bc)

View file

@ -3,7 +3,8 @@ from director_finalizer import *
class MyFoo(Foo):
def __del__(self):
self.orStatus(2)
Foo.__del__(self)
try: Foo.__del__(self)
except: pass
resetStatus()

View file

@ -4,3 +4,6 @@ a = A()
b = B()
b.acquire(a)
if a.this.own():
raise RuntimeError

View file

@ -1,27 +1,29 @@
import _profiletest
import profiletest
a = profiletest.A()
b = profiletest.B()
fn = b.fn
i = 50000
while i:
a = b.fn(a) #1
a = b.fn(a) #2
a = b.fn(a) #3
a = b.fn(a) #4
a = b.fn(a) #5
a = b.fn(a) #6
a = b.fn(a) #7
a = b.fn(a) #8
a = b.fn(a) #9
a = b.fn(a) #10
a = b.fn(a) #1
a = b.fn(a) #2
a = b.fn(a) #3
a = b.fn(a) #4
a = b.fn(a) #5
a = b.fn(a) #6
a = b.fn(a) #7
a = b.fn(a) #8
a = b.fn(a) #9
a = b.fn(a) #20
a = fn(a) #1
a = fn(a) #2
a = fn(a) #3
a = fn(a) #4
a = fn(a) #5
a = fn(a) #6
a = fn(a) #7
a = fn(a) #8
a = fn(a) #9
a = fn(a) #10
a = fn(a) #1
a = fn(a) #2
a = fn(a) #3
a = fn(a) #4
a = fn(a) #5
a = fn(a) #6
a = fn(a) #7
a = fn(a) #8
a = fn(a) #9
a = fn(a) #20
i -= 1

View file

@ -0,0 +1,54 @@
import _profiletest
#import profiletest
pa = _profiletest.new_A()
pb = _profiletest.new_B()
fn = _profiletest.B_fn
destroy = _profiletest.delete_A
i = 50000
a = pa
while i:
a = fn(pb,a) #1
destroy(a)
a = fn(pb,a) #2
destroy(a)
a = fn(pb,a) #3
destroy(a)
a = fn(pb,a) #4
destroy(a)
a = fn(pb,a) #5
destroy(a)
a = fn(pb,a) #6
destroy(a)
a = fn(pb,a) #7
destroy(a)
a = fn(pb,a) #8
destroy(a)
a = fn(pb,a) #9
destroy(a)
a = fn(pb,a) #10
destroy(a)
a = fn(pb,a) #1
destroy(a)
a = fn(pb,a) #2
destroy(a)
a = fn(pb,a) #3
destroy(a)
a = fn(pb,a) #4
destroy(a)
a = fn(pb,a) #5
destroy(a)
a = fn(pb,a) #6
destroy(a)
a = fn(pb,a) #7
destroy(a)
a = fn(pb,a) #8
destroy(a)
a = fn(pb,a) #9
destroy(a)
a = fn(pb,a) #20
destroy(a)
i -= 1
_profiletest.delete_A(pa)
_profiletest.delete_B(pb)