[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