comparison 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
comparison
equal deleted inserted replaced
3010:9f859a18cbc2 3012:af1530b45290
62 bool Add(const DicomTag& tag, 62 bool Add(const DicomTag& tag,
63 std::auto_ptr<IFindConstraint>& constraint); 63 std::auto_ptr<IFindConstraint>& constraint);
64 64
65 void Apply(SetOfResources& candidates, 65 void Apply(SetOfResources& candidates,
66 IDatabaseWrapper& database) const; 66 IDatabaseWrapper& database) const;
67
68 bool IsMatch(const DicomMap& dicom) const;
67 }; 69 };
68 70
69 typedef std::map<ResourceType, Level*> Levels; 71 typedef std::map<ResourceType, Level*> Levels;
70 72
71 ResourceType level_; 73 ResourceType level_;
87 public: 89 public:
88 virtual ~IVisitor() 90 virtual ~IVisitor()
89 { 91 {
90 } 92 }
91 93
94 virtual bool IsDicomAsJsonNeeded() const = 0;
95
92 virtual void MarkAsComplete() = 0; 96 virtual void MarkAsComplete() = 0;
93 97
94 virtual void Visit(const std::string& publicId, 98 virtual void Visit(const std::string& publicId,
95 const std::string& instanceId, 99 const std::string& instanceId,
96 const Json::Value& dicom) = 0; 100 const DicomMap& mainDicomTags,
101 const Json::Value* dicomAsJson) = 0;
97 }; 102 };
98 103
99 LookupResource(ResourceType level); 104 LookupResource(ResourceType level);
100 105
101 ~LookupResource(); 106 ~LookupResource();
115 bool caseSensitive); 120 bool caseSensitive);
116 121
117 void FindCandidates(std::list<int64_t>& result, 122 void FindCandidates(std::list<int64_t>& result,
118 IDatabaseWrapper& database) const; 123 IDatabaseWrapper& database) const;
119 124
120 bool IsMatch(const Json::Value& dicomAsJson) const; 125 bool HasOnlyMainDicomTags() const
126 {
127 return unoptimizedConstraints_.empty();
128 }
129
130 bool IsMatch(const DicomMap& dicom) const;
121 }; 131 };
122 } 132 }