[ismrmrd] 243/281: Started working on XML library
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Wed Jan 14 20:01:20 UTC 2015
This is an automated email from the git hooks/post-receive script.
ghisvail-guest pushed a commit to annotated tag ismrmrd0.5
in repository ismrmrd.
commit 7a34e3e329a1624058dc9e8154742e240c287d64
Author: Michael S. Hansen <michael.hansen at nih.gov>
Date: Wed Jul 30 16:12:47 2014 -0400
Started working on XML library
---
CMakeLists.txt | 1 +
xml/CMakeLists.txt | 10 ++++
xml/ismrmrd_xml.cpp | 99 ++++++++++++++++++++++++++++++++++++++++
xml/ismrmrd_xml.h | 116 +++++++++++++++++++++++++++++++++++++++++++++++
xml/ismrmrd_xml_export.h | 14 ++++++
5 files changed, 240 insertions(+)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f9b3826..8b5fec1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -123,3 +123,4 @@ add_subdirectory(tests)
add_subdirectory(doc)
add_subdirectory(matlab)
add_subdirectory(bindings)
+add_subdirectory(xml)
\ No newline at end of file
diff --git a/xml/CMakeLists.txt b/xml/CMakeLists.txt
new file mode 100644
index 0000000..c4ac4cc
--- /dev/null
+++ b/xml/CMakeLists.txt
@@ -0,0 +1,10 @@
+add_library(ismrmrd_xml SHARED
+ ismrmrd_xml.h
+ ismrmrd_xml.cpp
+ )
+
+install (FILES ismrmrd_xml.h
+ DESTINATION include)
+
+install (TARGETS ismrmrd_xml DESTINATION lib)
+
diff --git a/xml/ismrmrd_xml.cpp b/xml/ismrmrd_xml.cpp
new file mode 100644
index 0000000..2dcd20a
--- /dev/null
+++ b/xml/ismrmrd_xml.cpp
@@ -0,0 +1,99 @@
+#include "ismrmrd_xml.h"
+
+#include <new> //For std::badalloc
+#include <stdexcept> //For std::length_error
+#include <stdio.h>
+#include <string.h>
+#include <iostream>
+
+
+namespace ISMRMRD
+{
+
+ IsmrmrdXmlString::IsmrmrdXmlString()
+ : string_(0)
+ , strlen_(0)
+ {
+
+ }
+
+ IsmrmrdXmlString::IsmrmrdXmlString(const char* s)
+ {
+ strlen_ = strlen(s);
+ allocate(strlen_);
+ copy_string(s,strlen_);
+ }
+
+ IsmrmrdXmlString::IsmrmrdXmlString(const char* s, size_t length)
+ {
+ strlen_ = length;
+ allocate(strlen_);
+ copy_string(s,strlen_);
+ }
+
+ IsmrmrdXmlString::~IsmrmrdXmlString()
+ {
+ if (string_) delete [] string_;
+ }
+
+ IsmrmrdXmlString::IsmrmrdXmlString(const IsmrmrdXmlString& s)
+ {
+ allocate(s.strlen_);
+ strlen_ = s.strlen_;
+ copy_string(s.string_,strlen_);
+ }
+
+ IsmrmrdXmlString& IsmrmrdXmlString::operator=(const IsmrmrdXmlString& s)
+ {
+ allocate(s.strlen_);
+ strlen_ = s.strlen_;
+ copy_string(s.string_,strlen_);
+ }
+
+
+ const char* IsmrmrdXmlString::c_str() {
+ return string_;
+ }
+
+ void IsmrmrdXmlString::set(const char* s)
+ {
+ size_t len = strlen(s);
+ set(s,len);
+ }
+
+ void IsmrmrdXmlString::set(const char* s, size_t len)
+ {
+ allocate(len);
+ strlen_ = len;
+ copy_string(s,len);
+ }
+
+ size_t IsmrmrdXmlString::size()
+ {
+ return strlen_;
+ }
+
+ void IsmrmrdXmlString::allocate(size_t len)
+ {
+ if (len != strlen_) {
+ if (string_) delete [] string_;
+ try {
+ string_ = new char[len+1];
+ } catch (std::bad_alloc&) {
+ std::cout << "Error allocating memory in IsmrmrdXmlString" << std::endl;
+ throw;
+ }
+ }
+ }
+
+ void IsmrmrdXmlString::copy_string(const char* s, size_t len)
+ {
+ if (len > strlen_) {
+ throw std::length_error("Invalid length array specified for copy in IsmrmrdXmlString");
+ }
+ memcpy(string_,s,len);
+ string_[len-1] = '\0';
+ }
+
+
+}
diff --git a/xml/ismrmrd_xml.h b/xml/ismrmrd_xml.h
new file mode 100644
index 0000000..777e457
--- /dev/null
+++ b/xml/ismrmrd_xml.h
@@ -0,0 +1,116 @@
+#include "ismrmrd_xml_export.h"
+
+#include <cstddef>
+
+namespace ISMRMRD
+{
+
+ /**
+
+ Simple string container class. The class is used for returning string values to avoid using std::string
+ which can cause problems when exported from a DLL on Windows.
+
+ */
+ class EXPORTISMRMRDXML IsmrmrdXmlString
+ {
+ public:
+ ///Default constructor
+ IsmrmrdXmlString();
+
+ ///Construct taking null terminated string
+ IsmrmrdXmlString(const char* s);
+
+ ///Construct taking length of string as input
+ IsmrmrdXmlString(const char* s, size_t length);
+
+ ///Destructor
+ ~IsmrmrdXmlString();
+
+ ///Copy constructor
+ IsmrmrdXmlString(const IsmrmrdXmlString& s);
+
+ ///Asignment operator
+ IsmrmrdXmlString& operator=(const IsmrmrdXmlString& s);
+
+ ///Get a const pointer to the string
+ const char* c_str();
+
+ ///Set the string
+ void set(const char* s);
+
+ ///Set the string with specified length
+ void set(const char* s, size_t len);
+
+ ///Get the length of the string
+ size_t size();
+
+
+ protected:
+ char* string_;
+ size_t strlen_;
+
+ void allocate(size_t len);
+ void copy_string(const char* s, size_t len);
+
+ };
+
+
+ struct EXPORTISMRMRDXML SubjectInformation
+ {
+ IsmrmrdXmlString patientName;
+ float patientWeight_kg;
+ IsmrmrdXmlString patientID;
+ IsmrmrdXmlString patientBirthDate;
+ IsmrmrdXmlString patientGender;
+ };
+
+ struct StudyInformation
+ {
+ IsmrmrdXmlString studyDate;
+ IsmrmrdXmlString studyTime;
+ IsmrmrdXmlString studyID;
+ long int accessionNumber;
+ IsmrmrdXmlString referringPhysicianName;
+ IsmrmrdXmlString studyDescription;
+ };
+
+ struct MeasurementInformation
+ {
+ IsmrmrdXmlString measurementID;
+ IsmrmrdXmlString seriesDate;
+ IsmrmrdXmlString seriesTime;
+ IsmrmrdXmlString patientPosition;
+ long int initialSeriesNumber;
+ IsmrmrdXmlString protocolName;
+ IsmrmrdXmlString seriesDescription;
+ };
+
+ /*
+ //Should this actually be the name.
+ //Xml in the name is bad but I wanted to avoid confusion with the AcquisitionHeader
+ class IsmrmrdXmlHeader
+ {
+
+ public:
+
+ //Constructors
+ IsmrmrdXmlHeader(const char* xml);
+ IsmrmrdXmlHeader(const std::string& xml);
+ IsmrmrdXmlHeader(); //Minimal Header
+
+ //Copy constructor
+ IsmrmrdXmlHeader(const IsmrmrdXmlHeader& h);
+
+ //Assignment operator
+ IsmrmrdXmlHeader& operator=(const IsmrmrdXmlHeader& h);
+
+
+
+ protected:
+
+
+ };
+ */
+
+
+}
diff --git a/xml/ismrmrd_xml_export.h b/xml/ismrmrd_xml_export.h
new file mode 100644
index 0000000..2ee3e08
--- /dev/null
+++ b/xml/ismrmrd_xml_export.h
@@ -0,0 +1,14 @@
+#ifndef ISMRMRD_XML_EXPORT_H_
+#define ISMRMRD_XML_EXPORT_H_
+
+#if defined (WIN32)
+#if defined (ismrmrd_xml_EXPORTS)
+#define EXPORTISMRMRDXML __declspec(dllexport)
+#else
+#define EXPORTISMRMRDXML __declspec(dllimport)
+#endif
+#else
+#define EXPORTISMRMRDXML
+#endif
+
+#endif /* ISMRMRD_XML_EXPORT_H_ */
--
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