Commit 51a99b9f7be67ff9285b56eaa88b34b17e1ec7fb

Authored by Josh Klontz
1 parent f7dff58c

factored out metadata comparison

sdk/openbr_plugin.cpp
@@ -1139,8 +1139,6 @@ private: @@ -1139,8 +1139,6 @@ private:
1139 } 1139 }
1140 } 1140 }
1141 1141
1142 -  
1143 -  
1144 void store(QDataStream &stream) const 1142 void store(QDataStream &stream) const
1145 { 1143 {
1146 const int size = transforms.size(); 1144 const int size = transforms.size();
@@ -1312,15 +1310,6 @@ void Distance::compare(const TemplateList &target, const TemplateList &query, Ou @@ -1312,15 +1310,6 @@ void Distance::compare(const TemplateList &target, const TemplateList &query, Ou
1312 1310
1313 float Distance::compare(const Template &target, const Template &query) const 1311 float Distance::compare(const Template &target, const Template &query) const
1314 { 1312 {
1315 - if (!Globals->demographicFilters.isEmpty()) // If statement is faster than iterating over an empty list of filters  
1316 - foreach (const QString &filter, Globals->demographicFilters.keys()) {  
1317 - const QString targetMetadata = target.file.getString(filter, "");  
1318 - if (targetMetadata.isEmpty()) continue;  
1319 - const QRegExp re(Globals->demographicFilters[filter]);  
1320 - if (re.indexIn(targetMetadata) == -1)  
1321 - return -std::numeric_limits<float>::max();  
1322 - }  
1323 -  
1324 return _compare(target, query); 1313 return _compare(target, query);
1325 } 1314 }
1326 1315
sdk/plugins/quality.cpp
@@ -262,6 +262,32 @@ class UnitDistance : public Distance @@ -262,6 +262,32 @@ class UnitDistance : public Distance
262 262
263 BR_REGISTER(Distance, UnitDistance) 263 BR_REGISTER(Distance, UnitDistance)
264 264
  265 +/*!
  266 + * \ingroup distances
  267 + * \brief Check target metadata before matching templates.
  268 + * \author Josh Klontz \cite jklontz
  269 + */
  270 +class MetadataDistance : public Distance
  271 +{
  272 + Q_OBJECT
  273 + Q_PROPERTY(Distance *distance READ get_distance WRITE set_distance RESET reset_distance)
  274 + BR_PROPERTY(Distance*, distance, make("Dist(L2)"))
  275 +
  276 + float _compare(const Template &a, const Template &b) const
  277 + {
  278 + foreach (const QString &filter, Globals->demographicFilters.keys()) {
  279 + const QString metadata = a.file.getString(filter, "");
  280 + if (metadata.isEmpty()) continue;
  281 + const QRegExp re(Globals->demographicFilters[filter]);
  282 + if (re.indexIn(metadata) == -1)
  283 + return -std::numeric_limits<float>::max();
  284 + }
  285 + return distance->compare(a, b);
  286 + }
  287 +};
  288 +
  289 +BR_REGISTER(Distance, MetadataDistance)
  290 +
265 } // namespace br 291 } // namespace br
266 292
267 #include "quality.moc" 293 #include "quality.moc"