[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