[ismrmrd] 117/281: more progress on Java bindings. working getData()

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Wed Jan 14 20:01:04 UTC 2015


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to annotated tag ismrmrd0.5
in repository ismrmrd.

commit 173708faef19f243177497bf34fc2842be5dd160
Author: Joseph Naegele <joseph.naegele at gmail.com>
Date:   Thu Mar 28 15:40:15 2013 -0400

    more progress on Java bindings. working getData()
---
 bindings/CMakeLists.txt          |  3 +-
 bindings/ismrmrd.i               | 42 +++-------------------
 bindings/java/CMakeLists.txt     |  7 ++--
 bindings/java/ismrmrd_java.i     | 76 ++++++++++++++++++++++++++++++++++++++++
 bindings/python/CMakeLists.txt   |  4 +--
 bindings/python/ismrmrd_python.i | 29 +++++++++++++++
 6 files changed, 115 insertions(+), 46 deletions(-)

diff --git a/bindings/CMakeLists.txt b/bindings/CMakeLists.txt
index d139d51..a7c3c69 100644
--- a/bindings/CMakeLists.txt
+++ b/bindings/CMakeLists.txt
@@ -1,3 +1,4 @@
-set(ISMRMRD_SWIG_INTERFACE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/ismrmrd.i)
+set_source_files_properties(ismrmrd.i PROPERTIES CPLUSPLUS ON)
+
 add_subdirectory(python)
 add_subdirectory(java)
diff --git a/bindings/ismrmrd.i b/bindings/ismrmrd.i
index 25d6ecc..2e7ee67 100644
--- a/bindings/ismrmrd.i
+++ b/bindings/ismrmrd.i
@@ -1,50 +1,16 @@
 %module ismrmrd
 
-%{
-
-#include "ismrmrd_hdf5.h"
-
-%}
+//%{
+//#include "ismrmrd_hdf5.h"
+//%}
 
 %include "stdint.i"
 %include "std_string.i"
-%include "std_vector.i"
-
-#ifdef SWIGPYTHON
-%extend ISMRMRD::Acquisition {
-    PyObject* getData()
-    {
-        PyObject *list = PyList_New(0);
-
-        std::valarray<float> data = $self->getData();
-
-        int i;
-        for (i = 0; i < data.size(); i++) {
-            PyObject *o = PyFloat_FromDouble((double)data[i]);
-            PyList_Append(list, o);
-            Py_DECREF(o);
-        }
-        return list;
-    }
-
-}
-#endif
-
-#ifdef SWIGJAVA
-%extend ISMRMRD::Acquisition {
-    std::vector<float> getData()
-    {
-        std::vector<float> datavec($self->getData().size());
-        memcpy(&(datavec[0]), &($self->getData()[0]), sizeof(float) * $self->getData().size());
-        return datavec;
-    }
-}
-#endif
 
 %ignore ISMRMRD::Acquisition::getData;
 
 /* ISMRMRD::IsmrmrdDataset */
-%newobject ISMRMRD::readAcquisition;
+%newobject ISMRMRD::IsmrmrdDataset::readAcquisition;
 
 %extend ISMRMRD::IsmrmrdDataset {
     std::string readHeader() {
diff --git a/bindings/java/CMakeLists.txt b/bindings/java/CMakeLists.txt
index cc23793..7a73ddb 100644
--- a/bindings/java/CMakeLists.txt
+++ b/bindings/java/CMakeLists.txt
@@ -3,14 +3,11 @@ include(${SWIG_USE_FILE})
 
 find_package(Java REQUIRED)
 
-message(STATUS "Java include dirs: ${JAVA_INCLUDE_DIRS}")
-
 include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
 include_directories(${JAVA_INCLUDE_DIRS})
 include_directories(${HDF5_INCLUDE_DIR} ${HDF5_INCLUDE_DIR}/cpp ${Boost_INCLUDE_DIR})
 
-set(CMAKE_SWIG_FLAGS -package ismrmrd)
-set_source_files_properties(../ismrmrd.i PROPERTIES CPLUSPLUS ON)
+set_source_files_properties(ismrmrd_java.i PROPERTIES CPLUSPLUS ON)
 
-SWIG_ADD_MODULE(jismrmrd java ../ismrmrd.i ../../ismrmrd_hdf5.cpp)
+SWIG_ADD_MODULE(jismrmrd java ismrmrd_java.i ../../ismrmrd_hdf5.cpp)
 SWIG_LINK_LIBRARIES(jismrmrd ${HDF5_LIBRARIES} ${Boost_LIBRARIES} ${JAVA_LIBRARIES})
diff --git a/bindings/java/ismrmrd_java.i b/bindings/java/ismrmrd_java.i
new file mode 100644
index 0000000..aeb1e1b
--- /dev/null
+++ b/bindings/java/ismrmrd_java.i
@@ -0,0 +1,76 @@
+%module ismrmrd
+
+%{
+
+#include "ismrmrd_hdf5.h"
+#include "jni.h"
+
+static JavaVM *cached_jvm = 0;
+
+JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
+    cached_jvm = jvm;
+    return JNI_VERSION_1_2;
+}
+
+static JNIEnv * JNU_GetEnv() {
+    JNIEnv *env;
+    jint rc = cached_jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+    if (rc == JNI_EDETACHED)
+        throw std::runtime_error("current thread not attached");
+    if (rc == JNI_EVERSION)
+        throw std::runtime_error("jni version not supported");
+    return env;
+}
+
+%}
+
+#ifdef SWIGJAVA
+
+//%include "arrays_java.i"
+//%apply float[] {float *};
+
+//%include "carrays.i"
+//%array_class(float, floatArray);
+
+%newobject ISMRMRD::Acquisition::getData;
+
+%extend ISMRMRD::Acquisition {
+/*
+    std::vector<float> getData()
+    {
+        std::vector<float> datavec($self->getData().size());
+        memcpy(&(datavec[0]), &($self->getData()[0]), sizeof(float) * $self->getData().size());
+        return datavec;
+    }
+    float* getData() {
+        float* data = new float[$self->getData().size()];
+        memcpy(&(data[0]), &($self->getData()[0]), sizeof(float) * $self->getData().size());
+        return data;
+    }
+
+*/
+
+    //JNIEXPORT jfloatArray JNICALL getData() {
+    jfloatArray getData() {
+        JNIEnv *env = JNU_GetEnv();
+        std::valarray<float> data = $self->getData();
+        jfloatArray arr = env->NewFloatArray(data.size());
+        if (arr != NULL) {
+            float *ptr = env->GetFloatArrayElements(arr, NULL);
+
+            jint i;
+            for (i = 0; i < data.size(); i++) {
+                ptr[i] = data[i];
+            }
+
+            env->ReleaseFloatArrayElements(arr, ptr, JNI_COMMIT);
+        }
+        return arr;
+    }
+
+}
+#endif
+
+
+%include "../ismrmrd.i"
+
diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt
index c0fe37c..f9924d2 100644
--- a/bindings/python/CMakeLists.txt
+++ b/bindings/python/CMakeLists.txt
@@ -7,7 +7,7 @@ include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
 include_directories(${PYTHON_INCLUDE_PATH})
 include_directories(${HDF5_INCLUDE_DIR} ${HDF5_INCLUDE_DIR}/cpp ${Boost_INCLUDE_DIR})
 
-set_source_files_properties(../ismrmrd.i PROPERTIES CPLUSPLUS ON)
+set_source_files_properties(ismrmrd_python.i PROPERTIES CPLUSPLUS ON)
 
-SWIG_ADD_MODULE(ismrmrd python ../ismrmrd.i ../../ismrmrd_hdf5.cpp)
+SWIG_ADD_MODULE(ismrmrd python ismrmrd_python.i ../../ismrmrd_hdf5.cpp)
 SWIG_LINK_LIBRARIES(ismrmrd ${PYTHON_LIBRARIES} ${HDF5_LIBRARIES} ${Boost_LIBRARIES})
diff --git a/bindings/python/ismrmrd_python.i b/bindings/python/ismrmrd_python.i
new file mode 100644
index 0000000..f739818
--- /dev/null
+++ b/bindings/python/ismrmrd_python.i
@@ -0,0 +1,29 @@
+%module ismrmrd
+
+%{
+#include "ismrmrd_hdf5.h"
+%}
+
+#ifdef SWIGPYTHON
+%extend ISMRMRD::Acquisition {
+    PyObject* getData()
+    {
+        PyObject *list = PyList_New(0);
+
+        std::valarray<float> data = $self->getData();
+
+        int i;
+        for (i = 0; i < data.size(); i++) {
+            PyObject *o = PyFloat_FromDouble((double)data[i]);
+            PyList_Append(list, o);
+            Py_DECREF(o);
+        }
+        return list;
+    }
+
+}
+
+#endif
+
+
+%include "../ismrmrd.i"

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/ismrmrd.git



More information about the debian-science-commits mailing list