|
|
@@ -17,18 +17,18 @@ var Value = require("../Value"),
|
|
|
Expression = require("./Expression"),
|
|
|
NaryExpression = require("./NaryExpression"),
|
|
|
ConstantExpression = require("./ConstantExpression"),
|
|
|
- Helpers = require("./Helpers");
|
|
|
+ ValueSet = require("./ValueSet");
|
|
|
|
|
|
-var setIsSubsetHelper = function setIsSubsetHelper(lhs, rhs) { //NOTE: vector<Value> &lhs, ValueSet &rhs
|
|
|
+function setIsSubsetHelper(lhs, rhs) { //NOTE: vector<Value> &lhs, ValueSet &rhs
|
|
|
// do not shortcircuit when lhs.size() > rhs.size()
|
|
|
// because lhs can have redundant entries
|
|
|
for (var i = 0; i < lhs.length; i++) {
|
|
|
- if (!(JSON.stringify(lhs[i]) in rhs)) {
|
|
|
+ if (!rhs.has(lhs[i])) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
-};
|
|
|
+}
|
|
|
|
|
|
proto.evaluateInternal = function evaluateInternal(vars) {
|
|
|
var lhs = this.operands[0].evaluateInternal(vars),
|
|
|
@@ -41,7 +41,7 @@ proto.evaluateInternal = function evaluateInternal(vars) {
|
|
|
throw new Error("both operands of " + this.getOpName() + ": must be arrays. Second " +
|
|
|
"argument is of type " + Value.getType(rhs) + "; code 17042");
|
|
|
|
|
|
- return setIsSubsetHelper(lhs, Helpers.arrayToSet(rhs));
|
|
|
+ return setIsSubsetHelper(lhs, new ValueSet(rhs));
|
|
|
};
|
|
|
|
|
|
|
|
|
@@ -83,7 +83,7 @@ proto.optimize = function optimize(cachedRhsSet, operands) { //jshint ignore:lin
|
|
|
throw new Error("both operands of " + this.getOpName() + " must be arrays. Second " +
|
|
|
"argument is of type " + Value.getType(rhs) + "; uassert code 17311");
|
|
|
|
|
|
- return new Optimized(Helpers.arrayToSet(rhs), this.operands);
|
|
|
+ return new Optimized(new ValueSet(rhs), this.operands);
|
|
|
}
|
|
|
|
|
|
return optimized;
|