diff OrthancServer/DicomProtocol/DicomFindAnswers.cpp @ 1787:1b1d5470233f worklists

refactoring of DicomFindAnswers
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 18 Nov 2015 15:50:32 +0100
parents b22ba8c5edbe
children bdcc1dba4a53
line wrap: on
line diff
--- a/OrthancServer/DicomProtocol/DicomFindAnswers.cpp	Wed Nov 18 12:00:14 2015 +0100
+++ b/OrthancServer/DicomProtocol/DicomFindAnswers.cpp	Wed Nov 18 15:50:32 2015 +0100
@@ -34,6 +34,10 @@
 #include "DicomFindAnswers.h"
 
 #include "../FromDcmtkBridge.h"
+#include "../ToDcmtkBridge.h"
+#include "../../Core/OrthancException.h"
+
+#include <memory>
 
 namespace Orthanc
 {
@@ -41,8 +45,11 @@
   {
     for (size_t i = 0; i < items_.size(); i++)
     {
+      assert(items_[i] != NULL);
       delete items_[i];
     }
+
+    items_.clear();
   }
 
   void DicomFindAnswers::Reserve(size_t size)
@@ -53,6 +60,46 @@
     }
   }
 
+
+  void DicomFindAnswers::Add(const DicomMap& map)
+  {
+    items_.push_back(new ParsedDicomFile(map));
+  }
+
+  void DicomFindAnswers::Add(ParsedDicomFile& dicom)
+  {
+    items_.push_back(dicom.Clone());
+  }
+
+  void DicomFindAnswers::Add(const char* dicom,
+                             size_t size)
+  {
+    items_.push_back(new ParsedDicomFile(dicom, size));
+  }
+
+
+  ParsedDicomFile& DicomFindAnswers::GetAnswer(size_t index) const
+  {
+    if (index < items_.size())
+    {
+      return *items_.at(index);
+    }
+    else
+    {
+      throw OrthancException(ErrorCode_ParameterOutOfRange);
+    }
+  }
+
+
+  void DicomFindAnswers::ToJson(Json::Value& target,
+                                size_t index,
+                                bool simplify) const
+  {
+    DicomToJsonFormat format = (simplify ? DicomToJsonFormat_Simple : DicomToJsonFormat_Full);
+    GetAnswer(index).ToJson(target, format, DicomToJsonFlags_None, 0);
+  }
+
+
   void DicomFindAnswers::ToJson(Json::Value& target,
                                 bool simplify) const
   {
@@ -60,8 +107,8 @@
 
     for (size_t i = 0; i < GetSize(); i++)
     {
-      Json::Value answer(Json::objectValue);
-      FromDcmtkBridge::ToJson(answer, GetAnswer(i), simplify);
+      Json::Value answer;
+      ToJson(answer, i, simplify);
       target.append(answer);
     }
   }