Browse Source

EAGLESIX-2651: AddToSet: use ValueSet, mv it out of expressions, refactor requires

Kyle P Davis 11 years ago
parent
commit
dcfcc0853b

+ 2 - 2
lib/pipeline/expressions/ValueSet.js → lib/pipeline/ValueSet.js

@@ -1,8 +1,8 @@
 "use strict";
 
 /**
- * Somewhat mimics the ValueSet in mongo (std::set<Value>)
- * @class valueSet
+ * A set of values (i.e., `typedef unordered_set<Value, Value::Hash> ValueSet;`)
+ * @class ValueSet
  * @namespace mungedb-aggregate.pipeline.expressions
  * @module mungedb-aggregate
  * @constructor

+ 8 - 13
lib/pipeline/accumulators/AddToSetAccumulator.js

@@ -6,19 +6,19 @@
  * @namespace mungedb-aggregate.pipeline.accumulators
  * @module mungedb-aggregate
  * @constructor
-**/
-var AddToSetAccumulator = module.exports = function AddToSetAccumulator(){
+ */
+var AddToSetAccumulator = module.exports = function AddToSetAccumulator() {
 	if (arguments.length !== 0) throw new Error("zero args expected");
 	this.reset();
 	base.call(this);
 }, klass = AddToSetAccumulator, Accumulator = require("./Accumulator"), base = Accumulator, proto = klass.prototype = Object.create(base.prototype, {constructor:{value:klass}});
 
-var Value = require("../Value");
+var ValueSet = require("../ValueSet");
 
 proto.processInternal = function processInternal(input, merging) {
 	if (!merging) {
 		if (input !== undefined) {
-			this.set[JSON.stringify(input)] = input;
+			this.set.insert(input);
 		}
 	} else {
 		// If we're merging, we need to take apart the arrays we
@@ -28,22 +28,17 @@ proto.processInternal = function processInternal(input, merging) {
 		if (!Array.isArray(input)) throw new Error("Assertion failure");
 
 		for (var i = 0, l = input.length; i < l; i++) {
-			this.set[JSON.stringify(input[i])] = input[i];
+			this.set.insert(input[i]);
 		}
 	}
 };
 
-proto.getValue = function getValue(toBeMerged) {
-	var results = [];
-	for(var key in this.set){
-		// if(!Object.hasOwnProperty(this.set))
-		results.push(this.set[key]);
-	}
-	return results;
+proto.getValue = function getValue(toBeMerged) { //jshint ignore:line
+	return this.set.values();
 };
 
 proto.reset = function reset() {
-	this.set = {};
+	this.set = new ValueSet();
 };
 
 klass.create = function create() {

+ 1 - 1
lib/pipeline/expressions/SetDifferenceExpression.js

@@ -14,7 +14,7 @@ var SetDifferenceExpression = module.exports = function SetDifferenceExpression(
 
 var Value = require("../Value"),
 	Expression = require("./Expression"),
-	ValueSet = require("./ValueSet");
+	ValueSet = require("../ValueSet");
 
 proto.evaluateInternal = function evaluateInternal(vars) {
 	var lhs = this.operands[0].evaluateInternal(vars),

+ 1 - 1
lib/pipeline/expressions/SetEqualsExpression.js

@@ -14,7 +14,7 @@ var SetEqualsExpression = module.exports = function SetEqualsExpression() {
 
 var Value = require("../Value"),
 	Expression = require("./Expression"),
-	ValueSet = require("./ValueSet");
+	ValueSet = require("../ValueSet");
 
 proto.validateArguments = function validateArguments(args) {
 	if (args.length < 2)

+ 1 - 1
lib/pipeline/expressions/SetIntersectionExpression.js

@@ -14,7 +14,7 @@ var SetIntersectionExpression = module.exports = function SetIntersectionExpress
 
 var Value = require("../Value"),
 	Expression = require("./Expression"),
-	ValueSet = require("./ValueSet");
+	ValueSet = require("../ValueSet");
 
 proto.evaluateInternal = function evaluateInternal(vars) {
 	var n = this.operands.length,

+ 1 - 1
lib/pipeline/expressions/SetIsSubsetExpression.js

@@ -17,7 +17,7 @@ var Value = require("../Value"),
 	Expression = require("./Expression"),
 	NaryExpression = require("./NaryExpression"),
 	ConstantExpression = require("./ConstantExpression"),
-	ValueSet = require("./ValueSet");
+	ValueSet = require("../ValueSet");
 
 function setIsSubsetHelper(lhs, rhs) { //NOTE: vector<Value> &lhs, ValueSet &rhs
 	// do not shortcircuit when lhs.size() > rhs.size()

+ 1 - 1
lib/pipeline/expressions/SetUnionExpression.js

@@ -14,7 +14,7 @@ var SetUnionExpression = module.exports = function SetUnionExpression() {
 
 var Value = require("../Value"),
 	Expression = require("./Expression"),
-	ValueSet = require("./ValueSet");
+	ValueSet = require("../ValueSet");
 
 proto.evaluateInternal = function evaluateInternal(vars) {
 	var unionedSet = new ValueSet(),