aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/aggregation/averageaggregationresult.h
blob: f95d05ee7fd846975a67e8c79d42a9ca7972e6e1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once

#include "aggregationresult.h"
#include <vespa/searchlib/expression/numericresultnode.h>

namespace search::aggregation {

class AverageAggregationResult : public AggregationResult
{
public:
    using NumericResultNode = expression::NumericResultNode;
    DECLARE_AGGREGATIONRESULT(AverageAggregationResult);
    AverageAggregationResult() : _sum(), _count(0) {}
    ~AverageAggregationResult() override;
    void visitMembers(vespalib::ObjectVisitor &visitor) const override;
    const NumericResultNode & getAverage() const;
    const NumericResultNode & getSum() const { return *_sum; }
    uint64_t getCount()                const { return _count; }
private:
    const ResultNode & onGetRank() const override { return getAverage(); }
    void onPrepare(const ResultNode & result, bool useForInit) override;
    NumericResultNode::CP _sum;
    uint64_t              _count;
    mutable NumericResultNode::CP _averageScratchPad;
};

}