Mercurial > hg > orthanc
comparison OrthancServer/Search/LookupIdentifierQuery.cpp @ 1749:99f4a05f39fa db-changes
various types of constraints
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 27 Oct 2015 10:54:51 +0100 |
parents | 92203f713205 |
children | 55d52567bebb |
comparison
equal
deleted
inserted
replaced
1748:92203f713205 | 1749:99f4a05f39fa |
---|---|
68 static const DicomTag instanceIdentifiers[] = | 68 static const DicomTag instanceIdentifiers[] = |
69 { | 69 { |
70 DICOM_TAG_SOP_INSTANCE_UID | 70 DICOM_TAG_SOP_INSTANCE_UID |
71 }; | 71 }; |
72 | 72 |
73 static void LoadIdentifiers(const DicomTag*& tags, | 73 |
74 size_t& size, | 74 void LookupIdentifierQuery::LoadIdentifiers(const DicomTag*& tags, |
75 ResourceType level) | 75 size_t& size, |
76 ResourceType level) | |
76 { | 77 { |
77 switch (level) | 78 switch (level) |
78 { | 79 { |
79 case ResourceType_Patient: | 80 case ResourceType_Patient: |
80 tags = patientIdentifiers; | 81 tags = patientIdentifiers; |
100 throw OrthancException(ErrorCode_ParameterOutOfRange); | 101 throw OrthancException(ErrorCode_ParameterOutOfRange); |
101 } | 102 } |
102 } | 103 } |
103 | 104 |
104 | 105 |
105 LookupIdentifierQuery::Union::~Union() | 106 LookupIdentifierQuery::Disjunction::~Disjunction() |
106 { | 107 { |
107 for (size_t i = 0; i < union_.size(); i++) | 108 for (size_t i = 0; i < disjunction_.size(); i++) |
108 { | 109 { |
109 delete union_[i]; | 110 delete disjunction_[i]; |
110 } | 111 } |
111 } | 112 } |
112 | 113 |
113 | 114 |
114 void LookupIdentifierQuery::Union::Add(const Constraint& constraint) | 115 void LookupIdentifierQuery::Disjunction::Add(const DicomTag& tag, |
115 { | 116 IdentifierConstraintType type, |
116 union_.push_back(new Constraint(constraint)); | 117 const std::string& value) |
118 { | |
119 disjunction_.push_back(new Constraint(tag, type, value)); | |
117 } | 120 } |
118 | 121 |
119 | 122 |
120 LookupIdentifierQuery::~LookupIdentifierQuery() | 123 LookupIdentifierQuery::~LookupIdentifierQuery() |
121 { | 124 { |
151 void LookupIdentifierQuery::AddConstraint(DicomTag tag, | 154 void LookupIdentifierQuery::AddConstraint(DicomTag tag, |
152 IdentifierConstraintType type, | 155 IdentifierConstraintType type, |
153 const std::string& value) | 156 const std::string& value) |
154 { | 157 { |
155 assert(IsIdentifier(tag)); | 158 assert(IsIdentifier(tag)); |
156 | 159 constraints_.back()->Add(tag, type, value); |
157 Constraint constraint(tag, type, NormalizeIdentifier(value)); | 160 } |
158 constraints_.push_back(new Union); | 161 |
159 constraints_.back()->Add(constraint); | 162 |
160 } | 163 LookupIdentifierQuery::Disjunction& LookupIdentifierQuery::AddDisjunction() |
161 | 164 { |
162 | 165 constraints_.push_back(new Disjunction); |
163 void LookupIdentifierQuery::AddDisjunction(const std::list<Constraint>& constraints) | 166 return *constraints_.back(); |
164 { | |
165 constraints_.push_back(new Union); | |
166 | |
167 for (std::list<Constraint>::const_iterator | |
168 it = constraints.begin(); it != constraints.end(); ++it) | |
169 { | |
170 assert(IsIdentifier(it->GetTag())); | |
171 constraints_.back()->Add(*it); | |
172 } | |
173 } | 167 } |
174 | 168 |
175 | 169 |
176 std::string LookupIdentifierQuery::NormalizeIdentifier(const std::string& value) | 170 std::string LookupIdentifierQuery::NormalizeIdentifier(const std::string& value) |
177 { | 171 { |