Commit 8ac22a78ce160ec8a34ece67f64f29db0f229939

Authored by Scott Klum
1 parent 9e8b32ad

Added RejectDistance

Showing 1 changed file with 34 additions and 0 deletions
openbr/plugins/validate.cpp
... ... @@ -233,6 +233,40 @@ class MetadataDistance : public Distance
233 233  
234 234 BR_REGISTER(Distance, MetadataDistance)
235 235  
  236 +/*!
  237 + * \ingroup distances
  238 + * \brief Sets distance to -FLOAT_MAX if a target template has/doesn't have a key.
  239 + * \author Scott Klum \cite sklum
  240 + */
  241 +class RejectDistance : public Distance
  242 +{
  243 + Q_OBJECT
  244 +
  245 + Q_PROPERTY(QStringList keys READ get_keys WRITE set_keys RESET reset_keys STORED false)
  246 + BR_PROPERTY(QStringList, keys, QStringList())
  247 + Q_PROPERTY(bool rejectIfContains READ get_rejectIfContains WRITE set_rejectIfContains RESET reset_rejectIfContains STORED false)
  248 + BR_PROPERTY(bool, rejectIfContains, false)
  249 +
  250 + float compare(const Template &a, const Template &b) const
  251 + {
  252 + (void) b;
  253 + bool keep = true;
  254 +
  255 + foreach (const QString &key, keys) {
  256 + if ((rejectIfContains && a.file.contains(key)) ||
  257 + (!rejectIfContains && !a.file.contains(key)))
  258 + keep = false;
  259 +
  260 + if (!keep) return -std::numeric_limits<float>::max();
  261 + }
  262 +
  263 + return 0;
  264 + }
  265 +};
  266 +
  267 +
  268 +BR_REGISTER(Distance, RejectDistance)
  269 +
236 270 } // namespace br
237 271  
238 272 #include "validate.moc"
... ...