aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2020-04-13 18:13:56 +0200
committerTor Egge <Tor.Egge@broadpark.no>2020-04-14 10:33:52 +0200
commitedf3ba27bf4ba667c28f4aec0163be6716cd9662 (patch)
tree8da3dad5f31783506cf38892268159e47e88e07c /searchlib
parent028da87d62146b22738172c2c5231e203a149c54 (diff)
Avoid integer operatons in boolean context.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/expression/integerresultnode.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/searchlib/src/vespa/searchlib/expression/integerresultnode.h b/searchlib/src/vespa/searchlib/expression/integerresultnode.h
index e428c0448bb..7f2ec823432 100644
--- a/searchlib/src/vespa/searchlib/expression/integerresultnode.h
+++ b/searchlib/src/vespa/searchlib/expression/integerresultnode.h
@@ -4,6 +4,7 @@
#include "numericresultnode.h"
#include <vespa/vespalib/util/sort.h>
#include <limits>
+#include <type_traits>
namespace search::expression {
@@ -29,7 +30,13 @@ public:
}
void add(const ResultNode & b) override { _value += b.getInteger(); }
void negate() override { _value = - _value; }
- void multiply(const ResultNode & b) override { _value *= b.getInteger(); }
+ void multiply(const ResultNode & b) override {
+ if constexpr (std::is_same_v<T, bool>) {
+ _value = (_value && (b.getInteger() != 0));
+ } else {
+ _value *= b.getInteger();
+ }
+ }
void divide(const ResultNode & b) override {
int64_t val = b.getInteger();
_value = (val == 0) ? 0 : (_value / val);