# file: example.tcl # This file illustrates the manipulation of C++ references in Tcl catch { load ./example.so example} catch { load ./example.dll example} ;# Windows # ----- Object creation ----- puts "Creating some objects:" set a [new_Vector 3 4 5] set b [new_Vector 10 11 12] puts " Created [Vector_print $a]" puts " Created [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. puts "Adding a+b" set c [addv $a $b] puts " a+b = [Vector_print $c]" # Note: Unless we free the result, a memory leak will occur delete_Vector $c # ----- Create a vector array ----- # Note: Using the high-level interface here puts "Creating an array of vectors" VectorArray va 10 puts " va = [va cget -this]" # ----- Set some values in the array ----- # These operators copy the value of $a and $b to the vector array va set 0 $a va set 1 $b # This will work, but it will cause a memory leak! va set 2 [addv $a $b] # The non-leaky way to do it set c [addv $a $b] va set 3 $c delete_Vector $c # Get some values from the array puts "Getting some array values" for {set i 0} {$i < 5} {incr i 1} { puts " va($i) = [Vector_print [va get $i]]" } # Watch under resource meter to check on this puts "Making sure we don't leak memory." for {set i 0} {$i < 1000000} {incr i 1} { set c [va get [expr {$i % 10}]] } # ----- Clean up ----- puts "Cleaning up" rename va "" delete_Vector $a delete_Vector $b