diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-04-14 12:14:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-14 12:14:40 +0200 |
commit | 7d888ff72c7281f4cbb519a0e128222484c294db (patch) | |
tree | 6173d7584b83ef6cf0903a764ec328111e9395db /searchlib | |
parent | d6a43ad477c7a8f0e16e7f3152d47ec9bed5bdee (diff) | |
parent | edf3ba27bf4ba667c28f4aec0163be6716cd9662 (diff) |
Merge pull request #12892 from vespa-engine/toregge/avoid-integer-ops-in-boolean-context
Avoid integer operatons in boolean context.
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/expression/integerresultnode.h | 9 |
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); |