| File src/ItemFilter.cpp changed (mode: 100644) (index df4eba0..46c3eff) | 
	| ... | ... | ItemFilter::passes(std::function<std::string(const std::string &)> accessor, | 
	| 70 | 70 | { | { | 
	| 71 | 71 | error.clear(); | error.clear(); | 
	| 72 | 72 |  |  | 
	|  | 73 |  | auto test = [](const Cond &cond, const std::string &val) { | 
	|  | 74 |  | switch (cond.op) { | 
	|  | 75 |  | case Op::eq:           return (val == cond.value); | 
	|  | 76 |  | case Op::ne:           return (val != cond.value); | 
	|  | 77 |  | case Op::iccontains:   return boost::icontains(val, cond.value); | 
	|  | 78 |  | case Op::icnotcontain: return !boost::icontains(val, cond.value); | 
	|  | 79 |  | } | 
	|  | 80 |  | assert(false && "Unhandled operation type."); | 
	|  | 81 |  | return false; | 
	|  | 82 |  | }; | 
	|  | 83 |  |  | 
	| 73 | 84 | auto err = [&error](const Cond &cond) { | auto err = [&error](const Cond &cond) { | 
	| 74 | 85 | if (!error.empty()) { | if (!error.empty()) { | 
	| 75 | 86 | error += '\n'; | error += '\n'; | 
|  | 
	| ... | ... | ItemFilter::passes(std::function<std::string(const std::string &)> accessor, | 
	| 78 | 89 | }; | }; | 
	| 79 | 90 |  |  | 
	| 80 | 91 | for (const Cond &cond : conds) { | for (const Cond &cond : conds) { | 
	| 81 |  | const std::string &val = accessor(cond.key); |  | 
	| 82 |  | switch (cond.op) { |  | 
	| 83 |  | case Op::eq: |  | 
	| 84 |  | if (val != cond.value) { |  | 
	| 85 |  | err(cond); |  | 
	| 86 |  | } |  | 
	| 87 |  | continue; |  | 
	| 88 |  | case Op::ne: |  | 
	| 89 |  | if (val == cond.value) { |  | 
	| 90 |  | err(cond); |  | 
	| 91 |  | } |  | 
	| 92 |  | continue; |  | 
	| 93 |  | case Op::iccontains: |  | 
	| 94 |  | if (!boost::icontains(val, cond.value)) { |  | 
	| 95 |  | err(cond); |  | 
	| 96 |  | } |  | 
	| 97 |  | continue; |  | 
	| 98 |  | case Op::icnotcontain: |  | 
	| 99 |  | if (boost::icontains(val, cond.value)) { |  | 
	| 100 |  | err(cond); |  | 
	| 101 |  | } |  | 
	| 102 |  | continue; |  | 
	|  | 92 |  | if (!test(cond, accessor(cond.key))) { | 
	|  | 93 |  | err(cond); | 
	| 103 | 94 | } | } | 
	| 104 |  | assert(false && "Unhandled operation type."); |  | 
	| 105 | 95 | } | } | 
	| 106 | 96 |  |  | 
	| 107 | 97 | return error.empty(); | return error.empty(); |