[ismrmrd] 38/177: Changed the logic of the C++ interface to allow for casting between ISMRMRD_Acquisition and Acquisition.

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Wed Jan 14 20:01:59 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 6b9c27738b54e8352b21d9a451967fa267d0222b
Author: Souheil Inati <souheil.inati at nih.gov>
Date:   Wed Sep 3 10:15:35 2014 -0400

    Changed the logic of the C++ interface to allow for casting between ISMRMRD_Acquisition and Acquisition.
---
 examples/c++/basic_test.cpp |   4 +-
 ismrmrd.cpp                 | 150 +++++++++++++++++++++++++-------------------
 ismrmrd.h                   |  14 ++---
 ismrmrd_dataset.cpp         |   6 +-
 ismrmrd_dataset.h           |   2 +-
 5 files changed, 97 insertions(+), 79 deletions(-)

diff --git a/examples/c++/basic_test.cpp b/examples/c++/basic_test.cpp
index a5fa77e..7e92440 100644
--- a/examples/c++/basic_test.cpp
+++ b/examples/c++/basic_test.cpp
@@ -61,7 +61,7 @@ int main (int args, char** argv) {
   ismrmrd_set_flag(&(c_acq.head.flags), ISMRMRD_ACQ_FIRST_IN_SLICE);
   Acquisition acq3(&c_acq);
   std::cout << "Acquisition nsamp: " << c_acq.head.number_of_samples << "    Acquisition wrapper nsamp: " << acq3.number_of_samples() << std::endl;
-  std::cout << "Acquisition data[4]: " << c_acq.data[4].real() << "      Acquisition wrapper data[4]: " << acq3.data()[4].real() << std::endl;
+  std::cout << "Acquisition data[4]: " << c_acq.data[4].real() << "      Acquisition wrapper data[4]: " << acq3.getData()[4].real() << std::endl;
 
   // Open an existing file
   Dataset dataset1 = Dataset("myfile.h5", "/dataset", false);
@@ -88,7 +88,7 @@ int main (int args, char** argv) {
       Acquisition * acqref = dataset1.readAcquisition(n);
       std::cout << "Acquisition " << n << " nsamp: " << acqref->number_of_samples() << std::endl;
       std::cout << "Acquisition " << n << " flags: " << acqref->flags() << std::endl;
-      std::cout << "Acquisition " << n << " data[4]: " << acqref->data()[4].real() << std::endl;
+      std::cout << "Acquisition " << n << " data[4]: " << acqref->getData()[4].real() << std::endl;
       dataset2.appendAcquisition(* acqref);
       delete acqref;
   }
diff --git a/ismrmrd.cpp b/ismrmrd.cpp
index e375e41..725a197 100644
--- a/ismrmrd.cpp
+++ b/ismrmrd.cpp
@@ -37,155 +37,173 @@ void AcquisitionHeader::clearAllFlags() {
 //
 // Constructors, assignment operator, destructor
 Acquisition::Acquisition() {
-    ismrmrd_init_acquisition(&acq_);
+    ismrmrd_init_acquisition(this);
 }
 
 Acquisition::Acquisition(const Acquisition &other) {
     // This is a deep copy
-    ismrmrd_init_acquisition(&acq_);
-    ismrmrd_copy_acquisition(&acq_, &other.acq_);
+    ismrmrd_init_acquisition(this);
+    ismrmrd_copy_acquisition(this, &other);
 }
 
 Acquisition::Acquisition(const ISMRMRD_Acquisition *acq) {
     // This is a deep copy
-    ismrmrd_init_acquisition(&acq_);
-    ismrmrd_copy_acquisition(&acq_, acq);
+    ismrmrd_init_acquisition(this);
+    ismrmrd_copy_acquisition(this, acq);
 }
 
 Acquisition & Acquisition::operator= (const Acquisition &other) {
     // Assignment makes a copy
     if (this != &other )
     {
-        ismrmrd_init_acquisition(&acq_);
-        ismrmrd_copy_acquisition(&acq_, &other.acq_);
+        ismrmrd_init_acquisition(this);
+        ismrmrd_copy_acquisition(this, &other);
     }
     return *this;
 }
 
 Acquisition::~Acquisition() {
-    ismrmrd_cleanup_acquisition(&acq_);
+    ismrmrd_cleanup_acquisition(this);
 }
 
 // Accessors and mutators
 const uint16_t &Acquisition::version() {
-    return acq_.head.version;
-};
+    return head.version;
+}
 
 const uint64_t &Acquisition::flags() {
-    return acq_.head.flags;
-};
+    return head.flags;
+}
 
 uint32_t &Acquisition::measurement_uid() {
-    return acq_.head.measurement_uid;
-};
+    return head.measurement_uid;
+}
 
 uint32_t &Acquisition::scan_counter() {
-    return acq_.head.scan_counter;
-};
+    return head.scan_counter;
+}
 
 uint32_t &Acquisition::acquisition_time_stamp() {
-    return acq_.head.acquisition_time_stamp;
-};
+    return head.acquisition_time_stamp;
+}
 
 uint32_t (&Acquisition::physiology_time_stamp()) [ISMRMRD_PHYS_STAMPS] {
-    return acq_.head.physiology_time_stamp;
-};
+    return head.physiology_time_stamp;
+}
 
 const uint16_t &Acquisition::number_of_samples() {
-    return acq_.head.number_of_samples;
-};
+    return head.number_of_samples;
+}
 
 void Acquisition::number_of_samples(uint16_t num_samples) {
-    acq_.head.number_of_samples = num_samples;
-    ismrmrd_make_consistent_acquisition(&acq_);
-};
+    head.number_of_samples = num_samples;
+    ismrmrd_make_consistent_acquisition(this);
+}
 
 uint16_t &Acquisition::available_channels() {
-    return acq_.head.available_channels;
-};
+    return head.available_channels;
+}
 
 const uint16_t &Acquisition::active_channels() {
-    return acq_.head.active_channels;
-};
+    return head.active_channels;
+}
 
 void Acquisition::active_channels(uint16_t num_channels) {
-    acq_.head.active_channels = num_channels;
-    ismrmrd_make_consistent_acquisition(&acq_);
-};
+    head.active_channels = num_channels;
+    ismrmrd_make_consistent_acquisition(this);
+}
 
 const uint64_t (&Acquisition::channel_mask()) [ISMRMRD_CHANNEL_MASKS] {
-    return acq_.head.channel_mask;
-};
+    return head.channel_mask;
+}
 
 uint16_t &Acquisition::discard_pre() {
-    return acq_.head.discard_pre;
-};
+    return head.discard_pre;
+}
 
 uint16_t &Acquisition::discard_post() {
-    return acq_.head.discard_post;
-};
+    return head.discard_post;
+}
 
 uint16_t &Acquisition::center_sample() {
-    return acq_.head.center_sample;
-};
+    return head.center_sample;
+}
 
 uint16_t &Acquisition::encoding_space_ref() {
-    return acq_.head.encoding_space_ref;
-};
+    return head.encoding_space_ref;
+}
 
 uint16_t &Acquisition::trajectory_dimensions() {
-    return acq_.head.trajectory_dimensions;
-};
+    return head.trajectory_dimensions;
+}
 
 float &Acquisition::sample_time_us() {
-    return acq_.head.sample_time_us;
-};
+    return head.sample_time_us;
+}
 
 float (&Acquisition::position())[3] {
-    return acq_.head.position;
-};
+    return head.position;
+}
 
 float (&Acquisition::read_dir())[3] {
-    return acq_.head.read_dir;
-};
+    return head.read_dir;
+}
 
 float (&Acquisition::phase_dir())[3] {
-    return acq_.head.phase_dir;
-};
+    return head.phase_dir;
+}
 
 float (&Acquisition::slice_dir())[3] {
-    return acq_.head.slice_dir;
-};
+    return head.slice_dir;
+}
 
 float (&Acquisition::patient_table_position())[3] {
-    return acq_.head.patient_table_position;
-};
+    return head.patient_table_position;
+}
 
 ISMRMRD_EncodingCounters &Acquisition::idx() {
-    return acq_.head.idx;
-};
+    return head.idx;
+}
 
-int32_t (&Acquisition::user_int()) [ISMRMRD_USER_INTS] { return acq_.head.user_int; };
+int32_t (&Acquisition::user_int()) [ISMRMRD_USER_INTS] {
+    return head.user_int;
+}
 
-float (&Acquisition::user_float()) [ISMRMRD_USER_FLOATS] { return acq_.head.user_float; };
+float (&Acquisition::user_float()) [ISMRMRD_USER_FLOATS] {
+    return head.user_float;
+}
 
 // Data and Trajectory accessors
-complex_float_t * Acquisition::data() { return acq_.data; };
+AcquisitionHeader * Acquisition::getHead() {
+    // This returns a pointer
+    return static_cast<AcquisitionHeader *>(&head);
+}
+
+void Acquisition::setHead(const AcquisitionHeader other) {
+    memcpy(&head, &other, sizeof(AcquisitionHeader));
+    ismrmrd_make_consistent_acquisition(this);
+}
 
-float * Acquisition::traj() { return acq_.traj; };
+complex_float_t * Acquisition::getData() {
+    return data;
+}
+
+float * Acquisition::getTraj() {
+    return traj;
+}
 
 // Flag methods
 bool Acquisition::isFlagSet(const uint64_t val) {
-    return ismrmrd_is_flag_set(acq_.head.flags, val);
+    return ismrmrd_is_flag_set(head.flags, val);
 };
 void Acquisition::setFlag(const uint64_t val) {
-    ismrmrd_set_flag(&acq_.head.flags, val);
+    ismrmrd_set_flag(&head.flags, val);
 };
 void Acquisition::clearFlag(const uint64_t val) {
-    ismrmrd_clear_flag(&acq_.head.flags, val);
+    ismrmrd_clear_flag(&head.flags, val);
 };
 void Acquisition::clearAllFlags() {
-    ismrmrd_clear_all_flags(&acq_.head.flags);
+    ismrmrd_clear_all_flags(&head.flags);
 };
 
 // TODO: Channel mask methods go here
diff --git a/ismrmrd.h b/ismrmrd.h
index 2251962..99295bd 100644
--- a/ismrmrd.h
+++ b/ismrmrd.h
@@ -362,13 +362,13 @@ public:
 
 };
 
-class Acquisition {
+class Acquisition: protected ISMRMRD_Acquisition {
     friend class Dataset;
 public:
     // Constructors, assignment, destructor
     Acquisition();
     Acquisition(const Acquisition &other);
-    Acquisition(const ISMRMRD_Acquisition *acq);
+    Acquisition(const ISMRMRD_Acquisition *other);
     Acquisition & operator= (const Acquisition &other);
     ~Acquisition();
 
@@ -400,10 +400,12 @@ public:
     int32_t (&user_int())[ISMRMRD_USER_INTS];
     float (&user_float())[ISMRMRD_USER_FLOATS];
 
-    // Data and Trajectory accessors
-    complex_float_t * data();
+    // Header, data and trajectory accessors
+    AcquisitionHeader * getHead();
+    void setHead(const AcquisitionHeader other);
+    complex_float_t * getData();
     uint64_t numDataElements();
-    float * traj();
+    float * getTraj();
     uint64_t numTrajElements();
 
     // Flag methods
@@ -419,8 +421,6 @@ public:
     //void setChannelNotActive(uint16_t channel_id);
     //void setAllChannelsNotActive();
 
-protected:
-    ISMRMRD_Acquisition acq_;
 };
 
 class ImageHeader: public ISMRMRD_ImageHeader {
diff --git a/ismrmrd_dataset.cpp b/ismrmrd_dataset.cpp
index 9d02745..097f959 100644
--- a/ismrmrd_dataset.cpp
+++ b/ismrmrd_dataset.cpp
@@ -58,16 +58,16 @@ char * Dataset::readHeader()
 }
 
 // Acquisitions
-int Dataset::appendAcquisition(const Acquisition &acq)
+int Dataset::appendAcquisition(const Acquisition acq)
 {
-    int status = ismrmrd_append_acquisition(&dset_, &acq.acq_);
+    int status = ismrmrd_append_acquisition(&dset_, static_cast<const ISMRMRD_Acquisition*>(&acq));
     return status;
 }
 
 Acquisition * Dataset::readAcquisition(unsigned long index)
 {
     Acquisition * acq = new Acquisition();
-    int status = ismrmrd_read_acquisition(&dset_, index, &acq->acq_);
+    int status = ismrmrd_read_acquisition(&dset_, index, static_cast<ISMRMRD_Acquisition*>(acq));
     return acq;
 }
 
diff --git a/ismrmrd_dataset.h b/ismrmrd_dataset.h
index ba23507..24e75b9 100644
--- a/ismrmrd_dataset.h
+++ b/ismrmrd_dataset.h
@@ -167,7 +167,7 @@ public:
     int readHeader(std::string& xmlstring);
     char * readHeader();
     // Acquisitions
-    int appendAcquisition(const Acquisition &acq);
+    int appendAcquisition(const Acquisition acq);
     Acquisition * readAcquisition(unsigned long index);
     unsigned long getNumberOfAcquisitions();
 

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