diff options
Diffstat (limited to 'Examples/octave/callback/runme.m')
| -rw-r--r-- | Examples/octave/callback/runme.m | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/Examples/octave/callback/runme.m b/Examples/octave/callback/runme.m new file mode 100644 index 0000000..b87925e --- /dev/null +++ b/Examples/octave/callback/runme.m @@ -0,0 +1,63 @@ +# file: runme.m + +# This file illustrates the cross language polymorphism using directors. + +example + +OctCallback=@() subclass(example.Callback(), \ + 'run',@(self) printf("OctCallback.run()\n")); + +# Create an Caller instance + +caller = example.Caller(); + +# Add a simple C++ callback (caller owns the callback, so +# we disown it first) + +printf("Adding and calling a normal C++ callback\n"); +printf("----------------------------------------\n"); + +callback = example.Callback().__disown(); +caller.setCallback(callback); +caller.call(); +caller.delCallback(); + +printf("Adding and calling a Octave callback\n"); +printf("------------------------------------\n"); + +# Add a Octave callback (caller owns the callback, so we +# disown it first by calling __disown). + +caller.setCallback(OctCallback().__disown()) +caller.call(); +caller.delCallback(); + +printf("Adding and calling another Octave callback\n"); +printf("------------------------------------------\n"); + +# Let's do the same but use the weak reference this time. + +callback = OctCallback().__disown(); +caller.setCallback(callback); +caller.call(); +caller.delCallback(); + +# careful-- using callback here may cause problems; octave_swig_type still +# exists, but is holding a destroyed object (the C++ example.Callback). +# to manually drop the octave-side reference, you can use +clear callback; + +# Let's call them directly now + +printf("Calling Octave and C++ callbacks directly\n"); +printf("------------------------------------------\n"); + +a = OctCallback(); +a.run(); +a.Callback.run(); + + +# All done. + +printf("octave exit\n"); + |
