[ismrmrd] 41/177: Changed implementation of C++ ImageHeader and Image to be castable to and from C version.
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Wed Jan 14 20:02:00 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 49c19d7207dbefa06eadfec02fd88702328d9bb8
Author: Souheil Inati <souheil.inati at nih.gov>
Date: Wed Sep 3 15:36:51 2014 -0400
Changed implementation of C++ ImageHeader and Image to be castable to and from C version.
---
ismrmrd.c | 19 ++++++--
ismrmrd.cpp | 129 +++++++++++++++++++++++++++++++++-------------------
ismrmrd.h | 28 +++++++-----
ismrmrd_dataset.cpp | 4 +-
4 files changed, 114 insertions(+), 66 deletions(-)
diff --git a/ismrmrd.c b/ismrmrd.c
index 86ea9b0..583e7c7 100644
--- a/ismrmrd.c
+++ b/ismrmrd.c
@@ -118,10 +118,10 @@ void ismrmrd_init_image_header(ISMRMRD_ImageHeader *hdr) {
}
/* Image functions */
-void ismrmrd_init_image(ISMRMRD_Image *im) {
- ismrmrd_init_image_header(&im->head);
- im->attribute_string = NULL;
- im->data = NULL;
+ISMRMRD_Image * ismrmrd_create_image() {
+ ISMRMRD_Image *im = (ISMRMRD_Image *) malloc(sizeof(ISMRMRD_Image));
+ ismrmrd_init_image(im);
+ return im;
}
void ismrmrd_free_image(ISMRMRD_Image *im) {
@@ -129,7 +129,18 @@ void ismrmrd_free_image(ISMRMRD_Image *im) {
free(im->attribute_string);
free(im);
}
+
+void ismrmrd_init_image(ISMRMRD_Image *im) {
+ ismrmrd_init_image_header(&im->head);
+ im->attribute_string = NULL;
+ im->data = NULL;
+}
+void ismrmrd_cleanup_image(ISMRMRD_Image *im) {
+ free(im->attribute_string);
+ free(im->data);
+}
+
void ismrmrd_copy_image(ISMRMRD_Image *imdest, const ISMRMRD_Image *imsource) {
memcpy(&imdest->head, &imsource->head, sizeof(ISMRMRD_ImageHeader));
ismrmrd_make_consistent_image(imdest);
diff --git a/ismrmrd.cpp b/ismrmrd.cpp
index b87e2d4..aa5ce03 100644
--- a/ismrmrd.cpp
+++ b/ismrmrd.cpp
@@ -46,12 +46,6 @@ Acquisition::Acquisition(const Acquisition &other) {
ismrmrd_copy_acquisition(this, &other);
}
-Acquisition::Acquisition(const ISMRMRD_Acquisition *acq) {
- // This is a deep copy
- ismrmrd_init_acquisition(this);
- ismrmrd_copy_acquisition(this, acq);
-}
-
Acquisition & Acquisition::operator= (const Acquisition &other) {
// Assignment makes a copy
if (this != &other )
@@ -240,159 +234,198 @@ void ImageHeader::clearAllFlags() {
// Constructors
Image::Image() {
- ismrmrd_init_image(&image_);
+ ismrmrd_init_image(this);
};
+Image::Image(const Image &other) {
+ // This is a deep copy
+ ismrmrd_init_image(this);
+ ismrmrd_copy_image(this, &other);
+}
+
+Image & Image::operator= (const Image &other) {
+ // Assignment makes a copy
+ if (this != &other )
+ {
+ ismrmrd_init_image(this);
+ ismrmrd_copy_image(this, &other);
+ }
+ return *this;
+}
+
+Image::~Image() {
+ ismrmrd_cleanup_image(this);
+}
+
// Accessors and mutators
const uint16_t &Image::version() {
- return image_.head.version;
+ return head.version;
};
const uint16_t &Image::data_type() {
- return image_.head.data_type;
+ return head.data_type;
};
void Image::data_type(uint16_t dtype) {
// TODO function to check if type is valid
- image_.head.data_type = dtype;
- ismrmrd_make_consistent_image(&image_);
+ head.data_type = dtype;
+ ismrmrd_make_consistent_image(this);
};
const uint64_t &Image::flags() {
- return image_.head.flags;
+ return head.flags;
};
uint32_t &Image::measurement_uid() {
- return image_.head.measurement_uid;
+ return head.measurement_uid;
};
const uint16_t (&Image::matrix_size())[3] {
- return image_.head.matrix_size;
+ return head.matrix_size;
};
void Image::matrix_size(const uint16_t msize[3]) {
- image_.head.matrix_size[0] = msize[0];
+ head.matrix_size[0] = msize[0];
if (msize[1] > 1) {
- image_.head.matrix_size[1] = msize[1];
+ head.matrix_size[1] = msize[1];
} else {
- image_.head.matrix_size[1] = 1;
+ head.matrix_size[1] = 1;
}
if (msize[2] > 0) {
- image_.head.matrix_size[2] = msize[2];
+ head.matrix_size[2] = msize[2];
} else {
- image_.head.matrix_size[2] = 1;
+ head.matrix_size[2] = 1;
}
- ismrmrd_make_consistent_image(&image_);
+ ismrmrd_make_consistent_image(this);
};
float (&Image::field_of_view())[3] {
- return image_.head.field_of_view;
+ return head.field_of_view;
};
const uint16_t &Image::channels() {
- return image_.head.channels;
+ return head.channels;
};
void Image::channels(const uint16_t num_channels) {
if (num_channels > 1) {
- image_.head.channels = num_channels;
+ head.channels = num_channels;
} else {
- image_.head.channels = 1;
+ head.channels = 1;
}
- ismrmrd_make_consistent_image(&image_);
+ ismrmrd_make_consistent_image(this);
};
float (&Image::position())[3] {
- return image_.head.position;
+ return head.position;
};
float (&Image::read_dir())[3] {
- return image_.head.read_dir;
+ return head.read_dir;
};
float (&Image::phase_dir())[3] {
- return image_.head.phase_dir;
+ return head.phase_dir;
};
float (&Image::slice_dir())[3] {
- return image_.head.slice_dir;
+ return head.slice_dir;
};
float (&Image::patient_table_position())[3] {
- return image_.head.patient_table_position;
+ return head.patient_table_position;
};
uint16_t &Image::average() {
- return image_.head.average;
+ return head.average;
};
uint16_t &Image::slice() {
- return image_.head.slice;
+ return head.slice;
};
uint16_t &Image::contrast() {
- return image_.head.contrast;
+ return head.contrast;
};
uint16_t &Image::phase() {
- return image_.head.repetition;
+ return head.repetition;
};
uint16_t &Image::repetition() {
- return image_.head.repetition;
+ return head.repetition;
};
uint16_t &Image::set() {
- return image_.head.set;
+ return head.set;
};
uint32_t &Image::acquisition_time_stamp() {
- return image_.head.acquisition_time_stamp;
+ return head.acquisition_time_stamp;
};
uint32_t (&Image::physiology_time_stamp()) [ISMRMRD_PHYS_STAMPS] {
- return image_.head.physiology_time_stamp;
+ return head.physiology_time_stamp;
};
uint16_t &Image::image_type() {
- return image_.head.image_type;
+ return head.image_type;
};
uint16_t &Image::image_index() {
- return image_.head.image_index;
+ return head.image_index;
};
uint16_t &Image::image_series_index() {
- return image_.head.image_series_index;
+ return head.image_series_index;
};
int32_t (&Image::user_int()) [ISMRMRD_USER_INTS] {
- return image_.head.user_int;
+ return head.user_int;
};
float (&Image::user_float()) [ISMRMRD_USER_FLOATS] {
- return image_.head.user_float;
+ return head.user_float;
};
const uint32_t &Image::attribute_string_len() {
- return image_.head.attribute_string_len;
+ return head.attribute_string_len;
};
+// Header and data accessors
+ImageHeader &Image::getHead() {
+ // This returns a reference
+ return *static_cast<ImageHeader *>(&head);
+}
+
+void Image::setHead(const ImageHeader other) {
+ memcpy(&head, &other, sizeof(ImageHeader));
+ ismrmrd_make_consistent_image(this);
+}
+
+char *Image::getAttributeString() {
+ return attribute_string;
+}
+
+void *Image::getData() {
+ return data;
+}
+
// Flag methods
bool Image::isFlagSet(const uint64_t val) {
- return ismrmrd_is_flag_set(image_.head.flags, val);
+ return ismrmrd_is_flag_set(head.flags, val);
};
void Image::setFlag(const uint64_t val) {
- ismrmrd_set_flag(&(image_.head.flags), val);
+ ismrmrd_set_flag(&(head.flags), val);
};
void Image::clearFlag(const uint64_t val) {
- ismrmrd_clear_flag(&(image_.head.flags), val);
+ ismrmrd_clear_flag(&(head.flags), val);
};
void Image::clearAllFlags() {
- ismrmrd_clear_all_flags(&(image_.head.flags));
+ ismrmrd_clear_all_flags(&(head.flags));
};
//
diff --git a/ismrmrd.h b/ismrmrd.h
index 667ee0a..b9ca0de 100644
--- a/ismrmrd.h
+++ b/ismrmrd.h
@@ -270,13 +270,16 @@ typedef struct ISMRMRD_Image {
void *data;
} ISMRMRD_Image;
-void ismrmrd_init_image(ISMRMRD_Image *im);
+
+ISMRMRD_Image * ismrmrd_create_image();
void ismrmrd_free_image(ISMRMRD_Image *im);
+void ismrmrd_init_image(ISMRMRD_Image *im);
+void ismrmrd_cleanup_image(ISMRMRD_Image *im);
void ismrmrd_copy_image(ISMRMRD_Image *imdest, const ISMRMRD_Image *imsource);
int ismrmrd_make_consistent_image(ISMRMRD_Image *im);
size_t ismrmrd_size_of_image_attribute_string(const ISMRMRD_Image *im);
size_t ismrmrd_size_of_image_data(const ISMRMRD_Image *im);
-
+
/************/
/* NDArrays */
/************/
@@ -389,12 +392,10 @@ public:
};
class Acquisition: protected ISMRMRD_Acquisition {
- friend class Dataset;
public:
// Constructors, assignment, destructor
Acquisition();
Acquisition(const Acquisition &other);
- Acquisition(const ISMRMRD_Acquisition *other);
Acquisition & operator= (const Acquisition &other);
~Acquisition();
@@ -430,9 +431,7 @@ public:
AcquisitionHeader &getHead();
void setHead(const AcquisitionHeader other);
complex_float_t *getData();
- uint64_t numDataElements();
float *getTraj();
- uint64_t numTrajElements();
// Flag methods
bool isFlagSet(const uint64_t val);
@@ -462,12 +461,13 @@ public:
};
-class Image {
+class Image : protected ISMRMRD_Image {
public:
// Constructors
Image();
- Image(Image &im);
- Image(ISMRMRD_Image *im);
+ Image(const Image &other);
+ Image & operator= (const Image &other);
+ ~Image();
// Accessors and mutators
const uint16_t &version();
@@ -500,14 +500,18 @@ public:
float (&user_float())[ISMRMRD_USER_FLOATS];
const uint32_t &attribute_string_len();
+ // Header and data accessors
+ ImageHeader &getHead();
+ void setHead(const ImageHeader other);
+ char *getAttributeString();
+ void setAttributeString(std::string attr);
+ void *getData();
+
// Flag methods
bool isFlagSet(const uint64_t val);
void setFlag(const uint64_t val);
void clearFlag(const uint64_t val);
void clearAllFlags();
-
-protected:
- ISMRMRD_Image image_;
};
class NDArray: protected ISMRMRD_NDArray {
diff --git a/ismrmrd_dataset.cpp b/ismrmrd_dataset.cpp
index 097f959..2a5975d 100644
--- a/ismrmrd_dataset.cpp
+++ b/ismrmrd_dataset.cpp
@@ -60,14 +60,14 @@ char * Dataset::readHeader()
// Acquisitions
int Dataset::appendAcquisition(const Acquisition acq)
{
- int status = ismrmrd_append_acquisition(&dset_, static_cast<const ISMRMRD_Acquisition*>(&acq));
+ int status = ismrmrd_append_acquisition(&dset_, reinterpret_cast<const ISMRMRD_Acquisition*>(&acq));
return status;
}
Acquisition * Dataset::readAcquisition(unsigned long index)
{
Acquisition * acq = new Acquisition();
- int status = ismrmrd_read_acquisition(&dset_, index, static_cast<ISMRMRD_Acquisition*>(acq));
+ int status = ismrmrd_read_acquisition(&dset_, index, reinterpret_cast<ISMRMRD_Acquisition*>(acq));
return acq;
}
--
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