Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > 3c88344d1f3d15057277d028d0022277 > files > 616

swig-1.3.11-4mdk.i586.rpm

# file: example.py

# This file illustrates the manipulation of C++ references in Python
# This uses the low-level interface.  Shadow classes work differently.

import example

# ----- Object creation -----

print "Creating some objects:"
a = example.new_Vector(3,4,5)
b = example.new_Vector(10,11,12)

print "    Created",example.Vector_print(a)
print "    Created",example.Vector_print(b)

# ----- Call an overloaded operator -----

# This calls the wrapper we placed around
#
#      operator+(const Vector &a, const Vector &) 
#
# It returns a new allocated object.

print "Adding a+b"
c = example.addv(a,b)
print "    a+b =", example.Vector_print(c)

# Note: Unless we free the result, a memory leak will occur
example.delete_Vector(c)

# ----- Create a vector array -----

# Note: Using the high-level interface here
print "Creating an array of vectors"
va = example.new_VectorArray(10)
print "    va = ",va

# ----- Set some values in the array -----

# These operators copy the value of $a and $b to the vector array
example.VectorArray_set(va,0,a)
example.VectorArray_set(va,1,b)

# This will work, but it will cause a memory leak!

example.VectorArray_set(va,2,example.addv(a,b))

# The non-leaky way to do it

c = example.addv(a,b)
example.VectorArray_set(va,3,c)
example.delete_Vector(c)

# Get some values from the array

print "Getting some array values"
for i in range(0,5):
    print "    va(%d) = %s" % (i, example.Vector_print(example.VectorArray_get(va,i)))

# Watch under resource meter to check on this
print "Making sure we don't leak memory."
for i in xrange(0,1000000):
    c = example.VectorArray_get(va,i % 10)

# ----- Clean up -----
print "Cleaning up"

example.delete_VectorArray(va)
example.delete_Vector(a)
example.delete_Vector(b)