pkg/query/aggregation/function.go (80 lines of code) (raw):

// Licensed to Apache Software Foundation (ASF) under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Apache Software Foundation (ASF) licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package aggregation type meanFunc[N Number] struct { sum N count N zero N } func (m *meanFunc[N]) In(val N) { m.sum += val m.count++ } func (m meanFunc[N]) Val() N { if m.count == m.zero { return m.zero } v := m.sum / m.count if v < 1 { return 1 } return v } func (m *meanFunc[N]) Reset() { m.sum = m.zero m.count = m.zero } type countFunc[N Number] struct { count N zero N } func (c *countFunc[N]) In(_ N) { c.count++ } func (c countFunc[N]) Val() N { return c.count } func (c *countFunc[N]) Reset() { c.count = c.zero } type sumFunc[N Number] struct { sum N zero N } func (s *sumFunc[N]) In(val N) { s.sum += val } func (s sumFunc[N]) Val() N { return s.sum } func (s *sumFunc[N]) Reset() { s.sum = s.zero } type maxFunc[N Number] struct { val N min N } func (m *maxFunc[N]) In(val N) { if val > m.val { m.val = val } } func (m maxFunc[N]) Val() N { return m.val } func (m *maxFunc[N]) Reset() { m.val = m.min } type minFunc[N Number] struct { val N max N } func (m *minFunc[N]) In(val N) { if val < m.val { m.val = val } } func (m minFunc[N]) Val() N { return m.val } func (m *minFunc[N]) Reset() { m.val = m.max }