[ismrmrd] 121/177: Finishing up making Image templated.
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Wed Jan 14 20:02:10 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 6733ac5e2734bf9c42ac30748918958d4d68c477
Author: Souheil Inati <souheil.inati at nih.gov>
Date: Tue Sep 30 13:10:02 2014 -0400
Finishing up making Image templated.
---
include/ismrmrd/ismrmrd.h | 14 +-
libsrc/ismrmrd.cpp | 378 ++++++++++++++++++++++++++++++----------------
2 files changed, 250 insertions(+), 142 deletions(-)
diff --git a/include/ismrmrd/ismrmrd.h b/include/ismrmrd/ismrmrd.h
index 22859a2..d84a0e8 100644
--- a/include/ismrmrd/ismrmrd.h
+++ b/include/ismrmrd/ismrmrd.h
@@ -621,8 +621,8 @@ public:
// Attributes
- const uint16_t getVersion() const;
- const uint16_t getDataType() const;
+ uint16_t getVersion() const;
+ ISMRMRD_DataTypes getDataType() const;
// Counters and labels
uint32_t getMeasurementUid() const;
@@ -671,26 +671,24 @@ public:
// Flags
uint64_t getFlags() const;
void setFlags(const uint64_t flags);
- bool isFlagSet(const uint64_t val);
+ bool isFlagSet(const uint64_t val) const;
void setFlag(const uint64_t val);
void clearFlag(const uint64_t val);
void clearAllFlags();
// Header
- const ImageHeader & getHead() const;
+ ImageHeader & getHead();
void setHead(const ImageHeader& head);
// Attribute string
- char const * getAttributString() const;
- void setAttributString(const char * attr);
void getAttributeString(std::string &atrr) const;
void setAttributeString(const std::string attr);
const size_t getAttributeStringLength();
// Data
T * const getData() const;
- const size_t getNumberOfDataElements() const;
- const size_t getDataSize() const;
+ size_t getNumberOfDataElements() const;
+ size_t getDataSize() const;
};
/// N-Dimensional array type
diff --git a/libsrc/ismrmrd.cpp b/libsrc/ismrmrd.cpp
index 635eb79..dcc714f 100644
--- a/libsrc/ismrmrd.cpp
+++ b/libsrc/ismrmrd.cpp
@@ -302,8 +302,8 @@ template <typename T> Image<T>::Image(uint16_t matrix_size_x,
if (ismrmrd_init_image(this) != ISMRMRD_NOERROR) {
throw std::runtime_error(build_exception_string());
}
- this->head.data_type = get_data_type<T>();
- this->resize(matrix_size_x, matrix_size_y, matrix_size_z, channels);
+ head.data_type = get_data_type<T>();
+ resize(matrix_size_x, matrix_size_y, matrix_size_z, channels);
}
template <typename T> Image<T>::Image(const Image<T> &other) {
@@ -360,10 +360,10 @@ template <typename T> void Image<T>::resize(uint16_t matrix_size_x,
channels = 1;
}
- this->head.matrix_size[0] = matrix_size_x;
- this->head.matrix_size[1] = matrix_size_y;
- this->head.matrix_size[2] = matrix_size_z;
- this->head.channels = channels;
+ head.matrix_size[0] = matrix_size_x;
+ head.matrix_size[1] = matrix_size_y;
+ head.matrix_size[2] = matrix_size_z;
+ head.channels = channels;
if (ismrmrd_make_consistent_image(this) != ISMRMRD_NOERROR) {
throw std::runtime_error(build_exception_string());
}
@@ -371,13 +371,13 @@ template <typename T> void Image<T>::resize(uint16_t matrix_size_x,
template <typename T> uint16_t Image<T>::getMatrixSizeX() const
{
- return this->head.matrix_size[0];
+ return head.matrix_size[0];
}
template <typename T> void Image<T>::setMatrixSizeX(uint16_t matrix_size_x)
{
// TODO what if matrix_size_x = 0?
- this->head.matrix_size[0] = matrix_size_x;
+ head.matrix_size[0] = matrix_size_x;
if (ismrmrd_make_consistent_image(this) != ISMRMRD_NOERROR) {
throw std::runtime_error(build_exception_string());
}
@@ -385,7 +385,7 @@ template <typename T> void Image<T>::setMatrixSizeX(uint16_t matrix_size_x)
template <typename T> uint16_t Image<T>::getMatrixSizeY() const
{
- return this->head.matrix_size[1];
+ return head.matrix_size[1];
}
template <typename T> void Image<T>::setMatrixSizeY(uint16_t matrix_size_y)
@@ -393,7 +393,7 @@ template <typename T> void Image<T>::setMatrixSizeY(uint16_t matrix_size_y)
if (matrix_size_y == 0) {
matrix_size_y = 1;
}
- this->head.matrix_size[1] = matrix_size_y;
+ head.matrix_size[1] = matrix_size_y;
if (ismrmrd_make_consistent_image(this) != ISMRMRD_NOERROR) {
throw std::runtime_error(build_exception_string());
}
@@ -401,7 +401,7 @@ template <typename T> void Image<T>::setMatrixSizeY(uint16_t matrix_size_y)
template <typename T> uint16_t Image<T>::getMatrixSizeZ() const
{
- return this->head.matrix_size[2];
+ return head.matrix_size[2];
}
template <typename T> void Image<T>::setMatrixSizeZ(uint16_t matrix_size_z)
@@ -409,7 +409,7 @@ template <typename T> void Image<T>::setMatrixSizeZ(uint16_t matrix_size_z)
if (matrix_size_z == 0) {
matrix_size_z = 1;
}
- this->head.matrix_size[2] = matrix_size_z;
+ head.matrix_size[2] = matrix_size_z;
if (ismrmrd_make_consistent_image(this) != ISMRMRD_NOERROR) {
throw std::runtime_error(build_exception_string());
}
@@ -417,7 +417,7 @@ template <typename T> void Image<T>::setMatrixSizeZ(uint16_t matrix_size_z)
template <typename T> uint16_t Image<T>::getNumberOfChannels() const
{
- return this->head.channels;
+ return head.channels;
}
template <typename T> void Image<T>::setNumberOfChannels(uint16_t channels)
@@ -426,7 +426,7 @@ template <typename T> void Image<T>::setNumberOfChannels(uint16_t channels)
channels = 1;
}
- this->head.channels = channels;
+ head.channels = channels;
if (ismrmrd_make_consistent_image(this) != ISMRMRD_NOERROR) {
throw std::runtime_error(build_exception_string());
}
@@ -435,334 +435,390 @@ template <typename T> void Image<T>::setNumberOfChannels(uint16_t channels)
template <typename T> void Image<T>::setFieldOfView(float fov_x, float fov_y, float fov_z)
{
- this->head.field_of_view[0] = fov_x;
- this->head.field_of_view[1] = fov_y;
- this->head.field_of_view[2] = fov_z;
+ head.field_of_view[0] = fov_x;
+ head.field_of_view[1] = fov_y;
+ head.field_of_view[2] = fov_z;
}
template <typename T> void Image<T>::setFieldOfViewX(float fov_x)
{
- this->head.field_of_view[0] = fov_x;
+ head.field_of_view[0] = fov_x;
}
template <typename T> float Image<T>::getFieldOfViewX() const
{
- return this->head.field_of_view[0];
+ return head.field_of_view[0];
}
template <typename T> void Image<T>::setFieldOfViewY(float fov_y)
{
- this->head.field_of_view[1] = fov_y;
+ head.field_of_view[1] = fov_y;
}
template <typename T> float Image<T>::getFieldOfViewY() const
{
- return this->head.field_of_view[1];
+ return head.field_of_view[1];
}
template <typename T> void Image<T>::setFieldOfViewZ(float fov_z)
{
- this->head.field_of_view[2] = fov_z;
+ head.field_of_view[2] = fov_z;
}
template <typename T> float Image<T>::getFieldOfViewZ() const
{
- return this->head.field_of_view[2];
+ return head.field_of_view[2];
}
// Positions and orientations
template <typename T> void Image<T>::setPosition(float x, float y, float z)
{
- this->head.position[0] = x;
- this->head.position[1] = y;
- this->head.position[2] = z;
+ head.position[0] = x;
+ head.position[1] = y;
+ head.position[2] = z;
}
template <typename T> float Image<T>::getPositionX() const
{
- return this->head.position[0];
+ return head.position[0];
}
template <typename T> void Image<T>::setPositionX(float x)
{
- this->head.position[0] = x;
+ head.position[0] = x;
}
template <typename T> float Image<T>::getPositionY() const
{
- return this->head.position[1];
+ return head.position[1];
}
template <typename T> void Image<T>::setPositionY(float y)
{
- this->head.position[1] = y;
+ head.position[1] = y;
}
template <typename T> float Image<T>::getPositionZ() const
{
- return this->head.position[2];
+ return head.position[2];
}
template <typename T> void Image<T>::setPositionZ(float z)
{
- this->head.position[2] = z;
+ head.position[2] = z;
}
template <typename T> void Image<T>::setReadDirection(float x, float y, float z)
{
- this->head.read_dir[0] = x;
- this->head.read_dir[1] = y;
- this->head.read_dir[2] = z;
+ head.read_dir[0] = x;
+ head.read_dir[1] = y;
+ head.read_dir[2] = z;
}
template <typename T> float Image<T>::getReadDirectionX() const
{
- return this->head.read_dir[0];
+ return head.read_dir[0];
}
template <typename T> void Image<T>::setReadDirectionX(float x)
{
- this->head.read_dir[0] = x;
+ head.read_dir[0] = x;
}
template <typename T> float Image<T>::getReadDirectionY() const
{
- return this->head.read_dir[1];
+ return head.read_dir[1];
}
template <typename T> void Image<T>::setReadDirectionY(float y)
{
- this->head.read_dir[1] = y;
+ head.read_dir[1] = y;
}
template <typename T> float Image<T>::getReadDirectionZ() const
{
- return this->head.read_dir[2];
+ return head.read_dir[2];
}
template <typename T> void Image<T>::setReadDirectionZ(float z)
{
- this->head.read_dir[2] = z;
+ head.read_dir[2] = z;
}
template <typename T> void Image<T>::setPhaseDirection(float x, float y, float z)
{
- this->head.phase_dir[0] = x;
- this->head.phase_dir[1] = y;
- this->head.phase_dir[2] = z;
+ head.phase_dir[0] = x;
+ head.phase_dir[1] = y;
+ head.phase_dir[2] = z;
}
template <typename T> float Image<T>::getPhaseDirectionX() const
{
- return this->head.phase_dir[0];
+ return head.phase_dir[0];
}
template <typename T> void Image<T>::setPhaseDirectionX(float x)
{
- this->head.phase_dir[0] = x;
+ head.phase_dir[0] = x;
}
template <typename T> float Image<T>::getPhaseDirectionY() const
{
- return this->head.phase_dir[1];
+ return head.phase_dir[1];
}
template <typename T> void Image<T>::setPhaseDirectionY(float y)
{
- this->head.phase_dir[1] = y;
+ head.phase_dir[1] = y;
}
template <typename T> float Image<T>::getPhaseDirectionZ() const
{
- return this->head.phase_dir[2];
+ return head.phase_dir[2];
}
template <typename T> void Image<T>::setPhaseDirectionZ(float z)
{
- this->head.phase_dir[2] = z;
+ head.phase_dir[2] = z;
}
template <typename T> void Image<T>::setSliceDirection(float x, float y, float z)
{
- this->head.slice_dir[0] = x;
- this->head.slice_dir[1] = y;
- this->head.slice_dir[2] = z;
+ head.slice_dir[0] = x;
+ head.slice_dir[1] = y;
+ head.slice_dir[2] = z;
}
template <typename T> float Image<T>::getSliceDirectionX() const
{
- return this->head.slice_dir[0];
+ return head.slice_dir[0];
}
template <typename T> void Image<T>::setSliceDirectionX(float x)
{
- this->head.slice_dir[0] = x;
+ head.slice_dir[0] = x;
}
template <typename T> float Image<T>::getSliceDirectionY() const
{
- return this->head.slice_dir[1];
+ return head.slice_dir[1];
}
template <typename T> void Image<T>::setSliceDirectionY(float y)
{
- this->head.slice_dir[1] = y;
+ head.slice_dir[1] = y;
}
template <typename T> float Image<T>::getSliceDirectionZ() const
{
- return this->head.slice_dir[2];
+ return head.slice_dir[2];
}
template <typename T> void Image<T>::setSliceDirectionZ(float z)
{
- this->head.slice_dir[2] = z;
+ head.slice_dir[2] = z;
}
template <typename T> void Image<T>::setPatientTablePosition(float x, float y, float z)
{
- this->head.patient_table_position[0] = x;
- this->head.patient_table_position[1] = y;
- this->head.patient_table_position[2] = z;
+ head.patient_table_position[0] = x;
+ head.patient_table_position[1] = y;
+ head.patient_table_position[2] = z;
}
template <typename T> float Image<T>::getPatientTablePositionX() const
{
- return this->head.patient_table_position[0];
+ return head.patient_table_position[0];
}
template <typename T> void Image<T>::setPatientTablePositionX(float x)
{
- this->head.patient_table_position[0] = x;
+ head.patient_table_position[0] = x;
}
template <typename T> float Image<T>::getPatientTablePositionY() const
{
- return this->head.patient_table_position[1];
+ return head.patient_table_position[1];
}
template <typename T> void Image<T>::setPatientTablePositionY(float y)
{
- this->head.patient_table_position[1] = y;
+ head.patient_table_position[1] = y;
}
template <typename T> float Image<T>::getPatientTablePositionZ() const
{
- return this->head.patient_table_position[2];
+ return head.patient_table_position[2];
}
template <typename T> void Image<T>::setPatientTablePositionZ(float z)
{
- this->head.patient_table_position[2] = z;
+ head.patient_table_position[2] = z;
}
+template <typename T> uint16_t Image<T>::getVersion() const
+{
+ return head.version;
+}
-#ifdef YOMAMA
-
-// Accessors and mutators
-template <typename T> const uint64_t &Image<T>::flags() {
- return head.flags;
-};
+template <typename T> ISMRMRD_DataTypes Image<T>::getDataType() const
+{
+ return static_cast<ISMRMRD_DataTypes>(head.data_type);
+}
-template <typename T> uint32_t &Image<T>::measurement_uid() {
+template <typename T> uint32_t Image<T>::getMeasurementUid() const
+{
return head.measurement_uid;
-};
+}
+
+template <typename T> void Image<T>::setMeasurementUid(uint32_t measurement_uid)
+{
+ head.measurement_uid = measurement_uid;
+}
-template <typename T> uint16_t &Image<T>::average() {
+
+template <typename T> uint16_t Image<T>::getAverage() const
+{
return head.average;
-};
+}
-template <typename T> uint16_t &Image<T>::slice() {
+template <typename T> void Image<T>::setAverage(uint16_t average)
+{
+ head.average = average;
+}
+
+template <typename T> uint16_t Image<T>::getSlice() const
+{
return head.slice;
-};
+}
+
+template <typename T> void Image<T>::setSlice(uint16_t slice)
+{
+ head.slice = slice;
+}
-template <typename T> uint16_t &Image<T>::contrast() {
+template <typename T> uint16_t Image<T>::getContrast() const
+{
return head.contrast;
-};
+}
-template <typename T> uint16_t &Image<T>::phase() {
- return head.repetition;
-};
+template <typename T> void Image<T>::setContrast(uint16_t contrast)
+{
+ head.contrast = contrast;
+}
+
+template <typename T> uint16_t Image<T>::getPhase() const
+{
+ return head.phase;
+}
-template <typename T> uint16_t &Image<T>::repetition() {
+template <typename T> void Image<T>::setPhase(uint16_t phase)
+{
+ head.phase = phase;
+}
+
+template <typename T> uint16_t Image<T>::getRepetition() const
+{
return head.repetition;
-};
+}
+
+template <typename T> void Image<T>::setRepetition(uint16_t repetition)
+{
+ head.repetition = repetition;
+}
-template <typename T> uint16_t &Image<T>::set() {
+template <typename T> uint16_t Image<T>::getSet() const
+{
return head.set;
-};
+}
-template <typename T> uint32_t &Image<T>::acquisition_time_stamp() {
- return head.acquisition_time_stamp;
-};
+template <typename T> void Image<T>::setSet(uint16_t set)
+{
+ head.set = set;
+}
-template <typename T> uint32_t (&Image<T>::physiology_time_stamp()) [ISMRMRD_PHYS_STAMPS] {
- return head.physiology_time_stamp;
-};
+template <typename T> uint32_t Image<T>::getAcquisitionTimeStamp() const
+{
+ return head.acquisition_time_stamp;
+}
-template <typename T> uint16_t &Image<T>::image_type() {
- return head.image_type;
-};
+template <typename T> void Image<T>::setAcquisitionTimeStamp(uint32_t acquisition_time_stamp)
+{
+ head.acquisition_time_stamp = acquisition_time_stamp;
+}
-template <typename T> uint16_t &Image<T>::image_index() {
- return head.image_index;
-};
+template <typename T> uint32_t Image<T>::getPhysiologyTimeStamp(unsigned int stamp_id) const
+{
+ return head.physiology_time_stamp[stamp_id];
+}
-template <typename T> uint16_t &Image<T>::image_series_index() {
- return head.image_series_index;
-};
+template <typename T> void Image<T>::setPhysiologyTimeStamp(unsigned int stamp_id, uint32_t value)
+{
+ head.physiology_time_stamp[stamp_id] = value;
+}
-template <typename T> int32_t (&Image<T>::user_int()) [ISMRMRD_USER_INTS] {
- return head.user_int;
-};
+template <typename T> uint16_t Image<T>::getImageType() const
+{
+ return head.image_type;
+}
-template <typename T> float (&Image<T>::user_float()) [ISMRMRD_USER_FLOATS] {
- return head.user_float;
-};
+template <typename T> void Image<T>::setImageType(uint16_t image_type)
+{
+ head.image_type = image_type;
+}
-template <typename T> const uint32_t &Image<T>::attribute_string_len() {
- return head.attribute_string_len;
-};
+template <typename T> uint16_t Image<T>::getImageIndex() const
+{
+ return head.image_index;
+}
-// Header and data accessors
-template <typename T> ImageHeader &Image<T>::getHead() {
- // This returns a reference
- return *static_cast<ImageHeader *>(&head);
+template <typename T> void Image<T>::setImageIndex(uint16_t image_index)
+{
+ head.image_index = image_index;
}
-template <typename T> void Image::setHead<T>(const ImageHeader other) {
- memcpy(&head, &other, sizeof(ImageHeader));
- if (ismrmrd_make_consistent_image(this) != ISMRMRD_NOERROR) {
- throw std::runtime_error(build_exception_string());
- }
+template <typename T> uint16_t Image<T>::getImageSeriesIndex() const
+{
+ return head.image_series_index;
}
-template <typename T> void Image<T>::setAttributeString(std::string attr) {
- head.attribute_string_len = attr.length();
- attribute_string = (char *)realloc(attribute_string, attr.length()+1);
- strcpy(attribute_string, attr.c_str());
+template <typename T> void Image<T>::setImageSeriesIndex(uint16_t image_series_index)
+{
+ head.image_series_index = image_series_index;
}
-template <typename T> void Image<T>::getAttributeString(std::string &attr) {
- attr = std::string(attribute_string);
+
+// User parameters
+template <typename T> float Image<T>::getUserFloat(unsigned int index) const
+{
+ return head.user_float[index];
}
-template <typename T> T * const Image<T>::getData() {
- return static_cast<T*>(data);
+template <typename T> void Image<T>::setUserFloat(unsigned int index, float value)
+{
+ head.user_float[index] = value;
}
-template <typename T> size_t Image<T>::getDataSize() {
- return ismrmrd_size_of_image_data(this);
+template <typename T> int32_t Image<T>::getUserInt(unsigned int index) const
+{
+ return head.user_int[index];
}
-#endif // YOMAMA
+template <typename T> void Image<T>::setUserInt(unsigned int index, int32_t value)
+{
+ head.user_int[index] = value;
+}
// Flag methods
-template <typename T> bool Image<T>::isFlagSet(const uint64_t val) {
+template <typename T> uint64_t Image<T>::getFlags() const {
+ return head.flags;
+}
+
+template <typename T> bool Image<T>::isFlagSet(const uint64_t val) const {
return ismrmrd_is_flag_set(head.flags, val);
}
@@ -778,6 +834,60 @@ template <typename T> void Image<T>::clearAllFlags() {
ismrmrd_clear_all_flags(&(head.flags));
}
+// Header
+template <typename T> ImageHeader &Image<T>::getHead() {
+ // This returns a reference
+ return *static_cast<ImageHeader *>(&head);
+}
+
+template <typename T> void Image<T>::setHead(const ImageHeader &other) {
+ if (other.data_type != head.data_type) {
+ throw std::runtime_error("Cannot assign a header of a different data type.");
+ }
+
+ memcpy(&head, &other, sizeof(ImageHeader));
+ if (ismrmrd_make_consistent_image(this) != ISMRMRD_NOERROR) {
+ throw std::runtime_error(build_exception_string());
+ }
+}
+
+// Attribute string
+template <typename T> void Image<T>::getAttributeString(std::string &attr) const
+{
+ attr = std::string(attribute_string);
+}
+
+template <typename T> void Image<T>::setAttributeString(const std::string attr)
+{
+ head.attribute_string_len = attr.length();
+ attribute_string = (char *)realloc(attribute_string, attr.length()+1);
+ // TODO error check?
+ strcpy(attribute_string, attr.c_str());
+}
+
+template <typename T> const size_t Image<T>::getAttributeStringLength()
+{
+ return head.attribute_string_len;
+}
+
+// Data
+template <typename T> T * const Image<T>::getData() const {
+ return static_cast<T*>(data);
+}
+
+template <typename T> size_t Image<T>::getNumberOfDataElements() const {
+ size_t num = 1;
+ num *= head.matrix_size[0];
+ num *= head.matrix_size[1];
+ num *= head.matrix_size[2];
+ num *= head.channels;
+ return ismrmrd_size_of_image_data(this);
+}
+
+template <typename T> size_t Image<T>::getDataSize() const {
+ return ismrmrd_size_of_image_data(this);
+}
+
//
// Array class Implementation
--
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