Experimental boost::shared_ptr support - incomplete.
The swigregister methods need hacking to work. Modify Examples/Makefile from:
$(SWIG) -c++ -python $(SWIGOPT) $(INTERFACE)
to
$(SWIG) -c++ -python $(SWIGOPT) $(INTERFACE)
mv $(ICXXSRCS) $(ICXXSRCS).tmp
echo "sed hacked filename: " $(ICXXSRCS)
cat $(ICXXSRCS).tmp | \
sed -e 's/SWIG_TypeNewClientData(SWIGTYPE_p_Space__Klass,/SWIG_TypeNewClientData(SWIGTYPE_p_SwigBoost__shared_ptrTSpace__Klass_t,/' | \
sed -e 's/SWIG_TypeNewClientData(SWIGTYPE_p_Space__KlassDerived,/SWIG_TypeNewClientData(SWIGTYPE_p_SwigBoost__shared_ptrTSpace__KlassDerived_t,/' | \
sed -e 's/SWIG_TypeNewClientData(SWIGTYPE_p_BaseTint_double_t,/SWIG_TypeNewClientData(SWIGTYPE_p_SwigBoost__shared_ptrTBaseTint_double_t_t,/' | \
sed -e 's/SWIG_TypeNewClientData(SWIGTYPE_p_PairTint_double_t,/SWIG_TypeNewClientData(SWIGTYPE_p_SwigBoost__shared_ptrTPairTint_double_t_t,/' \
> $(ICXXSRCS)
rm $(ICXXSRCS).tmp
to do this automatically
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10207 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
d3daec2b16
commit
ae42706190
1 changed files with 185 additions and 0 deletions
185
Examples/test-suite/python/li_boost_shared_ptr_runme.py
Normal file
185
Examples/test-suite/python/li_boost_shared_ptr_runme.py
Normal file
|
|
@ -0,0 +1,185 @@
|
|||
import li_boost_shared_ptr
|
||||
import gc
|
||||
|
||||
debug = False
|
||||
|
||||
# simple shared_ptr usage - created in C++
|
||||
class li_boost_shared_ptr_runme:
|
||||
def main(self):
|
||||
if (debug):
|
||||
System.out.println("Started")
|
||||
|
||||
li_boost_shared_ptr.debug_shared = debug
|
||||
|
||||
# Change loop count to run for a long time to monitor memory
|
||||
loopCount = 1 #5000
|
||||
for i in range (0,loopCount):
|
||||
self.runtest()
|
||||
|
||||
if (li_boost_shared_ptr.Klass.getTotal_count() != 0):
|
||||
raise RuntimeError("Klass.total_count=", li_boost_shared_ptr.Klass.getTotal_count())
|
||||
|
||||
wrapper_count = li_boost_shared_ptr.shared_ptr_wrapper_count()
|
||||
if (wrapper_count != li_boost_shared_ptr.NOT_COUNTING):
|
||||
if (wrapper_count != 0):
|
||||
raise RuntimeError("shared_ptr wrapper count not zero: ", wrapper_count)
|
||||
|
||||
if (debug):
|
||||
System.out.println("Finished")
|
||||
|
||||
def runtest(self):
|
||||
# simple shared_ptr usage - created in C++
|
||||
k = li_boost_shared_ptr.Klass("me oh my")
|
||||
val = k.getValue()
|
||||
self.verifyValue("me oh my", val)
|
||||
self.verifyCount(1, k)
|
||||
|
||||
# simple shared_ptr usage - not created in C++
|
||||
k = li_boost_shared_ptr.factorycreate()
|
||||
val = k.getValue()
|
||||
self.verifyValue("factorycreate", val)
|
||||
self.verifyCount(1, k)
|
||||
|
||||
# pass by shared_ptr
|
||||
k = li_boost_shared_ptr.Klass("me oh my")
|
||||
kret = li_boost_shared_ptr.smartpointertest(k)
|
||||
val = kret.getValue()
|
||||
self.verifyValue("me oh my smartpointertest", val)
|
||||
self.verifyCount(2, k)
|
||||
self.verifyCount(2, kret)
|
||||
|
||||
# pass by shared_ptr pointer
|
||||
k = li_boost_shared_ptr.Klass("me oh my")
|
||||
kret = li_boost_shared_ptr.smartpointerpointertest(k)
|
||||
val = kret.getValue()
|
||||
self.verifyValue("me oh my smartpointerpointertest", val)
|
||||
self.verifyCount(2, k)
|
||||
self.verifyCount(2, kret)
|
||||
|
||||
# pass by shared_ptr reference
|
||||
k = li_boost_shared_ptr.Klass("me oh my")
|
||||
kret = li_boost_shared_ptr.smartpointerreftest(k)
|
||||
val = kret.getValue()
|
||||
self.verifyValue("me oh my smartpointerreftest", val)
|
||||
self.verifyCount(2, k)
|
||||
self.verifyCount(2, kret)
|
||||
|
||||
# pass by shared_ptr pointer reference
|
||||
k = li_boost_shared_ptr.Klass("me oh my")
|
||||
kret = li_boost_shared_ptr.smartpointerpointerreftest(k)
|
||||
val = kret.getValue()
|
||||
self.verifyValue("me oh my smartpointerpointerreftest", val)
|
||||
self.verifyCount(2, k)
|
||||
self.verifyCount(2, kret)
|
||||
|
||||
# const pass by shared_ptr
|
||||
k = li_boost_shared_ptr.Klass("me oh my")
|
||||
kret = li_boost_shared_ptr.constsmartpointertest(k)
|
||||
val = kret.getValue()
|
||||
self.verifyValue("me oh my", val)
|
||||
self.verifyCount(2, k)
|
||||
self.verifyCount(2, kret)
|
||||
|
||||
# const pass by shared_ptr pointer
|
||||
k = li_boost_shared_ptr.Klass("me oh my")
|
||||
kret = li_boost_shared_ptr.constsmartpointerpointertest(k)
|
||||
val = kret.getValue()
|
||||
self.verifyValue("me oh my", val)
|
||||
self.verifyCount(2, k)
|
||||
self.verifyCount(2, kret)
|
||||
|
||||
# const pass by shared_ptr reference
|
||||
k = li_boost_shared_ptr.Klass("me oh my")
|
||||
kret = li_boost_shared_ptr.constsmartpointerreftest(k)
|
||||
val = kret.getValue()
|
||||
self.verifyValue("me oh my", val)
|
||||
self.verifyCount(2, k)
|
||||
self.verifyCount(2, kret)
|
||||
|
||||
# pass by value
|
||||
k = li_boost_shared_ptr.Klass("me oh my")
|
||||
kret = li_boost_shared_ptr.valuetest(k)
|
||||
val = kret.getValue()
|
||||
self.verifyValue("me oh my valuetest", val)
|
||||
self.verifyCount(1, k)
|
||||
self.verifyCount(1, kret)
|
||||
|
||||
# pass by pointer
|
||||
k = li_boost_shared_ptr.Klass("me oh my")
|
||||
kret = li_boost_shared_ptr.pointertest(k)
|
||||
val = kret.getValue()
|
||||
self.verifyValue("me oh my pointertest", val)
|
||||
self.verifyCount(1, k)
|
||||
self.verifyCount(1, kret)
|
||||
|
||||
# pass by reference
|
||||
k = li_boost_shared_ptr.Klass("me oh my")
|
||||
kret = li_boost_shared_ptr.reftest(k)
|
||||
val = kret.getValue()
|
||||
self.verifyValue("me oh my reftest", val)
|
||||
self.verifyCount(1, k)
|
||||
self.verifyCount(1, kret)
|
||||
|
||||
# pass by pointer reference
|
||||
k = li_boost_shared_ptr.Klass("me oh my")
|
||||
kret = li_boost_shared_ptr.pointerreftest(k)
|
||||
val = kret.getValue()
|
||||
self.verifyValue("me oh my pointerreftest", val)
|
||||
self.verifyCount(1, k)
|
||||
self.verifyCount(1, kret)
|
||||
|
||||
# null tests
|
||||
k = None
|
||||
|
||||
if (li_boost_shared_ptr.smartpointertest(k) != None):
|
||||
raise RuntimeError("return was not null")
|
||||
|
||||
if (li_boost_shared_ptr.smartpointerpointertest(k) != None):
|
||||
raise RuntimeError("return was not null")
|
||||
|
||||
if (li_boost_shared_ptr.smartpointerreftest(k) != None):
|
||||
raise RuntimeError("return was not null")
|
||||
|
||||
if (li_boost_shared_ptr.smartpointerpointerreftest(k) != None):
|
||||
raise RuntimeError("return was not null")
|
||||
|
||||
if (li_boost_shared_ptr.nullsmartpointerpointertest(None) != "null pointer"):
|
||||
raise RuntimeError("not null smartpointer pointer")
|
||||
|
||||
try:
|
||||
li_boost_shared_ptr.valuetest(k)
|
||||
raise RuntimeError("Failed to catch null pointer")
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
if (li_boost_shared_ptr.pointertest(k) != None):
|
||||
raise RuntimeError("return was not null")
|
||||
|
||||
try:
|
||||
li_boost_shared_ptr.reftest(k)
|
||||
raise RuntimeError("Failed to catch null pointer")
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# $owner
|
||||
k = li_boost_shared_ptr.pointerownertest()
|
||||
val = k.getValue()
|
||||
self.verifyValue("pointerownertest", val)
|
||||
self.verifyCount(1, k)
|
||||
k = li_boost_shared_ptr.smartpointerpointerownertest()
|
||||
val = k.getValue()
|
||||
self.verifyValue("smartpointerpointerownertest", val)
|
||||
self.verifyCount(1, k)
|
||||
|
||||
def verifyValue(self, expected, got):
|
||||
if (expected != got):
|
||||
raise RuntimeError("verify value failed. Expected: ", expected, " Got: ", got)
|
||||
|
||||
def verifyCount(self, expected, k):
|
||||
got = li_boost_shared_ptr.use_count(k)
|
||||
if (expected != got):
|
||||
raise RuntimeError("verify use_count failed. Expected: ", expected, " Got: ", got)
|
||||
|
||||
runme = li_boost_shared_ptr_runme()
|
||||
runme.main()
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue