aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamie Bullock <jamie@postlude.co.uk>2012-06-13 15:08:11 +0100
committerJamie Bullock <jamie@postlude.co.uk>2012-06-13 15:08:11 +0100
commit71b96876d1caf0f6d0bfb82be5ca6e68da092c56 (patch)
treee503e7d6fe4b52982e832eea19a7a7ea5a69e57a
parent59dd1cb1983661d761839da8df79be11de13edb6 (diff)
downloadLibXtract-71b96876d1caf0f6d0bfb82be5ca6e68da092c56.tar.gz
LibXtract-71b96876d1caf0f6d0bfb82be5ca6e68da092c56.tar.bz2
LibXtract-71b96876d1caf0f6d0bfb82be5ca6e68da092c56.zip
Java SWIG bindings improvements
-rw-r--r--Makefile.am10
-rw-r--r--configure.ac4
-rw-r--r--swig/java/Makefile.am14
-rw-r--r--swig/java/SWIG.java16
-rw-r--r--swig/java/jxtract.i3
-rw-r--r--swig/java/test.java25
-rw-r--r--swig/xtract.i20
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;