# file: example.pl # This file illustrates the manipulation of C++ references in Perl. # This uses the low-level interface. Shadow classes work differently. use example; # ----- Object creation ----- print "Creating some objects:\n"; $a = example::new_Vector(3,4,5); $b = example::new_Vector(10,11,12); print " Created",example::Vector_print($a),"\n"; print " Created",example::Vector_print($b),"\n"; # ----- 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\n"; $c = example::addv($a,$b); print " a+b =", example::Vector_print($c),"\n"; # 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\n"; $va = example::new_VectorArray(10); print " va = $va\n"; # ----- 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\n"; for ($i = 0; $i < 5; $i++) { print " va($i) = ", example::Vector_print(example::VectorArray_get($va,$i)), "\n"; } # Watch under resource meter to check on this print "Making sure we don't leak memory.\n"; for ($i = 0; $i < 1000000; $i++) { $c = example::VectorArray_get($va,$i % 10); } # ----- Clean up ----- print "Cleaning up\n"; example::delete_VectorArray($va); example::delete_Vector($a); example::delete_Vector($b);