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 | 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" | ... | ... |