diff options
author | Jamie Bullock <jamie@postlude.co.uk> | 2012-06-13 15:08:11 +0100 |
---|---|---|
committer | Jamie Bullock <jamie@postlude.co.uk> | 2012-06-13 15:08:11 +0100 |
commit | 71b96876d1caf0f6d0bfb82be5ca6e68da092c56 (patch) | |
tree | e503e7d6fe4b52982e832eea19a7a7ea5a69e57a | |
parent | 59dd1cb1983661d761839da8df79be11de13edb6 (diff) | |
download | LibXtract-71b96876d1caf0f6d0bfb82be5ca6e68da092c56.tar.gz LibXtract-71b96876d1caf0f6d0bfb82be5ca6e68da092c56.tar.bz2 LibXtract-71b96876d1caf0f6d0bfb82be5ca6e68da092c56.zip |
Java SWIG bindings improvements
-rw-r--r-- | Makefile.am | 10 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | swig/java/Makefile.am | 14 | ||||
-rw-r--r-- | swig/java/SWIG.java | 16 | ||||
-rw-r--r-- | swig/java/jxtract.i | 3 | ||||
-rw-r--r-- | swig/java/test.java | 25 | ||||
-rw-r--r-- | swig/xtract.i | 20 |
7 files changed, 71 insertions, 21 deletions
diff --git a/Makefile.am b/Makefile.am index 62db9c2..91d4045 100644 --- a/Makefile.am +++ b/Makefile.am @@ -11,4 +11,12 @@ pkgconfig_DATA = libxtract.pc ACLOCAL_AMFLAGS = -I m4 -EXTRA_DIST = examples/MSP bootstrap autogen.sh README TODO +EXTRA_DIST = examples/MSP \ + bootstrap \ + autogen.sh \ + README.md \ + TODO \ + $(SWIG_DIR)/java/SWIG.java \ + $(SWIG_DIR)/java/test.java \ + $(SWIG_DIR)/python/test.py \ + $(SWIG_DIR)/python/__init__.py diff --git a/configure.ac b/configure.ac index d5fe8ab..fe3ae64 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ m4_define(libxtract_major_version, 0) # Increment for feature additions and enhancements m4_define(libxtract_minor_version, 6) # Increment for fixes -m4_define(libxtract_fix_version, 5) +m4_define(libxtract_fix_version, 6) # Development status m4_define(libIntegra_dev_status, [beta]) @@ -195,7 +195,7 @@ AM_CONDITIONAL(BUILD_SWIG, test "x${swig}" = 'xtrue') dnl SWIG stuff if [[ "$swig" = "true" ]] ; then - AX_PKG_SWIG(1.3.21) + AX_PKG_SWIG(1.3.21, [], [ AC_MSG_ERROR([SWIG is not installed]) ]) AC_DEFINE([BUILD_SWIG], [1], [Build the swig bindings]) fi diff --git a/swig/java/Makefile.am b/swig/java/Makefile.am index 25452a1..09a7bfc 100644 --- a/swig/java/Makefile.am +++ b/swig/java/Makefile.am @@ -30,6 +30,8 @@ javasources = \ xtract_unit_t.java \ xtract_vector_t.java \ xtract_window_types_.java + + javaclasses = \ floatArray.class \ @@ -63,6 +65,8 @@ javaclasses = \ xtract_vector_t.class \ xtract_window_types_.class +nonautojavasources = SWIG.java +nonautojavaclasses = SWIG.class #javasources = \ # xtractJNI.java \ @@ -81,26 +85,28 @@ javaclasses = \ MAINTAINERCLEANFILES = $(javasources) Makefile.in BUILT_SOURCES = $(srcdir)/xtract_wrap.c -SWIG_SOURCES = ../xtract.i +SWIG_SOURCES = jxtract.i lib_LTLIBRARIES = libjxtract.la libjxtract_la_SOURCES = $(srcdir)/xtract_wrap.c $(SWIG_SOURCES) libjxtract_la_CFLAGS = $(SWIG_PYTHON_CPPFLAGS) -I$(top_srcdir)/src -libjxtract_la_LDFLAGS = -module -lxtract +libjxtract_la_LDFLAGS = -lxtract libjxtract_la_LIBADD = $(top_srcdir)/src/libxtract.la SWIG_JAVA_OPT = -java -package xtract.core xtract_wrap.c : $(SWIG_SOURCES) $(SWIG) $(SWIG_JAVA_OPT) -I$(top_srcdir) -o $@ $< - $(JAVAC) $(javasources) + $(JAVAC) $(nonautojavasources) $(javasources) mkdir -p xtract/core mkdir -p xtract/core/src mv $(javasources) xtract/core/src mv $(javaclasses) xtract/core + cp $(nonautojavasources) xtract/core/src + cp $(nonautojavaclasses) xtract/core $(JAVAC) test.java clean-local: - -rm -f libjxtract.so xtract_wrap.c $(javasources) $(javaclasses) test.class + -rm -f libjxtract.so xtract_wrap.c $(javasources) $(javaclasses) $(nonautojavaclasses) test.class -rm -rf xtract diff --git a/swig/java/SWIG.java b/swig/java/SWIG.java new file mode 100644 index 0000000..0d6c47b --- /dev/null +++ b/swig/java/SWIG.java @@ -0,0 +1,16 @@ +package xtract.core; + +public abstract class SWIG { + protected abstract long getPointer(); + + public boolean equals(Object obj) { + boolean equal = false; + if (obj instanceof SWIG) + equal = (((SWIG)obj).getPointer() == this.getPointer()); + return equal; + } + + public SWIGTYPE_p_void getVoidPointer() { + return new SWIGTYPE_p_void(getPointer(), false); + } +} diff --git a/swig/java/jxtract.i b/swig/java/jxtract.i new file mode 100644 index 0000000..14b9727 --- /dev/null +++ b/swig/java/jxtract.i @@ -0,0 +1,3 @@ + +%include "arrays_java.i" +%include "../xtract.i" diff --git a/swig/java/test.java b/swig/java/test.java index 8949826..ac393a5 100644 --- a/swig/java/test.java +++ b/swig/java/test.java @@ -10,32 +10,33 @@ public class test { catch (UnsatisfiedLinkError e) { System.out.println("Failed to load the library \"jxtract\""); System.out.println(e.toString()); + System.exit(0); } System.out.println("\nRunning libxtract Java bindings test...\n"); int len = 5; int retval = 0; - float result[]; - floatArray a = new floatArray(len); - SWIGTYPE_p_void myvoid = null; - - result = new float[1]; + float mean[] = new float[1]; + float variance[] = new float[1]; + float[] a = new float[len]; + floatArray av = new floatArray(1); + variance = new float[1]; System.out.print("The mean of: "); for (int i = 0; i < len; i++){ - System.out.print(i * 2 + ", "); - a.setitem(i, i * 2); + System.out.print(i * 3 + ", "); + a[i] = i * 3; } - System.out.print("is: "); - - retval = xtract.xtract_mean(a.cast(), len, myvoid, result); + retval = xtract.xtract_mean(a, len, av.cast().getVoidPointer(), mean); - System.out.print(result[0] + "\n"); + System.out.print("is " + mean[0] + "\n"); - System.out.println("\nFinished!\n\n"); + av.setitem(0, mean[0]); + retval = xtract.xtract_variance(a, len, av.cast().getVoidPointer(), variance); + System.out.print("The variance is: " + variance[0] + "\n"); } } diff --git a/swig/xtract.i b/swig/xtract.i index e0cd113..bf89996 100644 --- a/swig/xtract.i +++ b/swig/xtract.i @@ -1,6 +1,6 @@ %module xtract -%include carrays.i %include typemaps.i +%include carrays.i %{ #include "xtract/xtract_scalar.h" @@ -17,9 +17,24 @@ %delobject destroy_filterbank; +%typemap(javabase) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], + SWIGTYPE (CLASS::*) "SWIG" + +%typemap(javacode) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], + SWIGTYPE (CLASS::*) %{ + protected long getPointer() { + return swigCPtr; + } +%} + /* Helper functions */ %inline %{ + void *floata_to_voidp(float f[]) + { + return (void *)f; + } + xtract_function_descriptor_t *get_descriptor(xtract_function_descriptor_t *fd, int i){ @@ -86,7 +101,8 @@ %array_class(float, floatArray); %array_class(int, intArray); %apply float *OUTPUT { float *result }; -/* %apply float *INPUT { float *data }; */ +%apply float[] {const float *data}; + %ignore xtract; |