diff OrthancStone/Sources/Loaders/LoadedDicomResources.h @ 1822:0489fe25ce48

support of pixel spacing in ultrasound images from tag SequenceOfUltrasoundRegions
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 26 May 2021 18:13:35 +0200
parents 9ac2a65d4172
children d6b83b4cedcd
line wrap: on
line diff
--- a/OrthancStone/Sources/Loaders/LoadedDicomResources.h	Wed May 26 14:02:12 2021 +0200
+++ b/OrthancStone/Sources/Loaders/LoadedDicomResources.h	Wed May 26 18:13:35 2021 +0200
@@ -34,13 +34,41 @@
   class LoadedDicomResources : public boost::noncopyable
   {
   private:
-    typedef std::map<std::string, Orthanc::DicomMap*>  Resources;
+    class Resource : public boost::noncopyable
+    {
+    private:
+      std::unique_ptr<Orthanc::DicomMap>  dicom_;
+      std::unique_ptr<Json::Value>        sourceJson_;
+
+    public:
+      Resource(const Orthanc::DicomMap& dicom);
+
+      Resource* Clone() const;
+
+      const Orthanc::DicomMap& GetDicom() const
+      {
+        return *dicom_;
+      }
 
-    Orthanc::DicomTag                indexedTag_;
-    Resources                        resources_;
-    std::vector<Orthanc::DicomMap*>  flattened_;
+      bool HasSourceJson() const
+      {
+        return sourceJson_.get() != NULL;
+      }
+
+      const Json::Value& GetSourceJson() const;
 
-    void Flatten();
+      void SetSourceJson(const Json::Value& json);
+    };
+    
+    typedef std::map<std::string, Resource*>  Resources;
+
+    Orthanc::DicomTag       indexedTag_;
+    Resources               resources_;
+    std::vector<Resource*>  flattened_;
+
+    void AddResourceInternal(Resource* resource);
+
+    const Resource& GetResourceInternal(size_t index);
 
     void AddFromDicomWebInternal(const Json::Value& dicomweb);
 
@@ -71,7 +99,10 @@
       return resources_.size();
     }
 
-    Orthanc::DicomMap& GetResource(size_t index);
+    const Orthanc::DicomMap& GetResource(size_t index)
+    {
+      return GetResourceInternal(index).GetDicom();
+    }
 
     bool HasResource(const std::string& id) const
     {
@@ -93,5 +124,15 @@
 
     bool LookupTagValueConsensus(std::string& target,
                                  const Orthanc::DicomTag& tag) const;
+
+    bool HasSourceJson(size_t index)
+    {
+      return GetResourceInternal(index).HasSourceJson();
+    }
+
+    const Json::Value& GetSourceJson(size_t index)
+    {
+      return GetResourceInternal(index).GetSourceJson();
+    }
   };
 }