[ismrmrd] 04/16: adding a single ismrmrd_sizeof_data_type function

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


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

ghisvail-guest pushed a commit to annotated tag v1.2.0
in repository ismrmrd.

commit 7b69abc34df7d864afb67bea0e65ced8f56dbf8f
Author: Joseph Naegele <joseph.naegele at gmail.com>
Date:   Fri Nov 21 15:33:01 2014 -0500

    adding a single ismrmrd_sizeof_data_type function
---
 bindings/python/cismrmrd.pxd |  2 ++
 bindings/python/ismrmrd.pyx  |  2 ++
 include/ismrmrd/ismrmrd.h    |  3 ++
 libsrc/ismrmrd.c             | 69 +++++++++++++++++---------------------------
 4 files changed, 34 insertions(+), 42 deletions(-)

diff --git a/bindings/python/cismrmrd.pxd b/bindings/python/cismrmrd.pxd
index 83ca6c6..cec67a7 100644
--- a/bindings/python/cismrmrd.pxd
+++ b/bindings/python/cismrmrd.pxd
@@ -133,6 +133,8 @@ cdef extern from "ismrmrd/ismrmrd.h":
         ISMRMRD_CXFLOAT    # corresponds to complex float
         ISMRMRD_CXDOUBLE   # corresponds to complex double
 
+    cdef size_t ismrmrd_sizeof_data_type(int data_type)
+
     cdef enum ISMRMRD_ImageTypes:
         ISMRMRD_IMTYPE_MAGNITUDE = 1
         ISMRMRD_IMTYPE_PHASE
diff --git a/bindings/python/ismrmrd.pyx b/bindings/python/ismrmrd.pyx
index e1a9105..0958007 100644
--- a/bindings/python/ismrmrd.pyx
+++ b/bindings/python/ismrmrd.pyx
@@ -151,6 +151,8 @@ cdef bytes build_exception_string():
             )
     return err_string
 
+def sizeof_data_type(tp):
+    return cismrmrd.ismrmrd_sizeof_data_type(tp)
 
 cdef class EncodingCounters:
 
diff --git a/include/ismrmrd/ismrmrd.h b/include/ismrmrd/ismrmrd.h
index ac89d76..04f07d8 100644
--- a/include/ismrmrd/ismrmrd.h
+++ b/include/ismrmrd/ismrmrd.h
@@ -123,6 +123,9 @@ enum ISMRMRD_DataTypes {
     ISMRMRD_CXDOUBLE = 8  /**< corresponds to complex double */
 };
 
+/** Returns the size in bytes of an ISMRMRD_DataType */
+size_t ismrmrd_sizeof_data_type(int data_type);
+
 /**
  * Acquisition Flags
  */
diff --git a/libsrc/ismrmrd.c b/libsrc/ismrmrd.c
index faa8ef7..2887862 100644
--- a/libsrc/ismrmrd.c
+++ b/libsrc/ismrmrd.c
@@ -295,34 +295,9 @@ size_t ismrmrd_size_of_image_data(const ISMRMRD_Image *im) {
     num_data = im->head.matrix_size[0] * im->head.matrix_size[1] *
             im->head.matrix_size[2] * im->head.channels;
         
-    switch (im->head.data_type) {
-        case ISMRMRD_USHORT:
-            data_size = num_data * sizeof(uint16_t);
-            break;
-        case ISMRMRD_SHORT:
-            data_size = num_data * sizeof(int16_t);
-            break;
-        case ISMRMRD_UINT:
-            data_size = num_data * sizeof(uint32_t);
-            break;
-        case ISMRMRD_INT:
-            data_size = num_data * sizeof(int32_t);
-            break;
-        case ISMRMRD_FLOAT:
-            data_size = num_data * sizeof(float);
-            break;
-        case ISMRMRD_DOUBLE:
-            data_size = num_data * sizeof(double);
-            break;
-        case ISMRMRD_CXFLOAT:
-            data_size = num_data * sizeof(complex_float_t);
-            break;
-        case ISMRMRD_CXDOUBLE:
-            data_size = num_data * sizeof(complex_double_t);
-            break;
-        default:
-            ISMRMRD_PUSH_ERR(ISMRMRD_TYPEERROR, "Invalid image data type");
-            data_size = 0;
+    data_size = num_data * ismrmrd_sizeof_data_type(im->head.data_type);
+    if (data_size == 0) {
+        ISMRMRD_PUSH_ERR(ISMRMRD_TYPEERROR, "Invalid image data type");
     }
     return data_size;
 }
@@ -445,38 +420,48 @@ size_t ismrmrd_size_of_ndarray_data(const ISMRMRD_NDArray *arr) {
     for (n = 0; n < arr->ndim; n++) {
         num_data *= arr->dims[n];
     }
-        
-    switch (arr->data_type) {
+
+    data_size = num_data * ismrmrd_sizeof_data_type(arr->data_type);
+    if (data_size == 0) {
+        ISMRMRD_PUSH_ERR(ISMRMRD_TYPEERROR, "Invalid NDArray data type");
+    }
+
+    return data_size;
+}
+
+size_t ismrmrd_sizeof_data_type(int data_type)
+{
+    size_t size = 0;
+
+    switch (data_type) {
         case ISMRMRD_USHORT:
-            data_size = num_data * sizeof(uint16_t);
+            size = sizeof(uint16_t);
             break;
         case ISMRMRD_SHORT:
-            data_size = num_data * sizeof(int16_t);
+            size = sizeof(int16_t);
             break;
         case ISMRMRD_UINT:
-            data_size = num_data * sizeof(uint32_t);
+            size = sizeof(uint32_t);
             break;
         case ISMRMRD_INT:
-            data_size = num_data * sizeof(int32_t);
+            size = sizeof(int32_t);
             break;
         case ISMRMRD_FLOAT:
-            data_size = num_data * sizeof(float);
+            size = sizeof(float);
             break;
         case ISMRMRD_DOUBLE:
-            data_size = num_data * sizeof(double);
+            size = sizeof(double);
             break;
         case ISMRMRD_CXFLOAT:
-            data_size = num_data * sizeof(complex_float_t);
+            size = sizeof(complex_float_t);
             break;
         case ISMRMRD_CXDOUBLE:
-            data_size = num_data * sizeof(complex_double_t);
+            size = sizeof(complex_double_t);
             break;
         default:
-            ISMRMRD_PUSH_ERR(ISMRMRD_TYPEERROR, "Invalid NDArray data type");
-            data_size = 0;
+            size = 0;
     }
-        
-    return data_size;
+    return size;
 }
 
 /* Misc. functions */

-- 
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