[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