From 51a99b9f7be67ff9285b56eaa88b34b17e1ec7fb Mon Sep 17 00:00:00 2001 From: Josh Klontz Date: Fri, 25 Jan 2013 17:02:32 -0500 Subject: [PATCH] factored out metadata comparison --- sdk/openbr_plugin.cpp | 11 ----------- sdk/plugins/quality.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/sdk/openbr_plugin.cpp b/sdk/openbr_plugin.cpp index 13b3f84..369e9c3 100644 --- a/sdk/openbr_plugin.cpp +++ b/sdk/openbr_plugin.cpp @@ -1139,8 +1139,6 @@ private: } } - - void store(QDataStream &stream) const { const int size = transforms.size(); @@ -1312,15 +1310,6 @@ void Distance::compare(const TemplateList &target, const TemplateList &query, Ou float Distance::compare(const Template &target, const Template &query) const { - if (!Globals->demographicFilters.isEmpty()) // If statement is faster than iterating over an empty list of filters - foreach (const QString &filter, Globals->demographicFilters.keys()) { - const QString targetMetadata = target.file.getString(filter, ""); - if (targetMetadata.isEmpty()) continue; - const QRegExp re(Globals->demographicFilters[filter]); - if (re.indexIn(targetMetadata) == -1) - return -std::numeric_limits::max(); - } - return _compare(target, query); } diff --git a/sdk/plugins/quality.cpp b/sdk/plugins/quality.cpp index 796bb86..d4e43bb 100644 --- a/sdk/plugins/quality.cpp +++ b/sdk/plugins/quality.cpp @@ -262,6 +262,32 @@ class UnitDistance : public Distance BR_REGISTER(Distance, UnitDistance) +/*! + * \ingroup distances + * \brief Check target metadata before matching templates. + * \author Josh Klontz \cite jklontz + */ +class MetadataDistance : public Distance +{ + Q_OBJECT + Q_PROPERTY(Distance *distance READ get_distance WRITE set_distance RESET reset_distance) + BR_PROPERTY(Distance*, distance, make("Dist(L2)")) + + float _compare(const Template &a, const Template &b) const + { + foreach (const QString &filter, Globals->demographicFilters.keys()) { + const QString metadata = a.file.getString(filter, ""); + if (metadata.isEmpty()) continue; + const QRegExp re(Globals->demographicFilters[filter]); + if (re.indexIn(metadata) == -1) + return -std::numeric_limits::max(); + } + return distance->compare(a, b); + } +}; + +BR_REGISTER(Distance, MetadataDistance) + } // namespace br #include "quality.moc" -- libgit2 0.21.4