Commit 8ac22a78ce160ec8a34ece67f64f29db0f229939
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,6 +233,40 @@ class MetadataDistance : public Distance | ||
| 233 | 233 | ||
| 234 | BR_REGISTER(Distance, MetadataDistance) | 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 | } // namespace br | 270 | } // namespace br |
| 237 | 271 | ||
| 238 | #include "validate.moc" | 272 | #include "validate.moc" |