Initial commit of Octave module.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10290 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Xavier Delacour 2008-03-01 23:35:44 +00:00
commit 393391965c
275 changed files with 14004 additions and 5 deletions

View file

@ -0,0 +1,21 @@
TOP = ../..
SWIG = $(TOP)/../preinst-swig
CXXSRCS = example.cxx
TARGET = example
INTERFACE = example.i
LIBS = -lm
SWIGOPT =
all::
$(MAKE) -f $(TOP)/Makefile $(SWIGLIB) CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' octave_cpp
static::
$(MAKE) -f $(TOP)/Makefile $(SWIGLIB) CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
SWIGOPT='$(SWIGOPT)' TARGET='myoctave' INTERFACE='$(INTERFACE)' octave_cpp_static
clean::
$(MAKE) -f $(TOP)/Makefile octave_clean
rm -f $(TARGET).py
check: all

View file

@ -0,0 +1,4 @@
/* File : example.cxx */
#include "example.h"

View file

@ -0,0 +1,23 @@
/* File : example.h */
#include <cstdio>
#include <iostream>
class Callback {
public:
virtual ~Callback() { std::cout << "Callback::~Callback()" << std:: endl; }
virtual void run() { std::cout << "Callback::run()" << std::endl; }
};
class Caller {
private:
Callback *_callback;
public:
Caller(): _callback(0) {}
~Caller() { delCallback(); }
void delCallback() { delete _callback; _callback = 0; }
void setCallback(Callback *cb) { delCallback(); _callback = cb; }
void call() { if (_callback) _callback->run(); }
};

View file

@ -0,0 +1,13 @@
/* File : example.i */
%module(directors="1") example
%{
#include "example.h"
%}
%include "std_string.i"
/* turn on director wrapping Callback */
%feature("director") Callback;
%include "example.h"

View file

@ -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");