summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/accumulator_min_max.cpp
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2013-05-30 16:22:49 -0400
committerMathias Stearn <mathias@10gen.com>2013-06-18 12:51:15 -0400
commit4c30d0500b1da673840f0ea12a9277f3803a230f (patch)
treee8b9cb4fa87e6c2fe442eea56271260fdb7cd64e /src/mongo/db/pipeline/accumulator_min_max.cpp
parentbe4e909ad1ae382a073f456710052a65c2b5fd39 (diff)
downloadmongo-4c30d0500b1da673840f0ea12a9277f3803a230f.tar.gz
Accumulators are not Expressions so they shouldn't derive
There may be a place for a common parent of "tree-like" things, but Expression is not the correct base. This commit keeps the public API of accumulators the same so consumers don't need to be modified.
Diffstat (limited to 'src/mongo/db/pipeline/accumulator_min_max.cpp')
-rw-r--r--src/mongo/db/pipeline/accumulator_min_max.cpp27
1 files changed, 12 insertions, 15 deletions
diff --git a/src/mongo/db/pipeline/accumulator_min_max.cpp b/src/mongo/db/pipeline/accumulator_min_max.cpp
index 86172cb3338..c3c5a9790f0 100644
--- a/src/mongo/db/pipeline/accumulator_min_max.cpp
+++ b/src/mongo/db/pipeline/accumulator_min_max.cpp
@@ -21,27 +21,24 @@
namespace mongo {
- Value AccumulatorMinMax::evaluate(const Document& pDocument) const {
- verify(vpOperand.size() == 1);
- Value prhs(vpOperand[0]->evaluate(pDocument));
-
+ void AccumulatorMinMax::processInternal(const Value& input) {
// nullish values should have no impact on result
- if (!prhs.nullish()) {
+ if (!input.nullish()) {
/* compare with the current value; swap if appropriate */
- int cmp = Value::compare(pValue, prhs) * sense;
- if (cmp > 0 || pValue.missing()) // missing is lower than all other values
- pValue = prhs;
+ int cmp = Value::compare(_val, input) * _sense;
+ if (cmp > 0 || _val.missing()) // missing is lower than all other values
+ _val = input;
}
-
- return Value();
}
- AccumulatorMinMax::AccumulatorMinMax(int theSense):
- AccumulatorSingleValue(),
- sense(theSense) {
- verify((sense == 1) || (sense == -1));
+ Value AccumulatorMinMax::getValue() const {
+ return _val;
}
+ AccumulatorMinMax::AccumulatorMinMax(int theSense)
+ :_sense(theSense)
+ { verify((_sense == 1) || (_sense == -1)); }
+
intrusive_ptr<Accumulator> AccumulatorMinMax::createMin(
const intrusive_ptr<ExpressionContext> &pCtx) {
intrusive_ptr<AccumulatorMinMax> pAccumulator(
@@ -57,7 +54,7 @@ namespace mongo {
}
const char *AccumulatorMinMax::getOpName() const {
- if (sense == 1)
+ if (_sense == 1)
return "$min";
return "$max";
}