From 6267d3322d2f8108c512b5fd04056ca29b6b6792 Mon Sep 17 00:00:00 2001 From: Andrew Stitcher Date: Fri, 15 Mar 2013 18:44:29 +0000 Subject: QPID-4623: Fixed unknown semantics of "between" comparison git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1457058 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/SelectorExpression.cpp | 40 +++++++++++------------------- 1 file changed, 14 insertions(+), 26 deletions(-) (limited to 'cpp/src/qpid/broker/SelectorExpression.cpp') diff --git a/cpp/src/qpid/broker/SelectorExpression.cpp b/cpp/src/qpid/broker/SelectorExpression.cpp index 62de067396..8c6d82cc6f 100644 --- a/cpp/src/qpid/broker/SelectorExpression.cpp +++ b/cpp/src/qpid/broker/SelectorExpression.cpp @@ -184,17 +184,11 @@ public: BoolOrNone eval_bool(const SelectorEnv& env) const { BoolOrNone bn1(e1->eval_bool(env)); - if (bn1==BN_TRUE) { - return BN_TRUE; - } else { - BoolOrNone bn2(e2->eval_bool(env)); - if (bn2==BN_TRUE) { - return BN_TRUE; - } else { - if (bn1==BN_FALSE && bn2==BN_FALSE) return BN_FALSE; - else return BN_UNKNOWN; - } - } + if (bn1==BN_TRUE) return BN_TRUE; + BoolOrNone bn2(e2->eval_bool(env)); + if (bn2==BN_TRUE) return BN_TRUE; + if (bn1==BN_FALSE && bn2==BN_FALSE) return BN_FALSE; + else return BN_UNKNOWN; } }; @@ -214,17 +208,11 @@ public: BoolOrNone eval_bool(const SelectorEnv& env) const { BoolOrNone bn1(e1->eval_bool(env)); - if (bn1==BN_FALSE) { - return BN_FALSE; - } else { - BoolOrNone bn2(e2->eval_bool(env)); - if (bn2==BN_FALSE) { - return BN_FALSE; - } else { - if (bn1==BN_TRUE && bn2==BN_TRUE) return BN_TRUE; - else return BN_UNKNOWN; - } - } + if (bn1==BN_FALSE) return BN_FALSE; + BoolOrNone bn2(e2->eval_bool(env)); + if (bn2==BN_FALSE) return BN_FALSE; + if (bn1==BN_TRUE && bn2==BN_TRUE) return BN_TRUE; + else return BN_UNKNOWN; } }; @@ -340,11 +328,11 @@ public: Value ve(e->eval(env)); if (unknown(ve)) return BN_UNKNOWN; Value vl(l->eval(env)); - if (unknown(vl)) return BN_UNKNOWN; - if (veeval(env)); - if (unknown(vu)) return BN_UNKNOWN; - return BoolOrNone(ve<=vu); + if (!unknown(vu) && ve>vu) return BN_FALSE; + if (unknown(vl) || unknown(vu)) return BN_UNKNOWN; + return BN_TRUE; } }; -- cgit v1.2.1