diff OrthancServer/Search/LookupResource.h @ 3012:af1530b45290

Optimization: On finds, do not read JSON (disk) if main DICOM tags (DB) are sufficient
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 13 Dec 2018 17:54:06 +0100
parents 8265a6b56100
children 2cbafb5d5a62
line wrap: on
line diff
--- a/OrthancServer/Search/LookupResource.h	Thu Dec 13 17:16:32 2018 +0100
+++ b/OrthancServer/Search/LookupResource.h	Thu Dec 13 17:54:06 2018 +0100
@@ -64,6 +64,8 @@
 
       void Apply(SetOfResources& candidates,
                  IDatabaseWrapper& database) const;
+
+      bool IsMatch(const DicomMap& dicom) const;
     };
 
     typedef std::map<ResourceType, Level*>  Levels;
@@ -89,11 +91,14 @@
       {
       }
 
+      virtual bool IsDicomAsJsonNeeded() const = 0;
+      
       virtual void MarkAsComplete() = 0;
 
       virtual void Visit(const std::string& publicId,
                          const std::string& instanceId,
-                         const Json::Value& dicom) = 0;
+                         const DicomMap& mainDicomTags,
+                         const Json::Value* dicomAsJson) = 0;
     };
 
     LookupResource(ResourceType level);
@@ -117,6 +122,11 @@
     void FindCandidates(std::list<int64_t>& result,
                         IDatabaseWrapper& database) const;
 
-    bool IsMatch(const Json::Value& dicomAsJson) const;
+    bool HasOnlyMainDicomTags() const
+    {
+      return unoptimizedConstraints_.empty();
+    }
+
+    bool IsMatch(const DicomMap& dicom) const;
   };
 }