[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