[ismrmrd] 112/177: Working on templating images.

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


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

ghisvail-guest pushed a commit to annotated tag v1.1.0.beta.1
in repository ismrmrd.

commit b35fbae3c21f7f7c6d9371b371d4a12ae4b94d03
Author: Souheil Inati <souheil.inati at nih.gov>
Date:   Mon Sep 29 12:07:07 2014 -0400

    Working on templating images.
---
 include/ismrmrd/ismrmrd.h |   3 +
 libsrc/ismrmrd.cpp        | 142 +++++++++++++++++++++++++---------------------
 2 files changed, 81 insertions(+), 64 deletions(-)

diff --git a/include/ismrmrd/ismrmrd.h b/include/ismrmrd/ismrmrd.h
index 49e85bf..58a73c9 100644
--- a/include/ismrmrd/ismrmrd.h
+++ b/include/ismrmrd/ismrmrd.h
@@ -423,6 +423,9 @@ typedef  ISMRMRD_EncodingCounters EncodingCounters;
  *  @{
  */
 
+/// Allowed data types for Images and NDArrays
+EXPORTISMRMRD template <typename T>  ISMRMRD_DataTypes get_data_type();
+
 /// Convenience class for flags
 class EXPORTISMRMRD FlagBit
 {
diff --git a/libsrc/ismrmrd.cpp b/libsrc/ismrmrd.cpp
index 888fcfe..337e2ef 100644
--- a/libsrc/ismrmrd.cpp
+++ b/libsrc/ismrmrd.cpp
@@ -5,48 +5,6 @@
 
 namespace ISMRMRD {
 
-// Internal function to control the allowed data types for NDArrays
-template <typename T>  ISMRMRD_DataTypes get_data_type();
-template <> ISMRMRD_DataTypes get_data_type<uint16_t>()
-{
-    return ISMRMRD_USHORT;
-}
-
-template <> inline ISMRMRD_DataTypes get_data_type<int16_t>()
-{
-    return ISMRMRD_SHORT;
-}
-
-template <> inline ISMRMRD_DataTypes get_data_type<uint32_t>()
-{
-    return ISMRMRD_UINT;
-}
-
-template <> inline ISMRMRD_DataTypes get_data_type<int32_t>()
-{
-    return ISMRMRD_INT;
-}
-
-template <> inline ISMRMRD_DataTypes get_data_type<float>()
-{
-    return ISMRMRD_FLOAT;
-}
-
-template <> inline ISMRMRD_DataTypes get_data_type<double>()
-{
-    return ISMRMRD_DOUBLE;
-}
-
-template <> inline ISMRMRD_DataTypes get_data_type<complex_float_t>()
-{
-    return ISMRMRD_CXFLOAT;
-}
-
-template <> inline ISMRMRD_DataTypes get_data_type<complex_double_t>()
-{
-    return ISMRMRD_CXDOUBLE;
-}
-
 //
 // AcquisitionHeader class implementation
 //
@@ -292,17 +250,20 @@ void ImageHeader::clearAllFlags() {
 //
 
 // Constructors
-Image::Image() {
+template <typename T> Image<T>::Image()
+{
     ismrmrd_init_image(this);
+    data_type = get_data_type<T>();
 };
 
-Image::Image(const Image &other) {
+template <typename T> Image<T>::Image(const Image<T> &other) {
     // This is a deep copy
     ismrmrd_init_image(this);
     ismrmrd_copy_image(this, &other);
 }
 
-Image & Image::operator= (const Image &other) {
+template <typename T> Image<T> & Image<T>::operator= (const Image<T> &other)
+{
     // Assignment makes a copy
     if (this != &other )
     {
@@ -312,38 +273,38 @@ Image & Image::operator= (const Image &other) {
     return *this;
 }
 
-Image::~Image() {
+template <typename T> Image<T>::~Image() {
     ismrmrd_cleanup_image(this);
 }
 
 // Accessors and mutators
-const uint16_t &Image::version() {
+template <typename T> const uint16_t & Image<T>::version() {
     return head.version;
 };
 
-const uint16_t &Image::data_type() {
+template <typename T> const uint16_t &Image<T>::data_type() {
     return head.data_type;
 };
 
-void Image::data_type(uint16_t dtype) {
+template <typename T> void Image<T>::data_type(uint16_t dtype) {
     // TODO function to check if type is valid
     head.data_type = dtype;
     ismrmrd_make_consistent_image(this);
 };
 
-const uint64_t &Image::flags() {
+template <typename T> const uint64_t &Image<T>::flags() {
     return head.flags;
 };
 
-uint32_t &Image::measurement_uid() {
+template <typename T> uint32_t &Image<T>::measurement_uid() {
     return head.measurement_uid;
 };
 
-const uint16_t (&Image::matrix_size())[3] {
+template <typename T> const uint16_t (&Image<T>::matrix_size())[3] {
     return head.matrix_size;
 };
 
-void Image::matrix_size(const uint16_t msize[3]) {
+template <typename T> void Image<T>::matrix_size(const uint16_t msize[3]) {
     head.matrix_size[0] = msize[0];
     if (msize[1] > 1) {
         head.matrix_size[1] = msize[1];
@@ -358,15 +319,15 @@ void Image::matrix_size(const uint16_t msize[3]) {
     ismrmrd_make_consistent_image(this);
 };
 
-float (&Image::field_of_view())[3] {
+template <typename T> float (&Image<T>::field_of_view())[3] {
     return head.field_of_view;
 };
 
-const uint16_t &Image::channels() {
+template <typename T> const uint16_t &Image<T>::channels() {
     return head.channels;
 };
 
-void Image::channels(const uint16_t num_channels) {
+template <typename T> void Image<T>::channels(const uint16_t num_channels) {
     if (num_channels > 1) {
         head.channels = num_channels;
     } else {
@@ -375,38 +336,39 @@ void Image::channels(const uint16_t num_channels) {
     ismrmrd_make_consistent_image(this);
 };
 
-float (&Image::position())[3] {
+template <typename T> float (&Image<T>::position())[3] {
     return head.position;
 };
 
-float (&Image::read_dir())[3] {
+template <typename T> float (&Image<T>::read_dir())[3] {
     return head.read_dir;
 };
 
-float (&Image::phase_dir())[3] {
+template <typename T> float (&Image<T>::phase_dir())[3] {
     return head.phase_dir;
 };
 
-float (&Image::slice_dir())[3] {
+template <typename T> float (&Image<T>::slice_dir())[3] {
     return head.slice_dir;
 };
 
-float (&Image::patient_table_position())[3] {
+template <typename T> float (&Image<T>::patient_table_position())[3] {
     return head.patient_table_position;
 };
 
-uint16_t &Image::average() {
+template <typename T> uint16_t &Image<T>::average() {
     return head.average;
 };
 
-uint16_t &Image::slice() {
+template <typename T> uint16_t &Image<T>::slice() {
     return head.slice;
 };
 
-uint16_t &Image::contrast() {
+template <typename T> uint16_t &Image<T>::contrast() {
     return head.contrast;
 };
 
+######YOU ARE HERE ########
 uint16_t &Image::phase() {
     return head.repetition;
 };
@@ -582,6 +544,58 @@ template <typename T> const size_t NDArray<T>::getNumberOfElements() {
 
 
 // Specializations
+// Allowed data types for Images and NDArrays
+EXPORTISMRMRD template <> ISMRMRD_DataTypes get_data_type<uint16_t>()
+{
+    return ISMRMRD_USHORT;
+}
+
+EXPORTISMRMRD template <> inline ISMRMRD_DataTypes get_data_type<int16_t>()
+{
+    return ISMRMRD_SHORT;
+}
+
+EXPORTISMRMRD template <> inline ISMRMRD_DataTypes get_data_type<uint32_t>()
+{
+    return ISMRMRD_UINT;
+}
+
+EXPORTISMRMRD template <> inline ISMRMRD_DataTypes get_data_type<int32_t>()
+{
+    return ISMRMRD_INT;
+}
+
+EXPORTISMRMRD template <> inline ISMRMRD_DataTypes get_data_type<float>()
+{
+    return ISMRMRD_FLOAT;
+}
+
+EXPORTISMRMRD template <> inline ISMRMRD_DataTypes get_data_type<double>()
+{
+    return ISMRMRD_DOUBLE;
+}
+
+EXPORTISMRMRD template <> inline ISMRMRD_DataTypes get_data_type<complex_float_t>()
+{
+    return ISMRMRD_CXFLOAT;
+}
+
+EXPORTISMRMRD template <> inline ISMRMRD_DataTypes get_data_type<complex_double_t>()
+{
+    return ISMRMRD_CXDOUBLE;
+}
+
+// Images
+template EXPORTISMRMRD class Image<uint16_t>;
+template EXPORTISMRMRD class Image<int16_t>;
+template EXPORTISMRMRD class Image<uint32_t>;
+template EXPORTISMRMRD class Image<int32_t>;
+template EXPORTISMRMRD class Image<float>;
+template EXPORTISMRMRD class Image<double>;
+template EXPORTISMRMRD class Image<complex_float_t>;
+template EXPORTISMRMRD class Image<complex_double_t>;
+
+// NDArrays
 template EXPORTISMRMRD class NDArray<uint16_t>;
 template EXPORTISMRMRD class NDArray<int16_t>;
 template EXPORTISMRMRD class NDArray<uint32_t>;

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