diff options
author | Mathias Stearn <mathias@10gen.com> | 2013-05-30 16:22:49 -0400 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2013-06-18 12:51:15 -0400 |
commit | 4c30d0500b1da673840f0ea12a9277f3803a230f (patch) | |
tree | e8b9cb4fa87e6c2fe442eea56271260fdb7cd64e /src/mongo/db/pipeline/accumulator_min_max.cpp | |
parent | be4e909ad1ae382a073f456710052a65c2b5fd39 (diff) | |
download | mongo-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.cpp | 27 |
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"; } |